Java-namngivning och kataloggränssnitt
Java Naming and Directory Interface ( JNDI ) är ett Java API för en katalogtjänst som låter Java-programvaruklienter upptäcka och slå upp data och resurser (i form av Java- objekt ) via ett namn. Liksom alla Java API:er som gränssnitt mot värdsystem är JNDI oberoende av den underliggande implementeringen. Dessutom specificerar den ett tjänsteleverantörsgränssnitt (SPI) som gör att katalogtjänstimplementeringar kan anslutas till ramverket. Informationen som slås upp via JNDI kan tillhandahållas av en server, en platt fil eller en databas; valet är upp till den använda implementeringen.
Typiska användningsområden för JNDI inkluderar:
- ansluta ett Java-program till en extern katalogtjänst (som en adressdatabas eller en LDAP -server)
- tillåter en Java Servlet att slå upp konfigurationsinformation som tillhandahålls av värdwebbbehållaren
Bakgrund
Java RMI och Java EE API:erna använder JNDI API för att slå upp objekt i ett nätverk.
API:et tillhandahåller:
- en mekanism för att binda ett objekt till ett namn
- ett katalogsökningsgränssnitt som tillåter allmänna frågor
- ett händelsegränssnitt som tillåter klienter att avgöra när katalogposter har ändrats
- LDAP-tillägg för att stödja de ytterligare funktionerna hos en LDAP-tjänst
SPI - delen tillåter stöd för praktiskt taget alla typer av namn- eller katalogtjänster, inklusive:
Sun Microsystems släppte först JNDI-specifikationen den 10 mars 1997. Från och med 2006 är den nuvarande versionen JNDI 1.2.
Grundläggande uppslag
JNDI (Java Naming and Directory Interface) organiserar sina namn i en hierarki. Ett namn kan vara vilken sträng som helst som "com.example.ejb.MyBean". Ett namn kan också vara ett objekt som implementerar namngränssnittet
; dock är en sträng det vanligaste sättet att namnge ett objekt. Ett namn binds till ett objekt i katalogen genom att antingen lagra objektet eller en referens till objektet i katalogtjänsten som identifieras av namnet.
JNDI API definierar ett sammanhang som anger var man ska leta efter ett objekt. Det initiala sammanhanget används vanligtvis som utgångspunkt.
I det enklaste fallet måste ett initialt sammanhang skapas med den specifika implementeringen och extra parametrar som krävs av implementeringen. Det initiala sammanhanget kommer att användas för att slå upp ett namn. Det initiala sammanhanget är analogt med roten eller toppen av ett katalogträd för ett filsystem. Nedan är ett exempel på hur du skapar ett initialt sammanhang:
Hashtable contextArgs = ny hashtabell < String , String > (); // Först måste du ange kontextfabriken. // Så här väljer du mellan jboss-implementering // kontra en implementering från Sun eller andra leverantörer. contextArgs . put ( Context . INITIAL_CONTEXT_FACTORY , "com.jndiprovider.TheirContextFactory" ) ; // Nästa argument är URL:en som anger var datalagret är: contextArgs . put ( Context . PROVIDER_URL , "jndiprovider-databas" ); // (Du kan också behöva tillhandahålla säkerhetsuppgifter) // Därefter skapar du den initiala kontexten Context myCurrentContext = new InitialContext ( contextArgs );
Ett sammanhang används sedan för att slå upp tidigare bundna namn i det sammanhanget. Till exempel:
MyBean myBean = ( MyBean ) myCurrentContext . lookup ( "com.mydomain.MyBean" );
Alternativet till ovanstående kod är enligt nedan:
Kontextobjektet kan också konfigureras genom att lägga till filen jndi.properties i klasssökvägen som innehåller det initiala kontextens fabriksklassnamn och leverantörs-URL. Ovanstående kod kommer att reduceras enligt nedan:
//behöver bara skapa ett initialt kontextobjekt, det kommer att försöka läsa filen jndi.properties från klasssökvägen. Context myCurrentContext = new InitialContext ();
Ett sammanhang används sedan för att slå upp tidigare bundna namn i det sammanhanget. Till exempel:
MyBean myBean = ( MyBean ) myCurrentContext . lookup ( "com.mydomain.MyBean" );
Sökande
Attribut kan bifogas särskilda poster som kallas kataloger. Kataloger gör det möjligt att söka efter objekt med deras associerade attribut. Kataloger är en typ av sammanhang; de begränsar namnutrymmet ungefär som en katalogstruktur på ett filsystem gör.
Se även
- ^ "Java SE - Core Technologies - Java Naming and Directory Interface (JNDI)" . www.oracle.com . Hämtad 2016-12-17 .
- ^ "JNDI-resurser HUR-MAN" . Apache Tomcat 7 användarhandbok . Apache Software Foundation . Hämtad 21 januari 2014 .
- ^ "JNDI/RMI Registry Service Provider" . docs.oracle.com . Hämtad 2016-12-17 .
- ^ "SUN MICROSYSTEMS, INC. INTRODUCERAR JAVA-NAMNING OCH DIRECTORY INTERFACE API" . sun.com . 1997-03-10. Arkiverad från originalet 2004-09-08.
- ^ "Sökfilter" . docs.oracle.com . Hämtad 2016-12-17 .