Tomcat vs WebLogic JNDI Lookup

Serwery Weblogic, których używamy, zostały skonfigurowane tak, aby zezwalały na nazwy źródeł danych JNDI, takie jak"appds".

Dla rozwoju (localhost), możemy uruchamiać Tomcat i gdy zadeklarujemy w sekcji serwera.xml, Tomcat powiesi źródła danych JNDI na "java:comp/env/jdbc/*" w drzewie JNDI.

Problem: w WebLogic, JNDI lookup jest "appds", podczas gdy w Tomcat, wydaje się, że muszę podać formalną "java:comp/env/jdbc/appds". Obawiam się, że Tomcat wersja jest standardem ukrytym, ale niestety nie mogę zmienić konfiguracji WebLogic ... oznacza to, że otrzymujemy dwa różne pliki konfiguracyjne spring (używamy spring 2.5), aby ułatwić różne środowiska.

Czy jest jakiś elegancki sposób na rozwiązanie tego problemu? Czy mogę sprawdzić nazwy JNDI bezpośrednio w Tomcat? Czy wiosna może mieć imię i szukać w obu miejscach? Wyszukiwania Google lub sugestie byłyby świetne.

Author: Luther Baker, 2008-09-06

8 answers

JndiLocatorSupport posiada właściwość resourceRef. Podczas ustawiania tej wartości true, prefiks "java: comp / env /" zostanie automatycznie poprzedzony. Uważam więc, że poprawne byłoby rozróżnienie tego parametru podczas przechodzenia z Tomcat do Weblogic.

 10
Author: martsraits,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-14 19:37:29

Jak używać pojedynczej nazwy JNDI w aplikacji internetowej

Sam zmagałem się z tym od kilku miesięcy. Najlepszym rozwiązaniem jest uczynienie aplikacji przenośną, dzięki czemu masz tę samą nazwę JNDI zarówno w Tomcat, jak i Weblogic.

Aby to zrobić, zmieniasz swoje web.xml i spring-beans.xml, aby wskazywać na pojedynczą nazwę jndi i dostarczasz mapowanie do konkretnej nazwy JNDI dla każdego dostawcy.

Umieściłem każdy plik poniżej.

Potrzebujesz:

  • A <resource-ref /> wpis w sieci.xml, aby aplikacja używała jednej nazwy
  • Plik jndi do mapowania nazwy pliku JNDI do zasobu zarządzanego przez WebLogic]}
  • plik META-INF/context.xml do mapowania nazwy jndi do zasobu zarządzanego przez Tomcat
    • Może to być zarówno w instalacji Tomcat, jak i w Twojej aplikacji.

Ogólnie rzecz biorąc, preferuj nazwy jndi w aplikacji, takie jak jdbc/MyDataSource i jms/ConnFactory i unikaj ich przedrostka java:comp/env/.

Również źródła danych i fabryki połączeń są najlepiej zarządzane przez kontener i używane z JNDI. Jest to częsty błąd , aby utworzyć instancję puli połączeń bazy danych w aplikacji.

wiosna

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

<jee:jndi-lookup jndi-name="jdbc/appds"
                 id="dataSource" />
</beans>

www.xml

<resource-ref>
    <description>My data source</description>
    <res-ref-name>jdbc/appds</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

weblogic.xml

<?xml version="1.0" encoding="UTF-8" ?>
<weblogic-web-app
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://xmlns.oracle.com/weblogic/weblogic-web-app http://http://www.oracle.com/technology/weblogic/weblogic-web-app/1.1/weblogic-web-app.xsd">

<resource-description>
    <jndi-name>appds</jndi-name>
    <res-ref-name>jdbc/appds</res-ref-name>
</resource-description>
</weblogic-web-app>

META-INF / context.xml (Dla Tomcat)

<Context>
    <ResourceLink global="jdbc/appds" name="jdbc/appds" type="javax.sql.DataSource"/>
</Context>
 19
Author: Leonel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:50

Poradziłem sobie z Tomcatem i WebLogic używając Springa. Tutaj {[2] } jest opis jak to działało dla mnie.

 2
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 10:23:35

Poniższy config działa dla mnie w Tomcat i Weblogic.

Wiosną:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
   <!-- This will prepend 'java:comp/env/' for Tomcat, but still fall back to the short name for Weblogic -->
   <property name="resourceRef" value="true" /> 
   <property name="jndiName" value="jdbc/AgriShare" />
</bean>

W Weblogic Admin Console Utwórz zasób JDBC o nazwie jdbc/AgriShare. W sekcji "cele", upewnij się, że kierujesz źródło danych do serwera, na którym wdrażasz aplikację!. Ten konkretny punkt kosztował mnie trochę czasu...

 2
Author: Val Blant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-09 19:23:38

A może zmienna evironment? Ustaw maszyny programistyczne o nazwie tomcat i produkcję o nazwie Weblogic. Możesz nawet ustawić kod domyślny (WebLogic) w przypadku, gdy zmienna nie istnieje.

 1
Author: Marcio Aguiar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-07 05:18:20

Jak odnosisz się do zasobów wiosną?

Oto co mamy dla tomcat:

Context:

<Resource name="jms/ConnectionFactory" auth="Container" type="org.apache.activemq.ActiveMQConnectionFactory" description="
JMS Connection Factory"
        factory="org.apache.activemq.jndi.JNDIReferenceFactory" brokerURL="tcp://localhost:61615" brokerName="StandaloneAc
tiveMQBroker"/>

Wiosna:

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

<jee:jndi-lookup jndi-name="jms/ConnectionFactory" id="connectionFactory" resource-ref="true"
                         expected-type="javax.jms.ConnectionFactory" lookup-on-startup="false"/>

Przestrzeń nazw jee pochodzi z:

Http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd

 1
Author: harmanjd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-14 20:34:46

Ustawienie DataSource w samej aplikacji nie jest takie szalone :) powiedziałbym, że jest to nawet obowiązkowe, jeśli aplikacja ma być wdrożona w sieci. Rzeka, GigaSpaces lub podobne.

Uwaga: nie mówię, że ustawienia połączenia muszą być zakodowane na twardo wewnątrz wojny, muszą być dostarczone w czasie wdrażania/uruchomieniu. Upraszcza to zarządzanie instancjami w chmurze, ponieważ istnieje tylko miejsce do skonfigurowania.

Konfiguracja zasobów w kontenerze ma sens tylko wtedy, gdy wiele aplikacji jest tam wdrażanych i mogą one korzystać ze współdzielonych zasobów.

Ponownie, we wdrożeniach typu cloud na wystąpienie kontenera serwletów przypada tylko jedna aplikacja.

 1
Author: Konstantin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-27 19:21:47

Moja aplikacja również miała podobny problem i tak go rozwiązałem:

1) WEB-INF/classes/application.properties zawiera wpis:

ds.jndi=java:comp/env/jdbc/tcds

2) na maszynie WLS mam wpis w pliku /etc/sysenv:

ds.jndi=wlsds

3) skonfigurowałem spring do wyszukiwania JNDI vis właściwości ${ds.jndi}, używając PropertyPlaceholderConfigurer bean z classpath:application.properties i file:/etc/sysenv jako lokalizacje. Ustawiłem również ignoreResourceNotFound na true, aby programiści nie musieli mieć /etc/sysenv na swoich maszynach.

[[14]}4) przeprowadzam test integracyjny z wykorzystaniem ładunku+Molo i mogę nie prawidłowo skonfigurować środowiska JNDI tam. Więc mam fallback BasicDataSource skonfigurowany za pomocą defaultObject właściwość JndiObjectFactoryBean.
 0
Author: Binil Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 20:07:44