您的位置:程序门 -> java -> j2ee / ejb / jms



疑问jboss的jndi名称空间 ,谢谢指导


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


疑问jboss的jndi名称空间 ,谢谢指导
发表于:2007-10-05 22:13:27 楼主
jboss或其它javaee服务器的jndi名称空间分为几大类:    
1.全局(本机或其它机器都可通过网络访问这个名称空间里面的东东,对命名没有要求);    
2.本jvm能访问的(以java:/开头,只能在同一个jvm内访问);    
3.java:/cmp(只能在本组件内部访问,比如发布此jndi资源的本web程序内部)  

上述分类是我google了很多资源后对常用服务器的jndi分类的一个理解。(不知是否正确),为了验证我的理解,我在jboss里面同时部署了2个web应用a.war,b.war,在这2个web应用里面使用同样的代码列出jndi树,代码如下:    
enumeration   i1   =   new   initialcontext().listbindings("");   //   global   namespace  

enumeration   i2   =new   initialcontext().listbindings("java:/");   //   java   namespace   (same   vm   only)    
enumeration   i3   =new   initialcontext().listbindings("java:/comp");   //   component   names    
enumeration   i4   =new   initialcontext().listbindings("java:/comp/env");   //   enc    

logger.info("global   context   ");    
for   (;   i1.hasmoreelements();)    
logger.info(i1.nextelement());    

logger.info("context   java:/");    
for   (;   i2.hasmoreelements();)    
logger.info(i2.nextelement());    

logger.info("context   java:/comp/");    
for   (;   i3.hasmoreelements();)    
logger.info(i3.nextelement());    

logger.info("context   java:/comp/env/");    
for   (;   i4.hasmoreelements();)    
logger.info(i4.nextelement());    
通过比较a.war和b.war   打印出的日志,我发现二者打印出的全局名称空间包含的内容是一致的,java:/这个名称空间的内容是一致的。a.war的java:/comp内容如下:    
usertransaction:   javax.naming.linkref:reference   class   name:   javax.naming.linkref    
type:   linkaddress    
content:   usertransaction  

2007-09-28   15:50:53,440   info   [attachweb]   env:   org.jnp.interfaces.namingcontext:org.jnp.interfaces.namingcontext@7e942f  

b.war的java:/comp内容如下:    
usertransaction:   javax.naming.linkref:reference   class   name:   javax.naming.linkref    
type:   linkaddress    
content:   usertransaction  

2007-09-28   15:51:25,368   info   [syn_cen]   env:   org.jnp.interfaces.namingcontext:org.jnp.interfaces.namingcontext@626028  

发现分别从a.war,b.war中访问并列出java:/comp的内容是不同的。我发现的矛盾是:在整个jndi空间内,a.war,b.war的java:/comp是同一个吗?至少它们都属于java:/这个父亲空间,而同一个父亲空间(这里是java:/)怎么可能包括2个同名的java:/comp子空间呢?如果a.war,b.war的java:/comp是同一个,为何打印出来的内容又不一样?  

在应用服务器的jndi空间里,java:/comp是组件(包括web,ejb)的私有空间,是为了起到隔离各组件名称空间的作用,只要是在各组件私有空间绑定的资源,即使名字和其它组件私有空间的名称相同也不会引起冲突。那么从a.war,b.war里面lookup   ("java:/comp")的时候,jndi服务器怎样区分呢属于不同组件的java:/comp呢?jndi树到底是怎样组织的?  

发表于:2007-10-07 22:12:331楼 得分:0
明天上班了,希望有csdn老师指导一下
发表于:2007-10-09 12:05:572楼 得分:0
顶一下


快速检索

最新资讯
热门点击