Jaki jest cel JNDI
Jak możesz sobie wyobrazić użycie JNDI, z przykładem, jeśli to możliwe?
4 answers
JNDI jest interfejsem nazw i katalogów Java. Jest on używany do oddzielenia obaw aplikacji developer i aplikacji deployer . Pisząc aplikację, która opiera się na bazie danych, nie musisz martwić się o nazwę użytkownika lub hasło do łączenia się z tą bazą danych. JNDI pozwala programiście nadać nazwę bazie danych i polegać na wdrożeniu, aby zmapować tę nazwę do rzeczywistej instancji bazy danych.
Na przykład, jeśli jesteś pisząc kod, który działa w kontenerze Java EE, możesz napisać to, aby zdobyć źródło danych o nazwie JNDI "Database":
DataSource dataSource = null;
try
{
Context context = new InitialContext();
dataSource = (DataSource) context.lookup("Database");
}
catch (NamingException e)
{
// Couldn't find the data source: give up
}
Uwaga nie ma tu nic o sterowniku bazy danych, nazwie użytkownika ani haśle. Który jest skonfigurowany wewnątrz kontenera.
JNDI nie jest ograniczone do baz danych (JDBC); wszelkiego rodzaju usługi mogą mieć nazwy. Aby uzyskać więcej informacji, zapoznaj się z Sun tutorial na ten temat.
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-11-21 21:48:46
JNDI jest bardzo potężnym mechanizmem zarówno organizowania informacji konfiguracyjnych, jak i odkrywania i słuchania usług za pomocą EventContext
. W JNDI możesz wyszukać i odsłuchać dowolny obiekt (nie tylko DataSource
s), zakładając, że twój dostawca usług JNDI go obsługuje.
Oczywiście jedynym problemem jest posiadanie dostawcy usług JNDI; wspaniałą rzeczą jest to, że zaskakująco łatwo jest toczyć własne. W końcu możesz zakodować dowolną instancję Javy do XML
używając JavaBeans XMLEncoder
i XMLDecoder
: nie musisz polegać na działaniu na serwerze aplikacji!
Więc jaka jest różnica między tymi plikami konfiguracyjnymi? Cóż, może to być dużo czystsze, ponieważ wszystkie Twoje aplikacje mogą uzyskać swoją konfigurację z tego samego miejsca . Jeśli muszą udostępnić informacje konfiguracyjne (np. lokalizacje bazy danych), to można to zdefiniować raz w JNDI. Załóżmy, że przeniosłeś serwery baz danych: nie musisz zapamiętaj pliki konfiguracyjne gazillion z lokalizacją w nim. Po prostu idź do jednego miejsca: JNDI.
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-08-29 17:23:47
JNDI jest API używanym do uzyskiwania dostępu do katalogów i usług nazewnictwa (tj. środków, za pomocą których nazwy są powiązane z obiektami). Skojarzenie nazwy z obiektem nazywa się wiązaniem.
Podstawowym przykładem usługi nazewnictwa jest DNS, który mapuje nazwy maszyn na adresy IP.
Używając JNDI, aplikacje mogą przechowywać i pobierać nazwane Obiekty Java dowolnego typu.
W kontekście Javy może to być używane w plikach konfiguracyjnych, w których nie chcesz kodować na twardo zmienne specyficzne dla środowiska.
Przykład Wiosny:
Spring context file
<bean id="WSClientConfig" class="com.example.BaseClientConfigImpl">
<property name="protocol">
<jee:jndi-lookup jndi-name="java:comp/env/protocol" />
</property>
<property name="endpoint">
<jee:jndi-lookup jndi-name="java:comp/env/endpoint" />
</property>
<property name="requestPath">
<jee:jndi-lookup jndi-name="java:comp/env/requestPath" />
</property>
plik kontekstowy Tomcat
<Environment name="protocol" type="java.lang.String" value="https://"/>
<Environment name="endpoint" type="java.lang.String" value="172.0.0.1"/>
<Environment name="requestPath" type="java.lang.String" value="/path/to/service"/>
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
2014-03-28 13:02:38
JNDI pozwala na uproszczenie konstrukcji zasobu do tylko Nazwa . Tak więc, to wiele szczegółów Grupa w 1 dla wygody/bezpieczeństwa / itp. (aka abstraction layer)
do realizacji: skonfiguruj listę właściwości odpowiadającą wstępnie zdefiniowanym polom w interfejsie kontekstowym Jndi. (te właściwości określają ustawienia dla wykonania jndi; ale * nie nazwę wyszukiwania)
Properties props = new Properties();
//field Context.INITIAL_CONTEXT_FACTORY => property name java.naming.factory.initial
//field Context.PROVIDER_URL => property name java.naming.provider.url
props.load(new FileInputStream("*properties file*")); //prop file in this case
Context ctx = new InitialContext(props);
Object o = ctx.lookup("*name of resource*");
Najlepiej byłoby, gdyby istniała wyspecjalizowana funkcja utrzymująca LDAP katalog, DNS, itp. w Twojej organizacji (więc zunifikowany zestaw pojedynczych usług mapowania, zmniejszający rozbieżności)
Lista dostawców usług JNDI: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm
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-04-25 12:49:18