Ich habe einfach zu viel Zeit meines Tages damit verbracht, einige Fehler herauszufinden, als ich eine JNDI-Factory-Bean angeschlossen habe. Das Problem stellte sich heraus, dass stattdessen ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Ich hatte das tatsächlich geschrieben ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
Ich schließe daraus, dass das java:comp/env/
möglicherweise auf eine Umgebungsvariable verweist und es so macht, dass letztendlich meine Kontextdatei betrachtet wird. Der einzige Unterschied ist java:comp/env/
. Was macht das aus dem Mund eines Experten?
Ohne das java:comp/env/
Präfix im Wert würde ich eine Fehlermeldung erhalten, die besagt, dass "Name jdbc in diesem Kontext nicht gebunden ist" .
jdbc/loc
und somitjava:comp/env/jdbc/loc
richtig sind), während die Antwort von Cherouvim impliziert, dass Sie das erste Beispiel falsch verwendet haben (java:comp/env/jdbc/loc
und somitjdbc/loc
richtig sind). Unabhängig davon lautet die eigentliche Antwort: Es hängt vom aktuellen Kontext ab.Antworten:
Zitieren von https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Die Bindung, die Sie aus dem Frühjahr oder beispielsweise aus einem Tomcat-Kontextdeskriptor vorgenommen haben, wird standardmäßig unter Java angezeigt: comp / env /
Zum Beispiel, wenn Ihre Konfiguration ist:
Dann können Sie direkt darauf zugreifen, indem Sie:
oder Sie können einen Zwischenschritt ausführen, damit Sie nicht für jede Ressource, die Sie abrufen, "java: comp / env" angeben müssen:
quelle
Es gibt auch eine Eigenschaft
resourceRef
vonJndiObjectFactoryBean
dem heißt, wenn auftrue
, verwendet , um automatisch die Zeichenfolge voranstellen ,java:comp/env/
wenn es nicht bereits vorhanden ist.quelle
Nach mehreren Versuchen und tiefer in Tomcats Quellcode habe ich herausgefunden, dass die einfache Eigenschaft useNaming = "false" den Trick gemacht hat !! Jetzt löst Tomcat die Namen java: / liferay anstelle von java: comp / env / liferay auf
quelle