一、JNDI 基础
1、JNDI指通过提供统一的API访问不同的命名和目录服务。
二、JNDI Context
1、JNDI tree
Initial context 是JNDI tree的头节点,所有的查询都从该节点开始。在JNDI tree中conext是节点,object是叶子。
JNDI Context 提供在代码与需要使用的JNDI服务提供者之间的编程连接。一个JNDI上下文类似于一个JDBC连接。它是一个通道,通过它代码的命令流向命名和目录服务。并且通过它接收来自于服务提供者的数据。
context 是一系列命名到对象绑定的集合,当获得一个上下文时,代码传送属性到JNDI.
2、JNDI Context属性
INITIAL_CONTEXT_FACTORY
_用于创建JNDI上下文类的全局限定名(指定命名服务类型)如:weblogic.jndi.WLInitialContextFactory
PROVIDER_URL
用于连接命名和目录提供者的协议、主机和端口。如:t3://localhost:7001,仅当连接远程JVM上的名字服务时,
才需要配置,在本地可以用 new InitialContext()连接本地名字服务。
SECURITY_PRINCIPAL
_在weblogic与上下文相关的安全领域的用户身份,默认为guest。
SECURITY_CREDENTIALS
_通过SECURITY_PRINCIPAL属性定义的用户的口令,默认是guest用户的口令
SECURITY_PROTOCOL
_指定使用那个安全协议,如SSL
SECURITY_AUTHENTICATION
_指定使用的验证级别
REPLICATE_BINDINGS
_指定是否将绑定对象复制到在集群中的所有JNDI树。
3、InitialContext
对于本地客户端:
Context ctx = new InitialContext();
对于任意客户端:
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PRIVIDER_URL,"t3://localhost:7001");
try{
ctx = new InitialContext(ht);
}catch(NamingException e){
}finally{
try{ctx.close();
}catch(Exception e){}
}
三、绑定与解析
1、可以把一个对象绑定到JNDI上,但java规定,这些对象必须实现Referencable接口,实际上
绑定的是这些对象的Reference对象。
bind(); rebind();覆盖了之前的绑定 unbind();删除绑定。
绑定对象:
Context ctx = null;
Properties pps = new Properties();
pps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
pps.put(Context.PRIVIDER_URL,"t3://localhost:7001");
try{
ctx = new InitialContext(pps);
ShoppingCart myObj = new ShoppingCart();
ctx.rebind("MyShoppingCart",myObj);
ctx.unbind("MyShoppingCart");
}catch(NamingException e){
}finally{
try{ctx.close();
}catch(Exception e){}
}
lookup();可以返回被绑定的对象,需要强制类型转换
Context ctx = null;
Properties pps = new Properties();
pps.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
pps.put(Context.PRIVIDER_URL,"t3://localhost:7001");
try{
ctx = new InitialContext(pps);
DataSource ds = (DataSource)ctx.lookup("MyShoppingCart");
}catch(NamingException e){
}finally{
try{ctx.close();
}catch(Exception e){}
}