Po prostu spędziłem zbyt dużo czasu w ciągu dnia, próbując znaleźć błędy podczas podłączania fabrycznej fasoli JNDI. Problem okazał się taki, że zamiast tego ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/loc"/>
</bean>
Właściwie to napisałem ...
<bean id="someId" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/loc"/>
</bean>
Wnioskuję, że java:comp/env/
być może odwołuje się do jakiejś zmiennej środowiskowej i sprawia, że ostatecznie przeglądany jest mój plik kontekstu. Jedyna różnica to java:comp/env/
. Z ust eksperta, co to robi?
Bez java:comp/env/
przedrostka w wartości wystąpiłby błąd o treści „Nazwa jdbc nie jest związana w tym kontekście” .
jdbc/loc
i dlategojava:comp/env/jdbc/loc
jest poprawna), podczas gdy odpowiedź cherouvima sugeruje, że nieprawidłowo użyłeś pierwszego przykładu (java:comp/env/jdbc/loc
i dlategojdbc/loc
jest poprawna). Niezależnie od tego, prawdziwa odpowiedź brzmi: zależy to od aktualnego kontekstu.Odpowiedzi:
Cytując https://web.archive.org/web/20140227201242/http://v1.dione.zcu.cz/java/docs/jndi-1.2/tutorial/beyond/misc/policy.html
Więc powiązanie, które zrobiłeś od wiosny lub, na przykład, z deskryptora kontekstu tomcat, przechodzi domyślnie w java: comp / env /
Na przykład, jeśli Twoja konfiguracja to:
Następnie możesz uzyskać do niego bezpośredni dostęp za pomocą:
lub możesz wykonać krok pośredni, aby nie musieć określać „java: comp / env” dla każdego pobieranego zasobu:
źródło
Istnieje również nieruchomość
resourceRef
oJndiObjectFactoryBean
to, kiedy ustawionytrue
, używany do automatycznego poprzedzić ciągjava:comp/env/
, jeśli nie jest już obecny.źródło
Po kilku próbach i zagłębieniu się w kod źródłowy Tomcata odkryłem, że prosta właściwość useNaming = "false" załatwiła sprawę !! Teraz Tomcat rozpoznaje nazwy java: / liferay zamiast java: comp / env / liferay
źródło