Jak można wykorzystać wykorzystanie JNDI, jeśli to możliwe, na przykład?Jaki jest cel JNDI
Odpowiedz
JNDI to interfejs nazw i katalogów Java. Służy do rozdzielania problemów aplikacji i aplikacji. Podczas pisania aplikacji, która bazuje na bazie danych, nie musisz martwić się o nazwę użytkownika ani hasło do łączenia się z tą bazą danych. JNDI umożliwia programistom nadanie nazwy bazie danych i polega na tym, że wdrażający zmapuje tę nazwę do rzeczywistego wystąpienia bazy danych.
Na przykład, jeśli masz kod, który działa w kontenerze Java EE pisanie, można napisać to zdobyć źródło danych z nazwą JNDI „Baza danych”:
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 nic tutaj o sterowniku bazy danych, nazwie użytkownika lub haśle. To jest skonfigurowane wewnątrz kontenera.
JNDI nie ogranicza się do baz danych (JDBC); wszystkie rodzaje usług mogą mieć nadane imiona. Aby uzyskać więcej informacji, należy zapoznać się z tematem Sun tutorial.
Więc z tym przykładem na obrazku, jak JNDI różni się od umieszczania nazw bazy danych w pliku config xml lub pliku właściwości, a następnie czytając to stamtąd? – Ajay
Po pierwsze, musisz przechowywać hasło w postaci zwykłego tekstu w pliku konfiguracyjnym. Po drugie, jeśli masz kilka aplikacji wskazujących na tę samą bazę danych i coś ze zmian w konfiguracji bazy danych, musisz zaktualizować konfigurację w wielu miejscach. –
cóż, w jaki sposób JNDI pomaga tutaj? – Ajay
JNDI to bardzo potężny mechanizm do organizowania informacji o konfiguracji i odkrywania i słuchania usług przy użyciu EventContext
. W JNDI można wyszukiwać i słuchać obiektu dowolnego obiektu (nie tylko s), zakładając, że obsługuje go dostawca usług JNDI.
Oczywiście jedynym problemem jest posiadanie dostawcy usług JNDI; Wspaniałą rzeczą jest to, że zaskakująco łatwe jest samodzielne toczenie. Po tym wszystkim można kodować dowolną instancję Javy do XML
przy użyciu JavaBeans XMLEncoder
i XMLDecoder
: nie trzeba polegać na pracy na serwerze aplikacji!
Jaka jest różnica między tymi plikami konfiguracyjnymi? Cóż, może być znacznie czystsze, ponieważ wszystkie aplikacje mogą uzyskać konfigurację od w tym samym miejscu. Jeśli trzeba udostępnić informacje konfiguracyjne (np. Lokalizacje bazy danych), to można je zdefiniować raz w JNDI. Załóżmy, że przenosiłeś serwery baz danych: nie musisz pamiętać plików konfiguracyjnych gazillion z lokalizacją w nim. Po prostu przejdź do jednego miejsca: JNDI.
JNDI pozwala uprościć konstrukt zasobów tylko w postaci o nazwie. Tak więc, jest wiele szczegółów grupa na 1 dla wygody/bezpieczeństwa/etc. (Aka warstwa abstrakcji)
zrealizować: skonfigurować listę właściwości, które odpowiada predefiniowanych pól w kontekście JNDI interfejsu.(Te właściwości określić ustawienia dla realizacji JNDI, ale * nie nazwa 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*");
idealnie, wyspecjalizowaną funkcję istniałby utrzymać katalogu LDAP, DNS, itp, w swojej organizacji (tak jednolity pojedynczy mapowania określone usługi wszystkim zmniejszenie rozbieżności)
Lista JNDI usługodawców: https://www.ibm.com/support/knowledgecenter/en/SSVSD8_8.4.1/com.ibm.websphere.dtx.adapjndi.doc/concepts/c_jndi_JNDI_Service_Providers_.htm
JNDI to API umożliwia dostęp do katalogu i usług nazewnictwa (czyli środki, za pomocą których nazwy są związane z obiektami). Powiązanie nazwy z obiektem nazywa się wiązaniem.
Podstawowym przykładem usługi nazewnictwa jest DNS, który odwzorowuje nazwy komputerów na adresy IP.
Za pomocą JNDI aplikacje mogą przechowywać i pobierać określone obiekty Java dowolnego typu.
W kontekście języka Java może to być używane w plikach konfiguracyjnych, w których nie chcesz tworzyć ściśle określonych zmiennych środowiskowych.
Wiosna Przykład:
plik kontekst Wiosna
<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>
Tomcat plik kontekst
<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"/>
- 1. Jaki jest cel preompompiledApp.config?
- 2. Jaki jest cel używania?
- 3. Jaki jest cel Rake?
- 4. Jaki jest cel Mage_Core_Block_Template_Facade
- 5. Jaki jest cel IApplicationBuilder.New()
- 6. Jaki jest cel "() =>"
- 7. Jaki jest cel curdoc()?
- 8. Jaki jest cel aclocal?
- 9. Jaki jest cel vertexAttribPointer?
- 10. Jaki jest cel IAsyncStateMachine.SetStateMachine?
- 11. Jaki jest cel Ember.Container
- 12. Jaki jest cel layout.xml?
- 13. Jaki jest cel XNoImplicitPrelude?
- 14. Jaki jest cel CMakeScripts?
- 15. Jaki jest cel HttpHeaders.TryAddWithoutValidation?
- 16. Jaki jest cel ldexp?
- 17. Jaki jest cel git-mv?
- 18. Jaki jest cel Array.GetLowerBound (int)?
- 19. Jaki jest cel $ w XSLT
- 20. Jaki jest cel funkcji character_set_connection?
- 21. Jaki jest cel Pk anorma?
- 22. Jaki jest cel używania CommandType.Tabledirect
- 23. Jaki jest cel nazwy mojolicowej?
- 24. Jaki jest cel .git/log
- 25. jaki jest cel Thread.holdsLock (blokada)?
- 26. Jaki jest cel javax StreamSource
- 27. Jaki jest cel klasy Expression?
- 28. Jaki jest cel metody Thread.SpinWait?
- 29. Scala: jaki jest cel "przesłonięcia"
- 30. Jaki jest cel repozytorium artefaktów?
Można sprawdzić prywatnego blogu dla przypadków użycia: http : // tshikatshikaaa.blogspot.com/2013/01/what-is-jndi-spi-cci-ldap-and-jca.html – JVerstry
@JVerstry +1 za wskazanie artykułu, który mówi o powiązanych LDAP, JCA i CCI. – Ajay
Sprawdź [ten wątek] (http://stackoverflow.com/a/21227726/2396539) –