Jak wyszukać źródło danych JNDI spoza kontenera internetowego?

Mam skonfigurowane następujące środowisko:

  • Java 1.5
  • Sun Application Server 8.2
  • Oracle 10 XE
  • Rozpórki 2
  • Hibernate

Interesuje mnie, Jak mogę napisać kod dla Klienta Java (tj. poza aplikacją webową), który może odwoływać się do źródła danych JNDI dostarczonego przez serwer aplikacji.

Porty dla serwera aplikacji Sun są domyślnie ustawione. Istnieje źródło danych JNDI o nazwie jdbc / xxxx w konfiguracja serwera, ale zauważyłem, że konfiguracja Hibernate dla aplikacji webowej używa zamiast niej nazwy java:comp/env/jdbc / xxxx.

Większość przykładów jakie do tej pory widziałem dotyczy kodu typu

Context ctx = new InitialContext();
ctx.lookup("jdbc/xxxx");

Ale wygląda na to, że albo używam niewłaściwej nazwy JNDI, albo muszę skonfigurować jndi.Właściwości lub inny plik konfiguracyjny, aby poprawnie wskazać słuchacza? Mam appserv-rt.jar z serwera aplikacji Sun, który ma jndi.właściwości wewnątrz niego, ale nie wydaje się żeby pomóc.

Jest podobne pytanie, ale nie daje żadnego kodu / odnosi się do tego, że iBatis automatycznie uzyskuje źródło danych JNDI: dostęp do źródła danych spoza kontenera internetowego (poprzez JNDI)

Author: Community, 2010-03-26

5 answers

Utknąłem na tym samym problemie. Napisałem mały tutorial. Zasadniczo musisz stworzyć własną implementację obiektów DataSource i dodać je do własnego, niestandardowego kontekstu początkowego. Tutaj znajdują się przykłady źródłowe:

Uruchamianie Beans lokalnie wykorzystujących źródła danych serwera aplikacji

 17
Author: djsumdog,
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-01-15 09:00:26

Spróbuj Simple-JNDI. Zapewnia implementację usługi JNDI w pamięci i umożliwia wypełnianie środowiska JNDI obiektami zdefiniowanymi w plikach właściwości. Istnieje również wsparcie dla ładowania zasobów danych lub pul połączeń skonfigurowanych w pliku.

Aby uzyskać pulę połączeń, musisz utworzyć taki plik:

type=javax.sql.DataSource
driver=com.sybase.jdbc3.jdbc.SybDriver
pool=myDataSource
url=jdbc:sybase:Tds:servername:5000
user=user
password=password

W aplikacji możesz uzyskać dostęp do puli za pośrednictwem

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("path/to/your/connectionPool");

Używałem Simple-JNDI do tego celu od lat. Ale nie jest pod aktywny rozwój. Ponieważ znalazłem pewne problemy dotyczące współdzielonych kontekstów (zwłaszcza przy użyciu zasobów danych), postanowiłem rozgałęzić oryginalny projekt i dodać kilka nowych funkcji. Teraz jest 0.13.0. Więcej na ten temat znajdziesz na stronie https://github.com/h-thurow/Simple-JNDI .

 2
Author: Holger Thurow,
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-01-16 07:12:33

Jeśli mówisz o codziennej aplikacji Java działającej poza kontenerem, to masz pecha. Efektywnie trzeba by skonfigurować własną implementację JNDI, z własną pulą połączeń configure, itp.

Można jednak pisać aplikacje Java EE "autonomiczne". Są to aplikacje, które działają w kliencie aplikacji Java EE. Zasadniczo jest to aplikacja, która jest wdrażana i pakowana, ale następnie wykonywana za pomocą launchera dostarczonego przez Twoją Javę Kontener EE.

Podczas uruchamiania w środowisku klienta aplikacji wszystkie zasoby serwera aplikacji (pule połączeń, EJB, kolejki itp.) są dostępne dla Twojej aplikacji tak, jak byłyby, gdyby kod został wdrożony na serwerze aplikacji.

Tutaj znajduje się dokumentacja samouczka dla Sun App Server 8.2, który jest kontenerem J2EE 1.4.

Jeśli to możliwe, zdecydowanie sugeruję aktualizację do Glassfish v2. 1, po prostu bardziej nowoczesny, lepszy serwer, który powinien wdrożyć swoje aplikacje tak dobrze, jak jest, ponieważ jest potomkiem 8.2.

 1
Author: Will Hartung,
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
2013-05-01 21:14:14

To może być trochę za późno dla ciebie, ale używam Simple-JNDI library przez wiele lat w dokładnie wspomnianym celu. Nie jestem pewien, czy ma wszystkie opcje, których możesz potrzebować, ale wystarczyło to dla moich narzędzi wiersza poleceń.

 0
Author: runningboffin,
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-01-15 08:10:50

To czego potrzebujesz to klient aplikacji

Alternatywnie możesz ustanowić zwykłe połączenie JDBC z samodzielnego klienta, które może być łatwiejsze do utworzenia - ale będziesz musiał skonfigurować szczegóły połączenia w kliencie i nie możesz ponownie użyć ustawień z serwera aplikacji.

 0
Author: pitpod,
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-01-15 08:11:37