JNDI pamatjēdzieni

Mērķi

  • Saprast JNDI nolūku
  • Izveidot apakškontekstu, piesaistīt (bind) tam objektus, kā arī tos attiecīgajā kontekstā mainīt, izmest vai sameklēt
  • Aplūkot JNDI koku, izmantojot kādu rīku

JNDI (Java Naming and Directory Interface)

  • Vārdu un direktoriju servisi piesaista identifikatoriem resursus. Ir divu veidu resursi - konteksti (C), jeb vārdu servisa koka iekšējās virsotnes, un objekti (O), jeb vārdu servisa koka lapas.
    JNDI tree
  • JNDI ir API, lai vienādā veidā piekļūtu dažādiem vārdu un direktoriju servisiem.
    JNDI dependencies

JNDI piedāvā divus interfeisus - aplikāciju programmētājam (Application Programming Interface (API)) un servisa implementētājam (Service Provider Interface (SPI)). Izmantojot pārdomāto JNDI API, Javas aplikāciju programmētāji var ignorēt detaļas, kas vajadzīgas, lai piekļūtu šo servisu dažādajām, t.sk. bieži neJaviskajām bibliotēkām. JNDI draiveri ir plaši izplatīti.

Praksē izmanto dažādus vārdu un direktoriju servisus. To vidū ir LDAP (Lightweight Directory Access Protocol), DNS (Domain Name Service), NIS (Network Information Service), RMI reģistrs (Remote Method Invocation registry), u.c. Izmantojot JNDI SPI, servisu piegādātāji var izveidot JNDI adapterus šiem servisiem. Javas aplikāciju izstrādātāji savukārt lieto JNDI API, lai tiem piekļūtu.

http://java.sun.com/products/jndi satur pārskatu par esošajiem servisiem un to JAR failiem.

Kad izmantot JNDI?

JNDI ir meklēšanas serviss (lookup service) šādām vajadzībām:

  • Vides mainīgajiem Web aplikācijās
  • EJB komponentiem un to vides mainīgajiem
  • Datubāzu konekciju baseiniem, kuriem piekļūst ar DataSource
  • JMS konekciju fabrikām un galamērķiem

JNDI NAV lietderīgi izmantot kā datubāzi:

  • JNDI objektus glabā RAM atmiņā
  • JNDI objekti var replicēties, ja serveri saslēgti klasterī

Lai gan JNDI meklēšanas un labošanas iespējas rada iespaidu par to kā par hierarhiski sakārtotu objektu datubāzi, JNDI un datubāzu lietojuma jomas būtiski atšķiras. JNDI vislabāk lietot relatīvi nelielu Javas objektu glabāšanai, kurus bieži aplikācijai ir jāatrod. JNDI objektus glabā operatīvajā atmiņā (nevis uz diska); serveru klasterizācijas gadījumā (ja ir vairāki serveri, kuri dalās ar saviem resursiem), tad JNDI objekti paši var replicēties uz visām klastera mašīnām. Ja tajos glabātu lielus objektus, tad tas prasītu daudz operatīvās atmiņas, turklāt varētu rasties arī tīkla noslodzes problēmas.

JNDI koks

  • Objekti ir piesaistīti (bound) JNDI "kokā", Javas objekti ir lapas, konteksti ir iekšējās koka virsotnes.
  • InitialContext ir izejaspunkts visām meklēšanas darbībām JNDI kokā
  • Piesaistījums (binding) piesaista objektu (vai apakškontekstu) loģiskam vārdam noteiktā kontekstā.

Dažas definīcijas:

Context - (iekšēja) virsotne JNDI kokā , līdzīga direktorijai failu sistēmas struktūrā. Konteksti var saturēt citus kontekstus un arī objektus. Kontekstu, kurš piesaistīts kādam citam kontekstam, sauc par apakškontekstu (sub-context).

Object - Lapa JNDI kokā. Tā ir piesaistīta kontekstam. Tā nevar saturēt citus objektus vai kontekstus. Tipiski objekti ir, teiksim, EJB "home interface" objekti, DataSource objekti, vides mainīgie EJB vai Web aplikācijām, fabrikas objekti, lai radītu konekcjas JMS topikiem, UserTransaction objekts klienta transakciju marķēšanai, utml.

Root Context - Pats augšējais konteksts visā JNDI kokā

Initial Context - Konteksts, kurš izraudzīts kā sākumpunkts visām citām darbībām. Sākotnējo kontekstu nosaka JNDI implementācija - praktiski tā ir JNDI konteksta sakne.

Atsevišķi objekti var tikt piesaistīti vairākiem kontekstiem tajā pašā kokā. Rodas jautājums, vai objekts, kurš piesaistīts diviem dažādiem kontekstiem eksistē vienreiz vai divreiz? T.i. vai objektiem piekļūst "pēc vērtības" vai "pēc references"? JNDI glabā objektus "pēc vērtības", iekopējot tos kokā. Tātad kokā var izveidoties vairākas objekta kopijas. Lai izveidotu piesaisti (binding) pēc references, ir jāizmanto LinkRef klase, ko mēs šeit neapspriedīsim. Ja vienu no kopijām pamaina, tad citas kopijas (zem citiem kontekstiem) to nejūt - t.i. faktiski ir runa par vairākiem dažādiem objektiem, nevis par atšķirīgām kopijām.

Neraugoties uz līdzību starp kontekstiem un bibliotēkām un visu objektu kopiju glabāšanu, JNDI NAV visos aspektos līdzīgs failu sistēmai (piemēram Windows vai UNIX failu sistēmai). Būtiskā atšķirība ir tā, ka failu sistēmā katrai direktorijai var atrast vecāka direktoriju, bet JNDI atbalsta tikai iešanu lejup pa kontekstiem - no virskonteksta uz apakškontekstu, bet neatbalsta iespēju atrast dotā konteksta virskontekstu.

Kā izveidot InitialContext?

Piesaiste


Lapa mainīta 2004-11-15 22:37:53