Ohjelmointi

JNDI: n yleiskatsaus, osa 3: Edistynyt JNDI

Minun on peitettävä paljon maata tässä kuussa, joten jätän nukan pois ja leikkaan suoraan luotipisteisiin. Ensinnäkin Java-nimeämis- ja hakemistoliittymällä on tärkeä rooli useissa Java-tekniikoissa. Katsomme tätä roolia ymmärtääksemme paremmin JNDI: n strategisen aseman Java-kokonaiskuvassa. Seuraavaksi, tunnustuksena sinun toimivasta JNDI-palvelusta, jonka kanssa haluat pelata, esitän sinulle vapaasti saatavilla olevan, kannettavan LDAP-toteutuksen ja opetan sinulle yhteyden muodostamiseen JNDI-palveluntarjoajaan ja sen käyttämisen. Lopuksi tarkastelen tarkasti objektien sitomista JNDI-merkintöihin.

TEKSTILAATIKKO:

TEXTBOX_HEAD: JNDI: n yleiskatsaus: Lue koko sarja!

  • Osa 1. Johdanto nimipalveluihin

  • Osa 2. Käytä JNDI-hakemistopalveluja hallitaksesi paremmin hajautettuja sovelluksiasi

  • Osa 3. Käytä JNDI: tä tallentaaksesi hajautetun sovelluksesi objektit

  • Osa 4. Kokoa oppimasi JNDI-yhteensopivalla sovelluksella

: END_TEXTBOX

Ennen kuin aloitan, pieni kaksinkertainen ajattelu on kunnossa. Kahden viime kuukauden aikana olen yrittänyt vakuuttaa teille, että nimeäminen ja hakemistopalvelut ovat suunnilleen sähköisiä vastauksia kirjastoissa olevista korttiluetteloista. Nyt kun aloitamme JNDI: n edistyneiden ominaisuuksien kiertueen, haluan sinun unohtavan tämän analogian kokonaan - se heikentää JNDI: n voimaa karkeasti.

Aloitetaan tarkastelemalla, kuinka JNDI näkyy muissa Java-tekniikoissa.

JNDI kaikkialla

JNDI: llä on rooli useissa Java-tekniikoissa. Tarkastellaan kolmea niistä: JDBC (Java Database Connectivity -paketti), JMS (Java Messaging Service) ja EJB (Enterprise JavaBeans).

JDBC on Java-tekniikka relaatiotietokannoille. JNDI ilmestyi ensimmäisen kerran JDBC 2.0 valinnaisessa paketissa (katso Resurssit) yhdessä Tietolähde käyttöliittymä. A Tietolähde Esimerkiksi, kuten nimestään käy ilmi, edustaa tietolähdettä - usein tietokannasta, mutta ei aina. A Tietolähde esimerkiksi tallentaa tietoja tietolähteestä - kuten sen nimen, ladattavan ja käytetyn ohjaimen sekä sijainnin - ja antaa sovelluksen saada yhteyden tietolähteeseen ottamatta huomioon taustalla olevia yksityiskohtia. JDBC-määrittely suosittelee tallentamiseen JNDI: tä Tietolähde esineitä.

JMS on Java-tekniikka viestintää varten. JMS-määrittely kuvaa hallittuja objekteja - objekteja, jotka sisältävät JMS-kokoonpanotietoja ja joita JMS-asiakkaat käyttävät tiettyjen viestijonojen ja aiheiden löytämiseen. Kuten JDBC: n tapauksessa, spesifikaatio suosittelee JMS: n hallinnoimien objektien sijoittamista JNDI: n kautta.

Harkitse lopuksi Enterprise JavaBeansia. Kaikki yrityspavut julkaisevat kotiliittymän - yhden sijainnin, jonka kautta asiakkaat löytävät tietyn yrityspapun - JNDI: n kautta.

Mitä JNDI tuo pöytään, mikä saa hänet niin arvostetuksi?

Ensinnäkin JNDI edistää keskitetysti hallitun tietolähteen käsitettä - yritysvaatimusten keskeistä vaatimusta. Keskitetysti hallinnoitua tietolähdettä on helpompi hallita kuin hajautettua tietolähdekokoelmaa. Asiakkaille on myös helpompaa löytää tarvittavat tiedot, jos heidän on vain etsittävä yhdessä paikassa.

Toiseksi, kuten näette, JNDI: n kyky tallentaa suoraan Java-objekteja antaa sen integroitua melkein läpinäkyvästi Java-sovelluksiin.

Palveluntarjoajan kohta

JNDI: n käyttämiseen tarvitaan nimeämis- ja hakemistopalvelu sekä JNDI-palveluntarjoaja. Sun toimittaa useita tavallisten nimeämis- ja hakemistopalvelujen tarjoajia (COS-nimeäminen, NIS, RMI-rekisteri, LDAP ja paljon muuta). Olen ratkaissut LDAP: n.

LDAP: llä (Lightweight Directory Access Protocol) on kaksi etua: se on laajasti toteutettu (sekä kaupallisessa että vapaassa muodossa) ja kohtuullisen helppo käyttää. Sen ominaisuuksia tukevat myös Sunin LDAP-palveluntarjoaja ja JNDI.

Koska LDAP-palvelimen hankkiminen ja määrittäminen ei ole oikeastaan ​​Java-aihe, saan sinut vain oikeaan suuntaan ja tarjoan sinulle viitteitä Internet-resursseihin.

Saatavilla on lukuisia LDAP-toteutuksia. Monet ovat kaupallisia tuotteita, kuten Netscape Directory Server ja IBM: n Secure Way Directory. Jotkut pakataan osana suurempia tarjouksia (Microsoftin Active Directory on osa Windows 2000: ta). Jos sinulla on pääsy tällaiseen toteutukseen, voit ohittaa suurimman osan tästä osiosta. Muuten aion kuvata OpenLDAP: tä - LDAP: n vapaasti saatavilla olevaa toteutusta, joka perustuu Michiganin yliopiston referenssitoteutukseen - sekä sen asennusta ja kokoonpanoa.

OpenLDAP on saatavana OpenLDAP-säätiöltä (katso Resurssit). Sen lisenssi perustuu Perlin "taiteelliseen lisenssiin", mikä tarkoittaa, että OpenLDAP on ilmainen (tai avoimen lähdekoodin) ohjelmisto. Valmiiksi pakattuja binäärejä on saatavana useille Linux-makuille (Debian, Red Hat) ja BSD Unix. Työ on käynnissä Windows NT -porttiin.

Jos aiot asentaa OpenLDAP: n, lue SLAPD- ja SLURPD-järjestelmänvalvojan opas (slapd on suoritettavan LDAP-palvelimen nimi ja slurpd on LDAP-replikointipalvelimen nimi; katso sijainnin resurssit.)

Minulla on yksi viimeinen ehdotus, jotta koko kokemuksesi olisi miellyttävämpi: riippumatta siitä, mitä LDAP-toteutusta käytät, käännä skeeman tarkistus vinossa. LDAP-skeema, kuten tietokantamalli, määrittelee tallennetun tiedon rajoitukset. Normaalikäytössä skeeman tarkistus auttaa varmistamaan, että merkinnät (ajatellaan osoitekirjan merkintöjä) ovat oikean muodon mukaisia. Koska luultavasti pelaat sen sijaan, että rakennat jotain pysyvää merkitystä, skeeman tarkistus vain estää. Ota sanani siitä.

Yhdistetään JNDI-kontekstiin

Aikaisemmissa artikkeleissa yritin välttää selittämästä yksityiskohtaisesti, miten olla vuorovaikutuksessa JNDI-palveluntarjoajan, kuten LDAP-palveluntarjoajan, kanssa. Mainitsin, että tarvitset alkukontekstin JNDI-operaatioiden tekemiseen, mutta en viettänyt paljon aikaa kertoessasi sinulle, miten sellainen hankitaan. Anna minun täyttää aukot. (Lisätietoja alkukonteksteista on tämän sarjan kahdessa ensimmäisessä artikkelissa.)

Tarvitset alkukontekstin, ennen kuin voit tehdä mitään JNDI: n kanssa. Kaikki toiminnot suoritetaan suhteessa kontekstiin tai yhteen sen alayhteyksistä.

Alkuperäisen kontekstin saaminen vaatii kolme vaihetta:

  1. Valitse ensin palveluntarjoaja. Jos aiot käyttää OpenLDAP: ta tai muuta LDAP-toteutusta, Sun toimittaa LDAP-viitepalveluntarjoajan (katso Resurssit). Lisää palveluntarjoajan nimi ympäristöominaisuuksien joukkoon (tallennettu a Hashtable ilmentymä):

     Hashtable hashtableEnvironment = uusi Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
  2. Lisää kaikki palveluntarjoajan tarvitsemat lisätiedot. LDAP, joka sisältää palvelun tunnistavan URL-osoitteen, juurikontekstin sekä yhteyden muodostamiseen tarvittavan nimen ja salasanan:

     // palvelu: ldap: // localhost: 389 / // juurikonteksti: dc = etcee, dc = com hashtableEnvironment.put (Context.PROVIDER_URL, "ldap: // localhost: 389 / dc = etcee, dc = com "); hashtableEnvironment.put (Konteksti.SECURITY_PRINCIPAL, "nimi"); hashtableEnvironment.put (Konteksti.SECURITY_CREDENTIALS, "salasana"); 
  3. Lopuksi hanki alkuperäinen konteksti. Jos aiot vain tehdä nimeämistoimia, tarvitset vain Asiayhteys ilmentymä. Jos aiot suorittaa myös hakemistotoiminnon, tarvitset DirContext sen sijaan. Kaikki tarjoajat eivät tarjoa molempia:

     Kontekstikonteksti = new InitialContext (hashtableEnvironment); 

    Tai:

     DirContext dircontext = uusi InitialDirContext (hashtableEnvironment); 

Siinä kaikki siinä on. Katsotaan nyt, kuinka sovellukset tallentavat objekteja ja hakevat objekteja JNDI: stä.

Työskentele esineiden kanssa

Kyky tallentaa Java-objekteja on hyödyllinen: objektien säilytys tarjoaa pysyvyyden ja sallii objektien jakamisen sovellusten välillä tai saman sovelluksen eri suoritusten välillä.

Koodin kannalta objektin tallennus on yllättävän helppoa:

 context.bind ("nimi", esine) 

sitoa() operaatio sitoo nimen Java-objektiin. Komennon syntaksi muistuttaa RMI: tä, mutta semantiikkaa ei ole määritelty niin selkeästi. Se on sallittua sitoa() toimenpide esimerkiksi joko objektin tilannekuvan tai viitteen "elävään" objektiin tallentamiseksi.

Huomaa, että sitoa() toiminta heittää a NamingException jos operaation suorittamisen aikana tapahtuu poikkeus.

Katsotaanpa nyt sitoa() operaation täydennys - Katso ylös():

 Object object = context.lookup ("nimi") 

Katso ylös() toiminto hakee määritettyyn nimiin sidotun objektin. Syntaksi muistuttaa jälleen kerran RMI: tä, mutta menetelmän semantiikkaa ei ole määritelty yhtä selvästi.

Aivan kuten sitoa(), Katso ylös() toiminta heittää a NamingException jos operaation suorittamisen aikana tapahtuu poikkeus.

Esineiden varastointi

Mitä tarkoittaa kohteen tallentaminen JNDI-nimeämis- ja hakemistopalveluun? Olemme jo maininneet, että sitoa() ja Katso ylös() toimintoja ei ole määritelty tarkasti; JNDI-palveluntarjoajan on määriteltävä semanttinsa.

JNDI-määrityksen mukaan palveluntarjoajia kannustetaan (mutta ei vaadita) tukemaan objektien tallennusta yhdessä seuraavista muodoista:

  • Sarjatuotteet
  • Viite
  • Attribuutit hakemistokontekstissa

Jos kaikki JNDI-palveluntarjoajat tukevat näitä vakiomekanismeja, Java-ohjelmoijat voivat vapaasti kehittää yleisiä ratkaisuja, jotka toimivat myös silloin, kun palvelun tarjoajan taso muuttuu.

Jokaisella yllä olevalla menetelmällä on etuja ja haittoja. Paras menetelmä riippuu kehitettävän sovelluksen vaatimuksista.

Tarkastellaan kutakin peräkkäin.

Sarjatuotteina

Selkein tapa tallentaa objekti hakemistoon on tallentaa objektin sarjatuotanto. Ainoa vaatimus on, että objektin luokka toteuttaa Sarjattavissa käyttöliittymä.

Kun objekti sarjoitetaan, sen tila muuttuu tavuvirraksi. Palveluntarjoaja ottaa tavuvirran ja tallentaa sen hakemistoon. Kun asiakas etsii objektin, palveluntarjoaja rekonstruoi sen tallennetuista tiedoista.

Seuraava koodi osoittaa, kuinka a LinkedList JNDI-palvelun merkintään:

 // luo linkitetty luettelo LinkedList linkedlist = new LinkedList (); . . . // sido context.bind ("cn = foo", linkitetty luettelo); . . . // lookup linklist = (LinkedList) context.lookup ("cn = foo"); 

Se on niin helppoa!

Valitettavasti kaksi muuta menetelmää ovat monimutkaisempia. Kuvailen niitä lyhyesti, mutta varaan yksityiskohtaisen keskustelun myöhempää aikaa varten.

Viitteenä

Joskus ei ole tarkoituksenmukaista (tai mahdollista) objektin sarjallisuutta. Jos objekti tarjoaa palvelun esimerkiksi verkossa, ei ole järkevää tallentaa itse objektin tilaa. Olemme kiinnostuneita tiedoista, joita tarvitaan kohteen löytämiseen ja kommunikointiin sen kanssa.

Esimerkki on yhteys ulkoiseen resurssiin (joka ei kuulu Java-virtuaalikoneen piiriin), kuten tietokantaan tai tiedostoon. Ei tietenkään ole järkevää yrittää tallentaa tietokantaa tai itse tiedostoa JNDI-palveluun. Sen sijaan haluamme tallentaa yhteyden rekonstruoimiseksi tarvittavat tiedot.

Tässä tapauksessa ohjelmoijan tulisi joko sitoa a Viite ilmentymä, joka vastaa objektia tai jonka objektiluokan on toteutettava Viitattava käyttöliittymä (jossa objekti luo ja tarjoaa a Viite palveluntarjoajan pyynnöstä).

Viite Esimerkki sisältää tarpeeksi tietoa viitteen luomiseksi. Jos viittaus tiedostoon on tallennettu, viite sisältää tarpeeksi tietoa a Tiedosto objekti, joka osoittaa oikeaan tiedostoon.

Attribuutteina

Jos käytät palveluntarjoajaa, joka tarjoaa hakemistotoiminnot pelkästään nimeämistoiminnon sijasta, voit myös tallentaa objektin määritekokoelmana DirContext esine (a DirContext esimerkki eroaa a Asiayhteys sillä sillä voi olla määritteitä).

Tämän menetelmän käyttämiseksi sinun on luotava objektit, jotka toteuttavat DirContext käyttöliittymä ja sisältää koodin, joka tarvitaan heidän sisäisen tilansa kirjoittamiseen Määritteet esine. Objektin palauttamiseksi sinun on myös luotava objektitehdas.

Tämä lähestymistapa on hyödyllinen, kun objektin on oltava käytettävissä muilla kuin Java-sovelluksilla.

Johtopäätös

Jos olet lukenut sarjan, sinun tulisi ymmärtää ja arvostaa JNDI: n voimaa ja merkitystä - et kuule siitä paljon, mutta se on siellä kannen alla.

Ensi kuussa katsomme JNDI-pohjaista sovellusta. Sillä välin sinun pitäisi yrittää saada JNDI toimimaan LDAP-palvelimella.

Lisätietoja tästä aiheesta

  • JDBC 2.0 valinnainen paketti

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

  • Lataa OpenLDAP siirtymällä OpenLDAP Foundationiin

    //www.openldap.org/

  • Ladata SLAPD- ja SLURPD-järjestelmänvalvojan opas, mene

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

  • JNDI-tiedot, palveluntarjoajat ja niin edelleen

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

Tämän tarinan, "JNDI-yleiskatsaus, osa 3: Edistynyt JNDI", julkaisi alun perin JavaWorld.

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