JiveJdon Community Forums
在线379人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 5 回复 / 1
 发表新帖子   回复该主题贴
1

悄悄话
发表文章: 14
注册时间: 2002年10月18日 12:01
本地接口问题!各方高手请赐教 2004年03月25日 16:14 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表
我把local类型的EJB配置在weblogic中的EJB Module中,但是为什么配置在web Application中的Servlet访问不到它,报JNDI找不到,但是remote的EJB就找得到,而且在EJB Module中的同一个EJB.jar中的EJB访问得到,但是不同的EJB.jar中的就访问的到。后来我把EJB、Servlet都打包成一个ear结构,部署在Application中就都能访问到了,请斑竹帮忙解答一下,万分感谢!
happlyin

悄悄话
发表文章: 38
注册时间: 2004年01月15日 13:37
Re: 本地接口问题!各方高手请赐教 2004年03月26日 10:09 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
是因为weblogic的classloader的缘故

weblogic为每一个应用ear准备一个application classloader,它的父classloader是jdk的System classloader。

因为你的EJB module是单独部署的,也就是是不同的应用。所以你的web应用中的servlet用EJB的local接口,是不能找到的,因为local接口的调用直接用的classloader功能,又web 应用和EJB module使用不同的classloader,所以web应用的classloader是不能够找到EJB module的classloader所导进来的local接口。所以知找不到的。

但是如果把web 和EJB module放在一块成一个ear包,那么它们的classloader是父子关系,即web的classloader的父亲是EJB 的classloader。孩子是可以找到父classloader所导进来的类,所以EJB的local接口,web中的servlet是可以调用的。

远程remote接口,不存在这个问题,是因为它的调用机制,不是通过classloader来完成的,而是通过远程过程调用来完成,因此,不会有这样的问题。

说了这么多,不知道说清楚了没有
1

悄悄话
发表文章: 14
注册时间: 2002年10月18日 12:01
Re: 本地接口问题!各方高手请赐教 2004年03月26日 13:24 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
还有个另外问题,我看了一些Sample发现例如用了会话bean调用实体bean那么,在EJB-jar.xml部署文件中会出现<ejb-local-ref>的描述,用来指定会话bean中到底调用了哪些实体bean,可是我没有设计<ejb-local-ref>的描述也用的好好的,那么加上<ejb-local-ref>的描述有什么用呢?
<enterprise-beans>
<session>
<display-name>Cart</display-name>
<ejb-name>Cart</ejb-name>
<home>com.borland.samples.esite.ejb20.CartHome</home>
<remote>com.borland.samples.esite.ejb20.Cart</remote>
<ejb-class>com.borland.samples.esite.ejb20.CartBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
<ejb-local-ref>
<description />
<ejb-ref-name>ejb/Orderitem</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.borland.samples.esite.ejb20.OrderitemHome</local-home>
<local>com.borland.samples.esite.ejb20.Orderitem</local>
<ejb-link>Orderitem</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<description />
<ejb-ref-name>ejb/ShoppingCart</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.borland.samples.esite.ejb20.ShoppingCartHome</local-home>
<local>com.borland.samples.esite.ejb20.ShoppingCart</local>
<ejb-link>ShoppingCart</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<description />
<ejb-ref-name>ejb/ServerDataModule</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>com.borland.samples.esite.ejb20.ServerDataModuleLocalHome</local-home>
<local>com.borland.samples.esite.ejb20.ServerDataModuleLocal</local>
<ejb-link>ServerDataModule</ejb-link>
</ejb-local-ref>
<ejb-local-ref>
<description />
<ejb-ref-name>ejb/User</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>com.borland.samples.esite.ejb20.UserHome</local-home>
<local>com.borland.samples.esite.ejb20.User</local>
<ejb-link>User</ejb-link>
</ejb-local-ref>
</session>
1

悄悄话
发表文章: 14
注册时间: 2002年10月18日 12:01
Re: 本地接口问题!各方高手请赐教 2004年03月26日 13:29 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
读不起,可能bang大哥的论坛字符忘了考虑html关键字符问题上面的帖子显示有点问题,我再重复一遍:
我看了一些Sample发现例如用了会话bean调用实体bean那么,在EJB-jar.xml部署文件中会出现的EJB-local-ref描述,用来指定会话bean中到底调用了哪些实体bean,可是我自己写的例子没有在部署文件中添加的EJB-local-ref描述也用的好好的,那么加上的EJB-local-ref描述有什么用呢?
happlyin

悄悄话
发表文章: 38
注册时间: 2004年01月15日 13:37
Re: 本地接口问题!各方高手请赐教 2004年03月26日 13:37 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
这个问题要涉及到EJB的开发和部署,即开发人员和部署者之间的关系

试想你要调用一个EJB,你肯定会通过jndi来lookup这个EJB,是不是?
那么这段查找代码肯定有一个EJB的jndi name是不是?

现在分开来看,ejb的开发人员是不知道部署人员对这个EJB用什么样的jndi name。如果部署人员改变EJB的jndi name,那么相应的调用EJB的查找代码也许要改动,这不符合j2ee规范,部署人员是不能,也不可能更改EJB提供者的代码。如果调用EJB的查找代码是通过EJB ref来做的话,就可以避免这个。那么在查找代码中用到的只是EJB ref name,所以不存在上面讲的这个问题
1

悄悄话
发表文章: 14
注册时间: 2002年10月18日 12:01
Re: 本地接口问题!各方高手请赐教 2004年03月26日 14:25 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
噢,原来如此,我发现这些例子中查询EJB时都是用context.lookup("java:comp/env/ejb-ref-name");而我自己写的都是ctx.lookup("JndiName");这样就是说部署人员任意改动JndiName,代码还是可以通过EJB-ref-name找到EJB,而我直接用JndiName就得改代码了,谢谢!

还有一个问题:我在Tomcat中配置的数据源JNDI需要这样来找到(DataSource) ctx.lookup("java:comp/env/JNDIName"),而在weblogic中(DataSource) ctx.lookup("JNDIName")就能找到,这是什么原因能,你们在项目中是如何解决的啊??谢谢您的不断回贴!
这个主题有 5 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  发贴前查询 标签列表勿重复发表问题

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam