在weblogic中的JNDI

创建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

posted @ 2012-04-03 13:13  残星  阅读(7624)  评论(0编辑  收藏  举报