Programování

Přehled JNDI, část 1: Úvod do pojmenování služeb

Ti z vás, kteří jste byli v knihovně a stále si pamatujete tento zážitek, si možná vybaví postup vyhledání knihy v knihovně. Pokud nejste v kontaktu se svou antikvariátovou stránkou, bude se vám tato situace zdát neznámá; ale každou chvíli se zatoulám do místní knihovny a hledám pravou offline knihu. Knihovny jsou plné tisíců věcí - jsou prašné a vyrobené z buničiny a kravské kůže, ale jsou svým způsobem fascinující. V každém případě, když udeří nutkání k nalezení určitého, vyhýbám se naivnímu chodu procházet uličkami knihovny nahoru a dolů a místo toho se obrátit ke kartovému katalogu.

TEXTBOX: TEXTBOX_HEAD: Přehled JNDI: Přečtěte si celou sérii!

  • Část 1. Úvod do pojmenování služeb
  • Část 2. Použijte adresářové služby JNDI k lepší správě distribuovaných aplikací

  • Část 3. Použijte JNDI k ukládání objektů distribuované aplikace

  • Část 4. Spojte to, co jste se naučili, pomocí aplikace podporující JNDI: END_TEXTBOX

Kartový katalog pro nezasvěcené mapuje názvy knih na jejich umístění v knihovně. Když nejdříve přejdu do katalogu karet a vyhledám umístění knihy, ušetřím si značné množství chůze. (Mimochodem, slyšel jsem, že některé knihovny ve skutečnosti umožňují čtenářům používat místo katalogu karet počítače. Mají to napůl v pořádku - teď, když informace z knih vloží do počítače, kam patří. ..)

Jakkoli se to může zdát překvapivé, pojem kartový katalog je docela užitečný i ve světě výpočetní techniky. Ve výpočtech tomu říkáme a služba pojmenování, který spojuje názvy s umístěním služeb as informacemi. Poskytuje počítačovým programům jedno místo, kde mohou najít potřebné zdroje. Mimochodem, programy neztrácejí čas prováděním elektronického ekvivalentu chůze nahoru a dolů uličkami a nevyžadují ani to, aby byla místa pevně zakódována do jejich logiky.

Hledání zdrojů má zvláštní význam ve velkých podnikových prostředích, kde aplikace, které vytváříte, mohou záviset na službách poskytovaných aplikacemi napsanými jinými skupinami v jiných odděleních. Dobře navržená pojmenovací infrastruktura takové projekty umožňuje - a nedostatek jednoho je znemožňuje. Ve skutečnosti mnoho reengineeringových procesů podnikových procesů začíná návrhem a implementací robustní celopodnikové pojmenovací a adresářové infrastruktury.

Tento měsíc představuji rozhraní Java Naming and Directory Interface (JNDI). JNDI poskytuje rozhraní společného jmenovatele pro mnoho stávajících pojmenovacích služeb. JNDI jako takový nebyl navržen tak, aby nahradil stávající technologii; místo toho poskytuje společné rozhraní ke stávajícím pojmenovacím službám. Začněme tím, že se podíváme na některé z těchto služeb.

Úvod do pojmenování služeb

Na následujícím obrázku je znázorněna organizace obecné služby pojmenování.

Pojmenovací služba udržuje sadu vazby. Vazby vztahují názvy k objektům. Všechny objekty v systému pojmenování jsou pojmenovány stejným způsobem (tj. Přihlašují se k odběru stejného jména) konvence pojmenování). Klienti používají službu pojmenování k vyhledání objektů podle názvu.

Existuje celá řada existujících pojmenovacích služeb, z nichž několik popíšu níže. Každý se řídí výše uvedeným vzorem, ale liší se v detailech.

  • Pojmenování COS (Common Object Services): Služba pojmenování aplikací CORBA; umožňuje aplikacím ukládat a přistupovat k odkazům na objekty CORBA.

  • DNS (systém jmen domén): Služba pojmenování internetu; mapuje jména přátelská k lidem (například www.etcee.com) na adresy IP (internetový protokol) vhodné pro počítač ve tvaru tečky (207.69.175.36). Zajímavé je, že DNS je distribuováno služba pojmenování, což znamená, že služba a její základní databáze se šíří mezi mnoho hostitelů na internetu.

  • LDAP (Lightweight Directory Access Protocol): Vyvinutý univerzitou v Michiganu; jak název napovídá, jedná se o odlehčenou verzi DAP (Directory Access Protocol), která je zase součástí X.500, standardu pro síťové adresářové služby. V současné době podporuje LDAP více než 40 společností.

  • NIS (Network Information System) a NIS +: Služby pojmenování sítí vyvinuté společností Sun Microsystems. Oba umožňují uživatelům přístup k souborům a aplikacím na libovolném hostiteli pomocí jediného ID a hesla.

Společné rysy

Jak jsem již zmínil, primární funkcí systému pojmenování je vázat jména na objekty (nebo v některých případech na odkazy na objekty - více o tom za okamžik). Aby byla služba pojmenování, musí přinejmenším poskytovat schopnost vázat jména k objektům a vyhledávat objekty podle názvu.

Mnoho systémů pojmenování neukládá objekty přímo. Místo toho ukládají odkazy na objekty. Pro ilustraci zvažte DNS. Adresa 207.69.175.36 je odkaz na umístění počítače v Internetu, nikoli na samotný počítač.

JNDI poskytuje rozhraní, které podporuje všechny tyto běžné funkce. Toto rozhraní představím dále v tomto článku.

Jejich rozdíly

Je také důležité pochopit, jak se liší existující služby pojmenování, protože JNDI musí poskytnout funkční abstrakci, která tyto rozdíly obejde.

Kromě funkčních rozdílů je nejzřetelnějším rozdílem způsob, jakým každá služba pojmenování vyžaduje zadání jmen - její konvence pojmenování. Problém by mělo ilustrovat několik příkladů.

V DNS jsou názvy sestaveny z komponent oddělených tečkami („.“). Čtili zprava doleva. Název „www.etcee.com“ pojmenuje stroj s názvem „www“ v doméně „etcee.com“. Podobně název „etcee.com“ pojmenuje doménu „etcee“ v doméně nejvyšší úrovně „com“.

V LDAP je situace o něco komplikovanější. Názvy jsou tvořeny z komponent oddělených čárkami (","). Stejně jako názvy DNS čtou zprava doleva. Komponenty v názvu LDAP však musí být zadány jako páry název / hodnota. Název „cn = Todd Sundsted, o = ComFrame, c = US“ pojmenuje osobu „cn = Todd Sundsted“ v organizaci „o = ComFrame, c = US.“ Podobně název „o = ComFrame, c = US“ pojmenuje organizaci „o = ComFrame“ v zemi „c = US“.

Jak ilustrují výše uvedené příklady, samotná konvence pojmenování služby pojmenování má potenciál zavést do JNDI významnou část chuti základní služby pojmenování. Toto není funkce, kterou by mělo mít rozhraní nezávislé na implementaci.

JNDI řeší tento problém s název třída a její podtřídy a pomocné třídy. The název třída představuje název složený ze seřazených sekvencí podnájmů a poskytuje metody pro práci se jmény nezávislými na základní pojmenovací službě.

Pohled na pojmenování JNDI

Jak jsem zmínil výše, je důležité si uvědomit, že JNDI je rozhraní spíše než implementace. Tato skutečnost má některé nevýhody - potřebujete přístup k existující pojmenovací službě (například ke službě LDAP) a potřebujete něco pochopit, jak to funguje, abyste si mohli hrát s JNDI. Na druhou stranu to umožňuje JNDI bezproblémovou integraci do stávajícího výpočetního prostředí, kde zavedená služba pojmenování drží houpat.

Pojmenování JNDI se točí kolem malé sady tříd a několika operací. Pojďme se na ně podívat.

Kontext a InitialContext

The Kontext rozhraní hraje v JNDI ústřední roli. Kontext představuje sadu vazeb v rámci služby pojmenování, které všechny sdílejí stejnou konvenci pojmenování. A Kontext object poskytuje metody pro vázání názvů na objekty a uvolňování jmen z objektů, pro přejmenování objektů a pro výpis vazeb.

Některé služby pojmenování také poskytují podkontextové funkce. Podobně jako adresář v souborovém systému je podkontext kontext v kontextu. Tato hierarchická struktura umožňuje lepší organizaci informací. Pro služby pojmenování, které podporují podkontexty, Kontext třída také poskytuje metody pro vytváření a ničení podkontextů.

JNDI provádí všechny operace pojmenování vzhledem ke kontextu. Specifikace JNDI definuje jako pomoc při hledání startovního místa InitialContext třída. Tato třída je vytvořena s vlastnostmi, které definují typ používané služby pojmenování a pro služby pojmenování, které poskytují zabezpečení, ID a heslo, které se mají použít při připojování.

Pro ty z vás, kteří znají RMI Pojmenování třídy, mnoho z metod poskytovaných Kontext níže uvedené rozhraní bude vypadat povědomě. Pojďme se na to podívat Kontextmetody:

  • void bind (String stringName, Object object): Váže jméno k objektu. Název nesmí být vázán na jiný objekt. Všechny mezilehlé kontexty již musí existovat.

  • void rebind (String stringName, Object object): Váže jméno k objektu. Všechny mezilehlé kontexty již musí existovat.

  • Vyhledání objektu (String stringName): Vrátí zadaný objekt.

  • void unbind (String stringName): Odpojí zadaný objekt.

The Kontext interface také poskytuje metody pro přejmenování a výpis vazeb.

  • void rename (String stringOldName, String stringNewName): Změní název, ke kterému je objekt vázán.
  • NamingEnumeration listBindings (String stringName): Vrátí výčet obsahující názvy vázané na zadaný kontext, spolu s objekty a názvy tříd objektů vázaných na ně.

  • NamingEnumeration list (String stringName): Vrátí výčet obsahující názvy vázané na zadaný kontext spolu s názvy tříd objektů vázaných na ně.

Každá z těchto metod má sourozence, který bere a název objekt namísto a Tětiva objekt. A název objekt představuje obecný název. The název třída umožňuje programu manipulovat se jmény, aniž by musel vědět tolik o konkrétní používané pojmenovací službě.

Příklad

Níže uvedený příklad ukazuje, jak se připojit ke službě pojmenování, vypsat všechny vazby nebo vypsat konkrétní vazbu. Využívá poskytovatele služeb souborového systému, který je jednou z referenčních implementací poskytovatele služeb JNDI poskytovaných společností Sun. Díky poskytovateli služeb souborového systému vypadá souborový systém jako služba pojmenování (což v mnoha ohledech je - názvy souborů jako / foo / bar / baz jsou jména a jsou vázána na objekty, jako jsou soubory a adresáře). Vybral jsem to, protože každý má přístup k souborovému systému (na rozdíl od, řekněme, serveru LDAP).

import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Binding; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import java.util.Hashtable; public class Main {public static void main (String [] rgstring) {try {// Vytvořte počáteční kontext. Informace o prostředí // specifikují poskytovatele JNDI, který má použít //, a počáteční URL, které se mají použít (v našem případě // adresář ve formě URL - soubor: /// ...). Hashtable hashtableEnvironment = new Hashtable (); hashtableEnvironment.put (Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); hashtableEnvironment.put (Context.PROVIDER_URL, rgstring [0]); Kontextový kontext = nový InitialContext (hashtableEnvironment); // Pokud neposkytnete žádné další argumenty příkazového řádku, // seznam všech jmen v zadaném kontextu a // objekty, na které jsou vázány. if (rgstring.length == 1) {NamingEnumeration namingenumeration = context.listBindings (""); while (namingenumeration.hasMore ()) {Binding binding = (Binding) namingenumeration.next (); System.out.println (binding.getName () + "" + binding.getObject ()); }} // Jinak uveďte názvy a vazby // zadaných argumentů. else {for (int i = 1; i <rgstring.length; i ++) {Object object = context.lookup (rgstring [i]); System.out.println (rgstring [i] + "" + objekt); }} context.close (); } catch (NamingException namingexception) {namingexception.printStackTrace (); }}} 

Program ve výše uvedeném seznamu nejprve vytvoří počáteční kontext od zadaného poskytovatele JNDI (v tomto případě poskytovatele souborového systému Sun) a URL specifikující místní adresář. Pokud nejsou zadány žádné další argumenty příkazového řádku, program vypíše objekty a názvy všech entit v zadaném adresáři. Jinak zobrazí seznam objektů a názvů pouze těch položek, které jsou uvedeny v příkazovém řádku.

Závěr

Nyní byste měli rozumět a ocenit služby pojmenování obecně a zejména JNDI. V distribuovaných prostředích jsou cennými nástroji pro vyhledání informací a zdrojů. JNDI umožňuje pracovat s různými pojmenovacími službami, aniž byste museli ovládat velké množství API. Příští měsíc se podíváme na druhou polovinu JNDI - její adresářové funkce.

Todd Sundsted píše programy od doby, kdy byly počítače dostupné v pohodlných modelech pro stolní počítače. Ačkoli se Todd původně zajímal o vytváření distribuovaných aplikací v C ++, přešel k programovacímu jazyku Java, když se stal jasnou volbou pro tento druh věcí. Kromě psaní pracuje Todd také jako architekt Java v ComFrame Software.

Další informace o tomto tématu

  • Stáhněte si kompletní zdrojový kód tohoto článku ve formátu zip

    //images.techhive.com/downloads/idge/imported/article/jvw/2000/01/jw-01-howto.zip

  • Všechny věci JNDI

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

  • Dokumentace JNDI

    //java.sun.com/products/jndi/docs.html

  • Poskytovatelé služeb jsou aktuálně k dispozici

    //java.sun.com/products/jndi/serviceproviders.html

  • Úplný seznam předchozích Jak na to Java sloupce

    //www.javaworld.com/javaworld/topicalindex/jw-ti-howto.html

Tento příběh, „Přehled JNDI, Část 1: Úvod do pojmenovacích služeb“, původně publikoval JavaWorld.

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