JNDI是怎么回事?

来源:互联网 发布:js隐藏服务器控件 编辑:程序博客网 时间:2024/04/19 23:49

JNDI(Java Naming and Directory Interface)是一个名字和目录服务器。主要功能是用来绑定一个(名字,对象)对。这样就可以通过JNDI的接口来进行查找,开发时不用写死对某一个对象的应用。方便以后发布时修改,而不用修改程序,只要修改相应的XML即可。  

1、在客户端的程序先要取得服务器信息:  

  InitialContext ctx=new InitialContext();  

  Object obj = ctx.lookup("ejbnaem");  

  这个ejbname是JNDI名称,是在那里设置的?答:根据服务器的不同,设置也不一样,一般都是在服务器自带的配置文档中声明,如weblogic中是:weblogic-ejb-jar.xml        

2、lookup的另一种方式:  

  Object obj=ctx.lookup("server:port/ejb/myejb");      

  server是服务器名称:是不是机器名,如一台机器名称为P10上装有一个J2EE服务器,服务器所开放的端口为7001,则server:port的格式为P10:7001  

  /ejb/这是一个目录,但是它的根目录是什么?答:根目录是jndi服务器所在的目录,这个你不用管,当你发布你的ejb时候,服务器自动将home对象放置到jndi服务器的ejb目录下。当然这个ejb目录你可以任意命名,为了一致,最好用ejb。         

 3、  

  Hashtable   ht   =   new   Hashtable();  

  ht.put(ctx.PROVIDER_URL,   "t3://ip:port");  

  ht.put(ctx.INITIAL_CONTEXT_FACTORY,   "weblogic.jndi.WLInitialContextFactory");  

  InitialContext ctx   =   new   InitialContext(ht);  

这段程序是初始化上下文(Context)。就是告诉Context  jndi的驱动程序类,以及jndi服务器的ip地址,就是那个t3://ip:port,当然这个是针对weblogic的,t3是weblogic自己的协议,在别的服务器就不一样了,根据服务器而定。

4、关于context,在初始化context时,有时使用Context   ctx=new   InitialContext();  

而有时使用Context   ctx=new   InitialContext(properties);请问这两种情况分别在什么时候使用?

答:ctx   =   new   InitialContext()的调用需要你定义一个jndi.properties文件放置在classpath可以找到的位置,这样就和你在bean中直接定义properties的效果一样了。不过设置jndi.properties更好一点,因为不需要将获得jndi   context硬编码到程序里    

5、关于jndi,在使用ctx.lookup()时候,有时使用的是ctx.lookup("myobject");有时使用的是ctx.lookup("java:comp/evn/ejb/myobject");请问这两种情况分别在什么时候使用? 

答:实际是ref的问题   比如你在一个session  bean中定义了对某个entity   bean或者资源(连接池)的引用,那么你在lookup的时候就该用java:comp/env/refName,如果你只是设置了jndi名字,那么就该类似这样lookup("myobject") 。

 

疑问:JNDI里面加和不加java:comp/env/前缀有什么区别?

java:comp/env是标准的J2EE环境查找规则,使用这种方式必须做一次环境名到JNDI名的映射,这种隔离使得在写程序时不必关注真正的JNDI名字,其实说白了跟把JNDI名放到配置文件里是一样的,用法如下:

如把java:comp/env/my/datasource映射到my.ora.dataource web.xml my/datasource

javax.sql.DataSource CONTAINER weblogic.xml my/datasource my.ora.dataource ………………….

而不使用这个前缀的,其实就是直接的JNDI名



文章出处:http://blog.csdn.net/yakihappy/article/details/3977147






0 0