Co to jest JNDI ?
Jakie jest jego podstawowe zastosowanie?
Kiedy jest używany?
Co to jest JNDI ?
Jakie jest jego podstawowe zastosowanie?
Kiedy jest używany?
Odpowiedzi:
Co to jest JNDI?
Oznacza nazewnictwo Java i interfejs katalogu .
Jakie jest jego podstawowe zastosowanie?
JNDI pozwala aplikacjom rozproszonym na wyszukiwanie usług w abstrakcyjny, niezależny od zasobów sposób.
Kiedy jest używany?
Najczęstszym przypadkiem użycia jest skonfigurowanie puli połączeń z bazą danych na serwerze aplikacji Java EE. Każda aplikacja wdrożona na tym serwerze może uzyskać dostęp do potrzebnych połączeń przy użyciu nazwy JNDI java:comp/env/FooBarPool
bez konieczności poznawania szczegółów połączenia.
Ma to kilka zalet:
devl->int->test->prod
środowisk, możesz użyć tej samej nazwy JNDI w każdym środowisku i ukryć używaną bazę danych. Aplikacje nie muszą się zmieniać podczas migracji między środowiskami.Co to jest JNDI?
Java Naming and Directory Interface TM (JNDI) to interfejs programowania aplikacji (API), który zapewnia funkcje nazewnictwa i katalogowania aplikacjom napisanym przy użyciu języka programowania Java TM . Jest zdefiniowany jako niezależny od konkretnej implementacji usługi katalogowej. W ten sposób można uzyskać dostęp do różnych katalogów (nowych, powstających i już wdrożonych) we wspólny sposób.
Jakie jest jego podstawowe zastosowanie?
Większość z nich jest ujęta w powyższej odpowiedzi, ale chciałbym przedstawić tutaj architekturę, aby powyższe miało więcej sensu.
Aby korzystać z JNDI, musisz mieć klasy JNDI i co najmniej jednego dostawcę usług. Zestaw Java 2 SDK, wersja 1.3 zawiera trzech dostawców usług dla następujących usług nazewnictwa / usług katalogowych:
Zasadniczo tworzysz obiekty i rejestrujesz je w usługach katalogowych, które możesz później wyszukać i wykonać operację.
JNDI w kategoriach laika jest w zasadzie interfejsem umożliwiającym uzyskanie instancji zasobów wewnętrznych / zewnętrznych, takich jak
javax.sql.DataSource,
javax.jms.Connection-Factory,
javax.jms.QueueConnectionFactory,
javax.jms.TopicConnectionFactory,
javax.mail.Session, java.net.URL,
javax.resource.cci.ConnectionFactory,
lub dowolny inny typ zdefiniowany przez adapter zasobów JCA. Zapewnia składnię umożliwiającą tworzenie dostępu, niezależnie od tego, czy są one wewnętrzne, czy zewnętrzne. tj. (comp / env w tym przypadku oznacza, gdzie komponent / środowisko istnieje wiele innych składni):
jndiContext.lookup("java:comp/env/persistence/customerDB");
java.lang.String
informacje konfiguracyjne.
Przegląd JNDI
JNDI to interfejs API określony w technologii Java, który zapewnia funkcje nazewnictwa i katalogowania aplikacjom napisanym w języku programowania Java. Jest zaprojektowany specjalnie dla platformy Java z wykorzystaniem modelu obiektowego Java. Za pomocą JNDI aplikacje oparte na technologii Java mogą przechowywać i pobierać nazwane obiekty Java dowolnego typu. Ponadto JNDI zapewnia metody wykonywania standardowych operacji na katalogach, takich jak kojarzenie atrybutów z obiektami i wyszukiwanie obiektów za pomocą ich atrybutów.
JNDI jest również definiowany niezależnie od konkretnej implementacji nazewnictwa lub usługi katalogowej. Umożliwia aplikacjom dostęp do różnych, prawdopodobnie wielu usług nazewnictwa i usług katalogowych za pomocą wspólnego interfejsu API. Za tym wspólnym interfejsem API można bezproblemowo podłączyć różnych dostawców nazewnictwa i usług katalogowych. Umożliwia to aplikacjom opartym na technologii Java korzystanie z informacji z różnych istniejących usług nazewnictwa i usług katalogowych, takich jak LDAP, NDS, DNS i NIS (YP), a także umożliwia aplikacjom współistnienie ze starszym oprogramowaniem i systemami.
Używając JNDI jako narzędzia, możesz budować nowe potężne i przenośne aplikacje, które nie tylko wykorzystują model obiektowy Javy, ale są również dobrze zintegrowane ze środowiskiem, w którym są wdrażane.
Co to jest JNDI?
JNDI oznacza Java Naming and Directory Interface. Jest standardowo wyposażony w J2EE.
Jakie jest jego podstawowe zastosowanie?
Dzięki temu API możesz uzyskać dostęp do wielu rodzajów danych, takich jak obiekty, urządzenia, pliki nazw i usługi katalogowe, np. jest używany przez EJB do wyszukiwania zdalnych obiektów. JNDI został zaprojektowany w celu zapewnienia wspólnego interfejsu dostępu do istniejących usług, takich jak DNS, NDS, LDAP, CORBA i RMI.
Kiedy jest używany?
Możesz użyć JNDI do wykonywania operacji nazewnictwa, w tym operacji odczytu i operacji aktualizowania przestrzeni nazw. Następujące operacje są opisane tutaj .
Usługa nazewnictwa kojarzy nazwy z obiektami i znajduje obiekty na podstawie ich nazw (rejestr RMI jest dobrym przykładem usługi nazewnictwa). JNDI zapewnia wspólny interfejs wielu istniejących usług nazewnictwa, takich jak LDAP, DNS.
Bez JNDI informacje o lokalizacji lub dostępie do zasobów zdalnych musiałyby zostać zakodowane na stałe w aplikacjach lub udostępnione w konfiguracji. Utrzymywanie tych informacji jest dość żmudne i podatne na błędy.
Jestem tylko ciekawy, dlaczego oficjalne dokumenty są tak ignorowane, które już drobiazgowo opracowują szczegóły.
Ale jeśli chcesz zrozumieć przypadki, zapoznaj się z odpowiedzią duffymo .
Java Naming and Directory Interface TM (JNDI) to interfejs programowania aplikacji (API), który zapewnia funkcje nazewnictwa i katalogowania aplikacjom napisanym przy użyciu języka programowania Java TM . Jest zdefiniowany jako niezależny od konkretnej implementacji usługi katalogowej. W ten sposób można uzyskać dostęp do różnych katalogów - nowych, powstających i już wdrożonych - w wspólny sposób.
I jego architektura
I zwykle jak go używasz .
I am just curious why the official docs are so ignored which elaborate the details meticulously already
Może dlatego, że nie wyjaśniają w sposób wystarczający, aby zwykli ludzie mogli to zrozumieć?
Posłużę się jednym przykładem, aby wyjaśnić, w jaki sposób JNDI może zostać użyty do skonfigurowania bazy danych bez znajomości nazwy użytkownika i hasła bazy danych przez programistę aplikacji.
1) Skonfigurowaliśmy źródło danych w standalone-full.xml serwera JBoss . Dodatkowo możemy również skonfigurować szczegóły puli.
<datasource jta="false" jndi-name="java:/DEV.DS" pool-name="DEV" enabled="true" use-ccm="false">
<connection-url>jdbc:oracle:thin:@<IP>:1521:DEV</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<driver>oracle</driver>
<security>
<user-name>usname</user-name>
<password>pass</password>
</security>
<security>
<security-domain>encryptedSecurityDomain</security-domain>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
<background-validation-millis>1</background-validation-millis>
</validation>
<statement>
<prepared-statement-cache-size>0</prepared-statement-cache-size>
<share-prepared-statements>false</share-prepared-statements>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>10</max-pool-size>
</pool>
</statement>
</datasource>
Teraz ta nazwa jndi i powiązany z nią obiekt źródła danych będą dostępne dla naszego application.application.
2) Możemy pobrać ten obiekt źródła danych za pomocą klasy JndiDataSourceLookup.
Wiosna utworzy instancję komponentu bean źródła danych po tym, jak podamy nazwę jndi.
Teraz możemy zmienić rozmiar puli, nazwę użytkownika lub hasło zgodnie z naszym środowiskiem lub wymaganiami, ale nie wpłynie to na aplikację.
Uwaga : encryptedSecurityDomain, musimy skonfigurować go osobno na serwerze JBoss, takim jak
<security-domain name="encryptedSecurityDomain" cache-type="default">
<authentication>
<login-module code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="<usernamefordb>"/>
<module-option name="password" value="894c8a6aegc8d028ce169c596d67afd0"/>
</login-module>
</authentication>
</security-domain>
To jeden z przypadków użycia. Mam nadzieję, że to wyjaśni.
Najlepsze wyjaśnienie znajduje się tutaj
Co to jest JNDI
Jest to interfejs API zapewniający dostęp do usługi katalogowej, to znaczy nazwy odwzorowania usługi (ciągów) z obiektami, odniesienia do obiektów zdalnych lub prostych danych . To się nazywa wiązanie. Zestaw powiązań nazywany jest kontekstem . Aplikacje używają interfejsu JNDI do uzyskiwania dostępu do zasobów.
Mówiąc najprościej, to jest jak skrót mapy z kluczem String i wartościami Object reprezentującymi zasoby w sieci.
Jakie problemy rozwiązuje JNDI
Bez JNDI informacje o lokalizacji lub dostępie do zasobów zdalnych musiałyby zostać zakodowane na stałe w aplikacjach lub udostępnione w konfiguracji. Utrzymywanie tych informacji jest dość żmudne i podatne na błędy.
Jeśli zasoby zostały przeniesione na inny serwer, na przykład z innym adresem IP, wszystkie aplikacje korzystające z tego zasobu musiałyby zostać zaktualizowane o te nowe informacje. W przypadku JNDI nie jest to konieczne. Tylko odpowiednie powiązanie zasobów musi zostać zaktualizowane. Aplikacje mogą nadal uzyskiwać do niej dostęp za pomocą swojej nazwy, a przeniesienie jest przezroczyste.