Dlaczego warto używać JNDI dla źródeł danych

Czy ktoś może wyjaśnić, dlaczego JNDI powinno być preferowanym sposobem na ujawnienie usług takich jak baza danych / jms?

Posty, na które wpadam, mówią o zaletach nie konieczności ładowania konkretnego Menedżera sterowników, korzystaniu z poolingu połączeń itp. ale to jest łatwo osiągalne, określając Menedżera sterowników w pliku właściwości i używając reflection.

Łączenie połączeń można również uzyskać poprzez okablowanie we właściwej implementacji do aplikacji za pomocą sprężyny lub inaczej.

Więc dlaczego używanie JNDI byłoby lepsze?

 42
Author: Kailash, 2011-10-14

5 answers

JNDI naprawdę świeci, gdy trzeba przenieść aplikację między środowiskami: rozwój do integracji, testowanie do produkcji. Jeśli skonfigurujesz każdy serwer aplikacji tak, aby używał tej samej nazwy JNDI, możesz mieć różne bazy danych w każdym środowisku i nie musisz zmieniać kodu. Po prostu odbierasz akta wojny i zostawiasz je w nowym środowisku.

Oto kilka innych założeń, które są kluczowe, aby wiedzieć, oceniając tę odpowiedź:

    Nie mam dostępu do serwerów na który kod jest w ogóle wdrożony, z wyjątkiem dostępu tylko do odczytu do dzienników.
  • osoba, która pisze i pakuje kod, nie jest tą samą osobą, która konfiguruje i zarządza serwerem.
  • gdy plik wojenny rozpoczyna swoją podróż do PROD, nie można go ponownie zmienić bez powrotu do początku. Wszelkie testy wykonywane przez QA na serwerze testowym muszą zostać wykonane ponownie, jeśli wojna zostanie zmieniona.

Być może nie widzisz tej korzyści, ponieważ jesteś samotnym programistą, który pisze kod na lokalnym pulpicie i wdraża prawo do produkcji.

 44
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
2011-10-13 22:21:39

Myślę, że mechanizm "preferowany" jest preferowany przez osobę wykonującą admina i konfigurację. Jak zauważył duffymo, bardzo ważne jest, aby konfiguracja była zewnętrzna od Twojego artefaktu, ale poza tym, powiedziałbym, że wszystko pójdzie dobrze. Jeśli twój sysadmin woli używać GUI do konfigurowania wpisów JDNI, spoko. Jeśli woli edytować pliki właściwości za pomocą cssh i vi, też spoko. Jeśli jesteś odpowiedzialny zarówno za rozwój, jak i konfigurację/wdrażanie aplikacji, to jest to całkiem twoja decyzja. Osobiście lubię trzymać jak najwięcej implementacji w moim artefakcie, co oznacza, że moje źródło danych i sterowniki również tam mieszkają.

Jeśli pytasz o TECHNICZNE korzyści JNDI nad alternatywami, nie jestem pewien, czy istnieją, ale może chcesz wyjaśnić swoje pytanie.

 13
Author: Ryan Stewart,
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-10-13 22:52:23

Jak wspomniano przez innych JNDI w większości jest używany do wyszukiwania lokalizacji usług, ale głównie dla zasobów podobnych do DB.

Najbardziej irytujące jest to, że Java LDAP API jest również JNDI API. Podczas pracy z LDAP abstrakcje są bardzo mylące. JNDI ma również tę wadę, że czasami jest jednym punktem awarii.

Możesz łatwo wykonać większość tego, co robi JNDI, używając aliasów nazw hostów. To jest Zrób alias, który wskazuje MYRESOURCE na 127.0.0.1 w Twoim /etc/hosts (lub gdziekolwiek to jest dla Twojego env). Następnie w konfiguracji aplikacji użyj MYRESOURCE jako nazwy hosta(na przykład w adresie URL jdbc).

Następnie po przeniesieniu aplikacji do produkcji po prostu zmień plik produkcji /etc/hosts, aby wskazać MYRESOURCE do zasobów produkcyjnych/usług (takich jak serwer bazy danych prod).

Powyższy jest o wiele bardziej przenośnym katalogiem nazw mniejszych footprintów, który będzie działał w innych językach (ruby, python). Będzie również działać z rzeczami, które nie są normalnie wykonywane z JNDI, takimi jak Usługi wypoczynkowe. Jedyną irytującą rzeczą jest to, że będziesz musiał zaktualizować pliki hostów serwerów, ale można to zautomatyzować za pomocą skryptów SSH.

 5
Author: Adam Gent,
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
2012-08-02 15:43:04

Prawdziwa korzyść JNDI nad plikami właściwości pojawia się podczas wdrażania do środowiska klastrowego. Używanie plików właściwości pozostawia możliwość, że niektóre instancje serwera mają inną wartość. Podczas korzystania z JNDI ta sama wartość jest wypychana na wszystkie klastry serwerów przez kontroler domeny, co eliminuje konieczność kopiowania tego samego pliku właściwości na wszystkie serwery (i prawdopodobnie ponowne uruchomienie serwera/aplikacji).

 4
Author: SensiJense,
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-17 07:38:43

Inny obszar, w którym JNDI pomaga:

It abstracts The lookup of resources. Zwykle konfiguracja JNDI jest przechowywana w pliku XML na serwerze aplikacji, ale nie musi. Konfiguracja może być na przykład przechowywana na serwerze LDAP, aby ułatwić jej centralną konserwację.

Jeśli uruchamiane aplikacje używają JNDI do wyszukiwania tego, czego potrzebują, możesz przełączyć się z plików konfiguracyjnych na serwer LDAP bez modyfikowania aplikacji. Jeśli każdy aplikacje oczekują pliku właściwości z zakodowaną nazwą, masz pecha. Wyobraź sobie przedsiębiorstwo z dziesiątkami aplikacji w produkcji-zmiana ich wszystkich byłaby znaczącym problemem.

Innymi słowy, JNDI świeci głównie dla złożonych scenariuszy wdrażania, takich jak:

  • wiele serwerów aplikacji (prawdopodobnie klastrowych)
  • wiele różnych zastosowań
  • scentralizowana konfiguracja
  • różne etapy serwera (test, produkcja)

Więc może się to wydawać przesadą na początku, ale jest bardzo przydatne w scenariuszach tezy. Oczywiście niektóre korzyści mają zastosowanie nawet w przypadku małych wdrożeń, takich jak standardowa konfiguracja połączeń DB.

 3
Author: sleske,
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-01-21 16:58:23