programmera.net -> java -> normal för utskrift | info@programmera.net |
JNDI
1. Vad är JNDI? 2. Termer och definitioner 3. Tjänsteleverantörer 4. Hur används JNDI? 5. URLer som JNDI-namn |
1. Vad är JNDI?
JNDI (Java Naming and Directory Interface) består av:
Följande bild illustrerar arkitekturen för JNDI:
Bilden visar hur olika namn- och registertjänster anropas via samma API.
2. Termer och definitioner
Nedan definieras några termer som kan vara bra att känna till:
3. Tjänsteleverantörer
JNDI packades med Java SE från och med version 1.3 och är sedan dess en del av Java SE. Java SE 1.3 inkluderar dessutom "JNDI tjänsteleverantörer" för följande protokoll:
Vill du ha tillgång till någon annan tjänsteleverantör kan du ladda hem den från
http://java.sun.com/products/jndi/serviceproviders.html .
4. Hur används JNDI?
Man använder klasserna i paketet javax.naming för att utnyttja JNDI. Nedan visas ett exempel på hur JNDI kan användas för att hitta i det egna filträdet:
Det argument som skickas med när man startar programmet är den sökväg (till en fil/mapp på hårddisken) som man alltså slår upp med JNDI. Nedan visas ett exempel på hur det kan se ut när man slår upp en EJB:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Hashtable;
class HelloJNDI {
public static void main(String[] args) {
// Check that user has supplied name of file to lookup
if (args.length != 1) {
System.err.println("usage: java HelloJNDI filename");
System.exit(-1);
}
String name = args[0];
// Identify service provider to use
Hashtable env = new Hashtable(20);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.fscontext.RefFSContextFactory");
try {
// Create the initial context
Context ctx = new InitialContext(env);
// Look up an object
Object obj = ctx.lookup(name);
// Print it out
System.out.println(name + " is bound to: " + obj);
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
System.err.println("Problem looking up " + name + ": " + e);
}
}
}
Som ni ser används lookup()-metoden i båda fall.
try {
InitialContext ctx = new InitialContext();
User _user = (User) ctx.lookup("GnomeShop/UserBean/local");
} catch (NamingException e) {
e.printStackTrace ();
}
5. URLer som JNDI-namn
Olika namnstandarder används beroende på vad som ska letas upp, se följande lista:
Ofta behöver man inte skriva hela namnet, den första delen defaultas ofta.