JiveJdon Community Forums
在线328人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 12 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
maqujun

发表文章: 2
注册时间: 2006年12月13日 14:29
Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月14日 18:07 回复
大家好:

在jboss中我们可以在eclipse中直接通过以下代码来调用运行中的EJB3 Service.
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
InitialContext ctx = new InitialContext(props);
Object obj = ctx.lookup("HelloWorldBean/remote");

但是在Embedded EJB3版本中它的客户端的properties与jboss中的不同变为:
props.put("java.naming.factory.initial", "org.jnp.interfaces.LocalOnlyContextFactory");
props.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

我在tomcat中运行我的Embedded EJB3。使用jsp客户端可以调用EJB3。
但是在eclipse中直接以上写入客户代码却throw Exception是否意味着Embedded EJB3只能在服务器能调用?不支持直接的java代码调用?

Thanks for any reply
maxlio

发表文章: 8
注册时间: 2006年12月15日 14:42
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月18日 18:13 回复
没人玩过jboss的Embedded EJB3吗?看出来了,这世界上只有我这么一个倒霉蛋要用这一还不成熟的技术。目前Embedded EJB3的最新版本是alpha9,但是这个最新版本有一个最大的bug就是无法再Tomcat中运行。当然还有其他很多bug,毕竟目前还只是alpha版本。所以我选择的是前一版本alpha8.

Embedded EJB3运用了目前动态AOP的方式。在Tomcat启动时通过web.xml中的设置动态加载EJB3的Listener。同时还允许通过URL实现动态部署EJB3。就是意味着只要有Embedded EJB3就可以在任何容器中运行EJB3。

可惜还没有正式版本的诞生,bug很多。期待中...

说正题吧,我已经花了一个礼拜去研究她的java客户端却没有收获。问jboss官网也没人回,但我个人觉得他是不允许的。从客户端的properties中可以看出embed版本去除了url这一项,并且把factory改为了LocalOnlyContextFactory,从这名字上去理解就是只允许本地容器内调用。可我无法确定。
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月19日 09:21 回复
我也没你这么新潮,没玩过这个试验。

不过,我认同你的"LocalOnlyContextFactory,从这名字上去理解就是只允许本地容器内调用",因为无论是EJB3/EJB2,从底层都没有脱离JNDI这个基础机制,只有通过JNDI才可以实现分布式计算。

所以,如果想在远程调用调用另外一台机器的组件,必须通过JNDI,而且一定需要一个JNDI服务器。
maxlio

发表文章: 8
注册时间: 2006年12月15日 14:42
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月19日 10:05 回复
谢谢banq的回复,有您这句话我就可以理直气壮对客户说:我们大哥说了,你们的要求是不可能实现的.
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月19日 10:41 回复
>我们大哥说了,你们的要求是不可能实现的
别,这和客户要求可能不是一回事,我也没有亲手试验,JBoss4以后bug是很多,当他们开始将JBoss组件切分时,不免丢三拉四,当初设计概念太死了,如果早点意识到组件可彻底分离定制是一个方向,何苦现在呢?

EJB在Tomcat下运行,实际最后的结果是,将Tomcat武装成了JBoss...如果你的客户是需要将EJB在Tomcat下运行,怎么没有意识到这是兜了一圈又回来了呢?
maxlio

发表文章: 8
注册时间: 2006年12月15日 14:42
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月19日 15:30 回复
客户的要求就是在任何一个已知的J2EE容器中部署EJB3,可目前支持EJB3的容器也就JBOSS和weblogic 9.2 tech preview. 所以我才选择尝试JBOSS的Embedded EJB3。其实我已经在Embedded EJB3上花了一周的时间了。我做过JBOSS上的EJB3,所以我个人的观点是Embedded EJB3不可能实现java client调用。谢谢banq大哥的回帖支持。
bjshasha

发表文章: 20
注册时间: 2005年12月21日 10:04
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月29日 16:50 回复
搭一下顺风车
现在用到的EJB3 Service 的声明部分
@Service(objectName = "xxx:service=EquipMgmt")
@Management(EquipMgmtBeanHome.class)
@Remote(EquipMgmtBeanRemote.class)
@RemoteBinding(jndiBinding ="com.xxx.nms_1_0.server.nmserver.equipmgmt.EquipMgmtBeanRemote")
public class EquipMgmtBean implements EquipMgmtBeanHome, EquipMgmtBeanRemote {

然后在另一个Session bean 中调用
Properties JNDIProperties = new Properties();
try {
//JNDIProperties.load(new FileInputStream("jndi.properties"));
JNDIProperties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
JNDIProperties.put("java.naming.provider.url", "localhost:1099");
JNDIProperties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
InitialContext ctx;
ctx = new InitialContext(JNDIProperties);
EquipMgmtBeanRemote EquipObj = (EquipMgmtBeanRemote) ctx.lookup(EquipMgmtBeanRemote.class.getName());
ret = EquipObj.stopPollingSession(sessionId);
}

这个用法目前是没有问题的
不过现在在考虑把项目放到其他应用服务器里的情况
疑问 Jboss4 的 EJB3 Service 是否是JBoss自己独有的实现方式
如果是JBoss独有的 在其他应用服务器中用啥来替代这个东西

这两天正在看还没最终结果 呼呼
maxlio

发表文章: 8
注册时间: 2006年12月15日 14:42
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月30日 10:36 回复
就我所致目前支持EJB3的就只用两个容器:JBOSS和Weblogic10.
两者的annotation不同,客户端的调用的jndi的property也不同。但区别不大。所以说两者不能直接移植,要稍做改动。
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月30日 11:48 回复
目前支持EJB3还有Oracle,它的持久层实现使用的是toplink, JBoss使用的是Hibernate,Weblogic收购JDO实现kodo,使用kodo实现EJB3持久层。
bjshasha

发表文章: 20
注册时间: 2005年12月21日 10:04
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2006年12月31日 09:54 回复
对于EJB3 Service模式 是一种通用的模式么
我在EJB3 的API中没有找到
org.jboss.annotation.ejb.Management;
org.jboss.annotation.ejb.Service;
对应的声明
所以很想知道同样的方式在其他的Server中是否有类似实现
因为涉及到程序的最终结构 所以一直在查
客户端的调用的jndi的property不同 应该很容易解决吧
bjshasha

发表文章: 20
注册时间: 2005年12月21日 10:04
Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2007年01月04日 09:22 回复

查了一下JBOSS的资料
我上述的说法有问题
Jboss 的Mbean服务分为两类
一 是不依赖于Jboss服务的
二 依赖Jboss反映委员的

第一类的Mbean 就是针对每个JMX规范编写的Mbean JMX规范没有定义任何类型的Mbean 生命周期或者依赖管理
第二类的Mbean 是创建一个依赖于Jboss服务的Mbean 需要遵循Jboss服务的模式Jboss Mbean 服务模式由一系列生命周期操作函数组成的,这些函数在Mbean状态改变时能够发出消息通知。消息通知可以在Mbean创建、停止、销毁时通知Mbean 服务。

所以我所要找的应该是一种能够实现类似“Jboss Mbean服务”的通用的实现方式(没办法客户希望能够跨应用服务器)
大家有什么好的建议

[该贴被bjshasha于2007-01-04 09:23:34修改过]
banq

发表文章: 8928
注册时间: 2002年08月03日 17:08
回复:Re: Embedded EJB3是否能用java代码作为客户端调用? 发表: 2007年01月04日 18:13 回复
>客户希望能够跨应用服务器
那就是POJO了,JMX的Mbean不能严格算是POJO,因为要依赖JMX,所以应用服务器必须是JMX,MBean才能跨服务器。

使用POJO就必须配合框架,如Spring /JBoss Seam 或JdonFramework,JBoss Seam可以和JBoss Embeddable EJB3一起在tomcat下运行,下面参考:

http://www.michaelyuan.com/blog/2006/11/14/seam-without-ejb3/
YRHYRH

发表文章: 19
注册时间: 2006年12月01日 03:06
re:Embedded EJB3是否能用java代码作为客户端调用? 发表: 2007年04月28日 23:43 回复
可目前支持EJB3的容器也就JBOSS和weblogic 9.2 tech preview.???????



这样的话SUN搞Glassfish来干嘛??看来是我于世隔绝了。。。
无语。。。。
这个主题有 12 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam