|
这个主题共有 12 回复 / 1 页 [
]
|
|
|
|
|
|
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
|
|
|
|
|
|
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,从这名字上去理解就是只允许本地容器内调用。可我无法确定。
|
|
|
|
|
|
Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2006年12月19日 09:21
|
回复
|
|
我也没你这么新潮,没玩过这个试验。
不过,我认同你的"LocalOnlyContextFactory,从这名字上去理解就是只允许本地容器内调用",因为无论是EJB3/EJB2,从底层都没有脱离JNDI这个基础机制,只有通过JNDI才可以实现分布式计算。
所以,如果想在远程调用调用另外一台机器的组件,必须通过JNDI,而且一定需要一个JNDI服务器。
|
|
|
|
|
|
Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2006年12月19日 10:05
|
回复
|
|
|
谢谢banq的回复,有您这句话我就可以理直气壮对客户说:我们大哥说了,你们的要求是不可能实现的.
|
|
|
|
|
|
Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2006年12月19日 10:41
|
回复
|
|
>我们大哥说了,你们的要求是不可能实现的 别,这和客户要求可能不是一回事,我也没有亲手试验,JBoss4以后bug是很多,当他们开始将JBoss组件切分时,不免丢三拉四,当初设计概念太死了,如果早点意识到组件可彻底分离定制是一个方向,何苦现在呢?
将EJB在Tomcat下运行,实际最后的结果是,将Tomcat武装成了JBoss...如果你的客户是需要将EJB在Tomcat下运行,怎么没有意识到这是兜了一圈又回来了呢?
|
|
|
|
|
|
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大哥的回帖支持。
|
|
|
|
|
|
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独有的 在其他应用服务器中用啥来替代这个东西
这两天正在看还没最终结果 呼呼
|
|
|
|
|
|
Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2006年12月30日 10:36
|
回复
|
|
就我所致目前支持EJB3的就只用两个容器:JBOSS和Weblogic10. 两者的annotation不同,客户端的调用的jndi的property也不同。但区别不大。所以说两者不能直接移植,要稍做改动。
|
|
|
|
|
|
Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2006年12月30日 11:48
|
回复
|
|
|
目前支持EJB3还有Oracle,它的持久层实现使用的是toplink, JBoss使用的是Hibernate,Weblogic收购JDO实现kodo,使用kodo实现EJB3持久层。
|
|
|
|
|
|
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不同 应该很容易解决吧
|
|
|
|
|
|
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修改过]
|
|
|
|
|
|
回复:Re: Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2007年01月04日 18:13
|
回复
|
|
|
|
|
|
|
|
re:Embedded EJB3是否能用java代码作为客户端调用?
|
发表: 2007年04月28日 23:43
|
回复
|
|
可目前支持EJB3的容器也就JBOSS和weblogic 9.2 tech preview.???????
这样的话SUN搞Glassfish来干嘛??看来是我于世隔绝了。。。 无语。。。。
|
|
|
|