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