创建Initial Context 从服务器端连接到JNDI
//创建一个Inital Context Context ctx=new InitialContext();
从任何一个地方连接到JNDI:
创建Environment对象:
weblogic.jndi.Enviroment env=new weblogic.jndi.Enviroment();
填写Environment;
env.setProviderurl("t3://127.0.0:7001");//WebLogic
//Server的位置
env.setSecurityPrincipal("system");
//安全信息
env.setSecurityCredentials("PassWord');
//使用Environment对象创建
InitialContext() Context ctx=env.getInitialContext();
创建SubContext 创建Environment对象:
Context ctx=env.getInitialContext();
首先必须获得存在的Subcontext或InitialContext
填写Environment:
Context subcontext=ctx.createSubcontext("newSubcontext");
在当前的Context下创建新技术的
Subcontext Subcontext.rebind("boundObject",object);
绑定一个对象
Subcontext.close();
当结束时经常关闭访问的资源
Ctx.close();
其它连接到JNDI的方法 例如,使用‘Constant’Properties名和Hashtable类:
Hashtable env=new Hashtable();
Env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
Env.put(Context.PROVIDER_URL,"t3://localhost:7001");
Env.put(Context.SECURIRY_PRINCIPAL,"system");
Env.put(Context.SECURIRY_CRRDENTIALS,"PassWord");
Context ctx=new InitialContext(env);
另一个例子,使用‘Hardcoded’名和Properties类:
Properties env=new Properties();
env.setProperty("java.naming,factory.initial","weblogic.jndi.WLInitialContextFactory");
env.setProperty("java.naming.provider.url","t3://192.2.56.102:7001");
env.setProperty("java.naming.securiry.principal","system");
env.setProperty("java.naming.security.principal","PassWord");
Context ctx=new InitialContext(env);
一些JNDI环境属性 环境属性 等同的Environment方法 作用
"java.naming.factory.initial" Environment.setInitialContextFactory(java.lang.String factoryName) 上下文工厂的类名。
这是服务提供者给定的类名。
"java.naming.provider.url" Environment.setProviderUrl(java.lang.String url)
服务提供者所使用的配置信息。在这里指出网络位置信息。
"java.naming.securiry.principal" Environment.setSecurityPrincipal)
使用服务提供者的人员身份标识
"java.naming.security.credentials" Environment.setSecurityPrincipals(java.lang.Object credentials)
该身份的密码
Jndi.properties jndi.properties文件为所有的InitialContexts设置默认的属性
Jndi.properties文件的搜索次序
CLASSPATH
$JAVA_HOME/lib/
示例jndi.properties;
Java.naming.factory.initial=weblogic.jndi.WLINitialContextfactory
Java.naming.provider.url=t3://localhost:7001
Java.naming.provider.principal=system
Java.naming.security.credentials=password
使用这些默认值: Context=new InitialContext();//no params
从JNDI查找 Lookup()从JNDI树获得对象
通过lookup()返回的对象必须映射到它们合适的类型
Import javax.naming.*;
Try{
Context ic=new Context();
Object obj;
Obj=ic.lookup("javax.transaction.UserTransaction");
UserTransactio ut=(UserTransaction)obj;
ut.begin(); ... Ic.close();
}catch(NamingException e){...}
远程绑定对象 绑定到远程命名服务的对象必须是序列化的
访问命名服务时,对象采用复制机制 一个Binding示例
Public static Context getInitialContext() throws NamingException{
Environment env=new Environment();
env.setProviderUrl("t3://localhost:7001");
env.setSecurityCredentials("weblogic");
Context context=env.getInitialContext(); return context;
}
//获得initial context
Context ctx=getInitialContext();
//创建名为Bank的对象
Bank myBank=new Bank();
//把对象绑定到JNDI树
ctx.rebind("theBank",nyBank);
ctx.close();
一个Un-Binding示例
Public static Context getInitialContext() throws NamingExcepiton(){
Environment env=new Environment();
env.setProviderUrl("http://localhost:7001);
env.setSecurityPrincipal("system");
env.setSecurityCredentials("weblogic");
Context context=env.getInitialContext();
return context;
} //获得initial context
Context ctx=getInitialContext();
//解除绑定到"theBank"的对象
ctx.unbind("theBank");
ctx.close();
可能的命名异常 当与JNDI交互时可能发生的例外:
AuthenticationException //服务器认证信息有错时
CommunicationException//通信异常
InvalidNameException//Naming异常
NameNotFoundException//
NoInitialContextException//没有连接到JNDI