Chinaunix首页 | 论坛 | 博客
  • 博客访问: 715034
  • 博文数量: 147
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-22 10:36
文章分类

全部博文(147)

文章存档

2011年(1)

2010年(1)

2009年(35)

2008年(110)

我的朋友

分类: Java

2009-03-01 15:48:58

jndi:java命名和目录接口
     jndi把object和context(还可以有subcontext)组织成一个jndi树
这样object就可一被绑定到不同的context上面
jndi是一种查找服务,用于查找:
    web应用环境变量
    EJB和他们的环境变量
    通过DataSource的数据库连接池
    JMS没有表和连接工厂
    其他服务
不要将jndi当做数据库使用
    jndi对象存储在内存中
    访问jndi对象与网络性能有关
jndi树:
InitialContext是JNDI树所有搜索的起点
对象绑定到jndi树上,java对象是树叶,context是节点
一个绑定把对象与一个逻辑名和一个context关联起来
创建Initial Context
从服务器端对象连接到jndi
//创建一个InitialContext
context ctx=new InitialContext();//链接到当前的jndi树上
从任何一个地方连接到jndi
  .创建Environment对象
   weblogic.jndi.Enviroment env=new Weblogix.jndi.Enviroment();
   填写Enviroment
   env.setProviderurl("t3://127.0.0.1:7001");//weblogic server的位置
   env.setSecurityPrincipal("system");//安全信息
   env.setSecurityCredentiais("password");
   //使用Environment对象创建InitialContext
   context ctx=env.getInitialContext();
  .hashtable的用法....
创建subcontext
  创建一个用于绑定对象的subcontext
  创建Environment对象
  context ctx=env.getInitialContext();//首先获得已经存在的subcontext或者initialcontext
  填写Environment
  context subcontext=ctx.createSubcontext("newSubcontext");
  subcontext.rebind("boundobject",object);
  subcontext.close();
  ctx.close();
其他链接到jndi的方法:
 
使用ConstantProperties名和hashtable类:
 HashTable env=new HashTable();
 env.put(Context.initial_context_factory,"weblogic.jndi.WLInitialContextFactory");
 env.put(Context.procider_url,"t3://localhost:7001");
 env.put(Context.security_principal,"system");
 env.put(Context.crrdentials,"password");
 Context ctx=new InitialContext(env);
另一个例子:使用hardcoded名和properties类
 Properties env=new Properties();
 env.setProperties("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");
 env.setProperties("java.naming.provider.url","t3://localhost:7001")
 env.setProperties("java.naming.security.principal","system");
 env.setProperties("java.naming.security.credentials","password");
 Context ctx=new InitialContext(env);
jndi.properties
.jndi.properties文件为所有的Initial Contexts设置默认的属性
.jndi.properties文件的搜索顺序
    .classpath
    .$JAVA_HOME/lib
实例:
 java.naming.factoyr.initial=weblogic.jndi.WLInitialContextFactory
 java.naming.security.url=t3://localhost:7001
 java.naming.security.pricipal=system
 java.naming.security.credentials=password
 使用默认值:
 Context ctx=new InitialContext();
从jndi查找:
.lookup()从jndi树获得对象
.通过lookup()返回的对象必须映射到他们合适的类型
try{
//先获得InitialContext
//Context ic=new Context();
Object obj;
obj=ic.lookup("javax.transation.UserTransaction");
UserTransaction ut=(UserTransaction)obj;
ut.begin();
.....
ic.close();
}catch(NamingEcxeption e){....}
远程绑定对象:
.远程绑定到远程命名服务的对象必须是序列化的
.访问命名服务时,对象是采用复制机制
查找的对象是序列化到客户端的
一个binding实例:
public static Context getInitialContext()throws NamingException{
   创建Environment对象
   weblogic.jndi.Environment env=new Weblogix.jndi.Environment();
   填写Enviroment
   env.setProviderurl("t3://127.0.0.1:7001");//weblogic server的位置
   env.setSecurityPrincipal("system");//安全信息
   env.setSecurityCredentiais("password");
   //使用Environment对象创建InitialContext
   context ctx=env.getInitialContext();
   return ctx;
}
//获得Initial Context
Context ctx=getInitialContext();
//创建名为band的对象
Bank myBank=new Bank();
//把对象绑定到jndi树
ctx.rebind("theBank",myBank);
ctx.close();

 
阅读(2000) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~