Programmēšana

JNDI pārskats, 3. daļa: Advanced JNDI

Šomēnes man ir jāpārklāj daudz zemes, tāpēc es pametīšu pūkas un nogriezīšu tieši pie punktiem. Pirmkārt, Java Naming and Directory Interface ir svarīga loma vairākās Java tehnoloģijās. Mēs apskatīsim šo lomu, lai labāk izprastu JNDI stratēģisko pozīciju kopējā Java attēlā. Pēc tam, atzīstot jūsu vajadzību pēc darbojoša JNDI pakalpojuma, kurā es spēlēju, es jūs iepazīstināšu ar brīvi pieejamu, pārnēsājamu LDAP ieviešanu un iemācīšu, kā izveidot savienojumu ar JNDI pakalpojumu sniedzēju un to izmantot. Visbeidzot, es ņemšu jūs tuvāk apskatīt objektu saistīšanu ar ierakstiem JNDI.

TEKSTS:

TEXTBOX_HEAD: JNDI pārskats: Izlasiet visu sēriju!

  • 1. daļa. Ievads nosaukumu pakalpojumu sniegšanā

  • 2. daļa. Izmantojiet JNDI direktoriju pakalpojumus, lai labāk pārvaldītu izplatītās lietojumprogrammas

  • 3. daļa. Izmantojiet JNDI, lai saglabātu izplatītās lietojumprogrammas objektus

  • 4. daļa. Salieciet kopā to, ko esat iemācījies, izmantojot JNDI iespējotu lietojumprogrammu

: END_TEXTBOX

Pirms es sāku, ir nedaudz jāpārdomā. Pēdējo divu mēnešu laikā esmu mēģinājis jūs pārliecināt, ka nosaukumu un direktoriju pakalpojumi ir aptuveni elektroniskais ekvivalents bibliotēkās atrodamajiem karšu katalogiem. Tagad, kad mēs sākam JNDI uzlaboto funkciju apskati, es vēlos, lai jūs pilnībā aizmirstat šo līdzību - tas pamatīgi mazina JNDI spēku.

Sāksim ar to, kā JNDI parādās citās Java tehnoloģijās.

JNDI visur

JNDI spēlē lomu vairākās Java tehnoloģijās. Apsvērsim trīs no tiem: JDBC (Java Database Connectivity pakete), JMS (Java Messaging Service) un EJB (Enterprise JavaBeans).

JDBC ir Java tehnoloģija relāciju datu bāzēm. JNDI pirmo reizi parādījās JDBC 2.0 izvēles paketē (skatīt resursus) kopā ar Datu avots interfeiss. A Datu avots Piemēram, kā norāda tās nosaukums, tas ir datu avots - bieži vien no datu bāzes, bet ne vienmēr. A Datu avots instance saglabā informāciju par datu avotu, piemēram, tā nosaukumu, ielādējamo un lietojamo draiveri, kā arī atrašanās vietu, un ļauj lietojumprogrammai iegūt savienojumu ar datu avotu, neņemot vērā pamatā esošo informāciju. JDBC specifikācijā uzglabāšanai ieteicams izmantot JNDI Datu avots objektiem.

JMS ir Java tehnoloģija ziņojumapmaiņai. JMS specifikācijā aprakstīti administrētie objekti - objekti, kas satur JMS konfigurācijas informāciju un kurus JMS klienti izmanto, lai atrastu noteiktas ziņojumu rindas un tēmas. Tāpat kā gadījumā ar JDBC, specifikācijā ieteicams atrast JMS administrētos objektus, izmantojot JNDI.

Visbeidzot, apsveriet Enterprise JavaBeans. Visas uzņēmuma pupas, izmantojot JNDI, publicē mājas saskarni - vienoto vietu, caur kuru klienti atrod konkrētu uzņēmuma pupu.

Ko JNDI piedāvā galdā, kas liek to tik ļoti novērtēt?

Pirmkārt, JNDI veicina centralizēti pārvaldīta informācijas avota jēdzienu - galvenā prasība uzņēmuma lietojumprogrammām. Centralizēti pārvaldītu informācijas avotu ir vieglāk administrēt nekā izplatītu informācijas avotu kolekciju. Klientiem ir arī vienkāršāk atrast nepieciešamo informāciju, ja viņiem ir jāmeklē tikai vienā vietā.

Otrkārt, kā redzēsit, JNDI spēja tieši uzglabāt Java objektus ļauj gandrīz caurspīdīgi integrēties Java lietojumprogrammās.

Pakalpojuma sniedzēja punkts

Lai izmantotu JNDI, jums nepieciešams vārdu un direktoriju pakalpojums un JNDI pakalpojumu sniedzējs. Sun piegādā vairākus izplatītu nosaukumu un direktoriju pakalpojumu sniedzējus (COS nosaukšana, NIS, RMI reģistrs, LDAP un citi). Esmu nokārtojis LDAP.

LDAP (viegls direktorijas piekļuves protokols) ir divējādas priekšrocības, jo tā tiek plaši ieviesta (gan komerciālā, gan bezmaksas formā) un ir pietiekami viegli lietojama. Tās funkcijas labi atbalsta arī Sun LDAP pakalpojumu sniedzējs un JNDI.

Tā kā LDAP servera iegūšana un konfigurēšana patiesībā nav Java priekšmets, es tikai virzīšu jūs pareizajā virzienā un sniegšu jums atsauces uz interneta resursiem.

Ir pieejamas daudzas LDAP ieviešanas iespējas. Daudzi ir komerciāli produkti, piemēram, Netscape Directory Server un IBM Secure Way Directory. Daži no tiem ir iepakoti kā daļa no lielākiem piedāvājumiem (Microsoft Active Directory ir daļa no Windows 2000). Ja jums ir piekļuve šādai ieviešanai, varat izlaist lielāko daļu šīs sadaļas. Pretējā gadījumā es aprakstīšu OpenLDAP - brīvi pieejamu LDAP ieviešanu, pamatojoties uz Mičiganas Universitātes atsauces ieviešanu, kā arī tā instalēšanu un konfigurēšanu.

OpenLDAP ir pieejams no OpenLDAP Foundation (skatiet resursus). Tās licence ir balstīta uz Perla "māksliniecisko licenci", kas nozīmē, ka OpenLDAP ir bezmaksas (vai atvērtā pirmkoda) programmatūra. Fasēti binārie faili ir pieejami dažādiem Linux (Debian, Red Hat), kā arī BSD Unix aromātiem. Notiek darbs ar ostu uz Windows NT.

Ja plānojat instalēt OpenLDAP, izlasiet SLAPD un SLURPD administratora rokasgrāmata (slapd ir izpildāmā LDAP servera nosaukums un slurpd ir LDAP replikācijas servera nosaukums; skatiet atrašanās vietas resursus).

Man ir viens pēdējais ieteikums, lai padarītu visu jūsu pieredzi patīkamāku: neatkarīgi no tā, kuru LDAP ieviešanu izmantojat, pagrieziet shēmas pārbaudi izslēgts. LDAP shēma, tāpat kā datu bāzes shēma, definē ierobežojumus uzglabātajai informācijai. Normālā lietošanā shēmas pārbaude palīdz nodrošināt, ka ieraksti (domājot par adrešu grāmatas ierakstiem) atbilst pareizajam formātam. Tomēr, tā kā jūs, iespējams, spēlējat, nevis veidojat kaut ko paliekošu, shēmas pārbaude tikai traucēs. Uzņemiet manu vārdu.

Savienojuma izveide ar JNDI kontekstu

Iepriekšējos rakstos es centos izvairīties no sīkāka paskaidrojuma par to, kā mijiedarboties ar JNDI pakalpojumu sniedzēju, piemēram, ar LDAP pakalpojumu sniedzēju. Es jau minēju, ka, lai veiktu JNDI operācijas, jums ir nepieciešams sākotnējais konteksts, taču es nepavadīju daudz laika, lai pastāstītu, kā to iegūt. Ļaujiet man aizpildīt nepilnības. (Plašāku informāciju par sākotnējiem kontekstiem skatiet šīs sērijas pirmajos divos rakstos.)

Pirms jūs varat kaut ko darīt ar JNDI, jums ir nepieciešams sākotnējais konteksts. Visas darbības tiek veiktas attiecībā pret kontekstu vai kādu no tā apakštekstiem.

Sākotnējā konteksta iegūšanai nepieciešami trīs soļi:

  1. Vispirms izvēlieties pakalpojumu sniedzēju. Ja jūs gatavojaties izmantot OpenLDAP vai kādu citu LDAP ieviešanu, Sun piegādā atsauces LDAP pakalpojumu sniedzēju (skatiet resursus). Pievienojiet pakalpojumu sniedzēja nosaukumu vides rekvizītu kopai (kas saglabāta a Hashtable gadījums):

     Hashtable hashtableEnvironment = new Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
  2. Pievienojiet visu papildu informāciju, kas nepieciešama pakalpojumu sniedzējam. LDAP gadījumā tas ietver URL, kas identificē pakalpojumu, saknes kontekstu, kā arī vārdu un paroli, ar kuru izveidot savienojumu:

     // pakalpojums: ldap: // localhost: 389 / // saknes konteksts: dc = etcee, dc = com hashtableEnvironment.put (Context.PROVIDER_URL, "ldap: // localhost: 389 / dc = etcee, dc = com "); hashtableEnvironment.put (konteksts.SECURITY_PRINCIPAL, "nosaukums"); hashtableEnvironment.put (konteksts.SECURITY_CREDENTIALS, "parole"); 
  3. Visbeidzot, iegūstiet sākotnējo kontekstu. Ja jūs vienkārši plānojat veikt nosaukšanas darbības, jums būs nepieciešams tikai Konteksts instancē. Ja plānojat veikt arī direktorijas darbību, jums būs nepieciešama DirContext tā vietā. Ne visi pakalpojumu sniedzēji piegādā abus:

     Konteksta konteksts = new InitialContext (hashtableEnvironment); 

    Vai arī:

     DirContext dircontext = jauns InitialDirContext (hashtableEnvironment); 

Tas ir viss, kas tam ir. Tagad apskatīsim, kā lietojumprogrammas glabā objektus un izgūst objektus no JNDI.

Darbs ar objektiem

Spēja saglabāt Java objektus ir noderīga: objektu krātuve nodrošina noturību un ļauj objektus koplietot starp lietojumprogrammām vai starp vienas un tās pašas lietojumprogrammas dažādām izpildēm.

No iesaistītā koda viedokļa objektu glabāšana ir pārsteidzoši vienkārša:

 context.bind ("nosaukums", objekts) 

The saistīt() darbība saista vārdu ar Java objektu. Komandas sintakse atgādina RMI, bet semantika nav tik skaidri definēta. Tas ir atļauts saistīt() darbība, lai saglabātu, piemēram, objekta momentuzņēmumu vai atsauci uz "dzīvu" objektu.

Jāapzinās, ka saistīt() operācija met a NamingException ja operācijas izpildes laikā rodas izņēmums.

Tagad apskatīsim saistīt() operācijas papildinājums - uzmeklēšana ():

 Object object = context.lookup ("nosaukums") 

The uzmeklēšana () darbība izgūst objektu, kas saistīts ar norādīto vārdu. Atkal sintakse atgādina RMI, bet metodes semantika nav tik skaidri definēta.

Tāpat kā ar saistīt(), uzmeklēšana () operācija met a NamingException ja operācijas izpildes laikā rodas izņēmums.

Objekta krātuve

Ko nozīmē objekta glabāšana JNDI nosaukumu un direktoriju pakalpojumā? Mēs jau esam minējuši, ka precīza saistīt() un uzmeklēšana () darbības nav stingri noteiktas; JNDI pakalpojumu sniedzēja ziņā ir noteikt viņu semantiku.

Saskaņā ar JNDI specifikāciju pakalpojumu sniedzēji tiek mudināti (bet nav obligāti) atbalstīt objektu glabāšanu vienā no šiem formātiem:

  • Serializētie dati
  • Atsauce
  • Atribūti direktorijas kontekstā

Ja visi JNDI pakalpojumu sniedzēji atbalsta šos standarta mehānismus, Java programmētāji var brīvi izstrādāt vispārīgus risinājumus, kas darbojas pat tad, ja mainās pamata pakalpojumu sniedzēja slānis.

Katrai no iepriekš minētajām metodēm ir priekšrocības un trūkumi. Labākā metode būs atkarīga no izstrādājamās lietojumprogrammas prasībām.

Apskatīsim katru pēc kārtas.

Kā sērijveida dati

Visredzamākā pieeja objekta glabāšanai direktorijā ir objekta sērijveida attēlojuma saglabāšana. Vienīgā prasība ir, lai objekta klase īstenotu Serializējams interfeiss.

Kad objekts tiek sērijveidots, tā stāvoklis tiek pārveidots par baitu plūsmu. Pakalpojumu sniedzējs paņem baitu plūsmu un saglabā to direktorijā. Kad klients uzmeklē objektu, pakalpojumu sniedzējs to rekonstruē no saglabātajiem datiem.

Šis kods parāda, kā saistīt a LinkedList uz ierakstu JNDI pakalpojumā:

 // izveidot saistīto sarakstu LinkedList linkedlist = new LinkedList (); . . . // iesiet context.bind ("cn = foo", saistīts saraksts); . . . // uzmeklēšanas linklist = (LinkedList) context.lookup ("cn = foo"); 

Tas ir tik vienkārši!

Diemžēl pārējās divas metodes ir sarežģītākas. Es tos īsi aprakstīšu, bet atlikšu detalizētu diskusiju vēlākam laikam.

Kā atsauce

Dažreiz nav lietderīgi (vai iespējams) sertificēt objektu. Piemēram, ja objekts nodrošina pakalpojumu tīklā, nav jēgas saglabāt paša objekta stāvokli. Mūs interesē informācija, kas nepieciešama objekta atrašanai un saziņai ar to.

Piemērs ir savienojums ar ārēju resursu (tādu, kas nav Java virtuālās mašīnas darbības jomā), piemēram, datu bāzi vai failu. Acīmredzot nav jēgas mēģināt uzglabāt datu bāzi vai pašu failu JNDI pakalpojumā. Tā vietā mēs vēlamies saglabāt informāciju, kas nepieciešama savienojuma atjaunošanai.

Šajā gadījumā programmētājam vajadzētu vai nu iesiet a Atsauce gadījums, kas atbilst objektam, vai objekta klasei ir jāievieš Atsauce interfeiss (kurā objekts ģenerē un nodrošina a Atsauce (ja to pieprasa pakalpojumu sniedzējs).

The Atsauce instancē ir pietiekami daudz informācijas, lai atjaunotu atsauci. Ja tika saglabāta atsauce uz failu, tajā ir pietiekami daudz informācijas, lai izveidotu Fails objekts, kas norāda uz pareizo failu.

Kā atribūti

Ja izmantojat pakalpojumu sniedzēju, kas nodrošina direktoriju funkcionalitāti, nevis tikai nosaukšanas funkcionalitāti, objektu varat arī saglabāt kā atribūtu kolekciju DirContext objekts (a DirContext gadījums atšķiras no a Konteksts piemēram, tajā var būt atribūti).

Lai izmantotu šo metodi, jums jāizveido objekti, kas ievieš DirContext interfeisu un satur kodu, kas nepieciešams viņu iekšējā stāvokļa ierakstīšanai kā Atribūti objekts. Jums arī jāizveido objektu rūpnīca, lai atjaunotu objektu.

Šī pieeja ir noderīga, ja objektam jābūt pieejamam ar ne Java lietojumprogrammām.

Secinājums

Ja esat lasījis sēriju, jums vajadzētu saprast un novērtēt JNDI spēku un nozīmi - par to neko daudz nedzirdat, bet tas atrodas zem segas.

Nākamajā mēnesī mēs apskatīsim JNDI balstītu lietojumprogrammu. Tikmēr jums vajadzētu mēģināt izveidot JNDI un darboties LDAP serverī.

Uzziniet vairāk par šo tēmu

  • JDBC 2.0 izvēles pakotne

    //java.sun.com/products/jdbc/articles/package2.html

  • Dodieties uz OpenLDAP Foundation, lai lejupielādētu OpenLDAP

    //www.openldap.org/

  • Lai lejupielādētu SLAPD un SLURPD administratora rokasgrāmata, iet uz

    //www.umich.edu/~dirsvcs/ldap/doc/guides/

  • JNDI informācija, pakalpojumu sniedzēji utt

    //java.sun.com/products/jndi/

Šo stāstu "JNDI pārskats, 3. daļa: Advanced JNDI" sākotnēji publicēja JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found