Embedded EJB3是否能用java代码作为客户端调用?

06-12-14 maqujun
    

大家好:

在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
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
2006-12-19 09:21

我也没你这么新潮,没玩过这个试验。

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

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

maxlio
2006-12-19 10:05

谢谢banq的回复,有您这句话我就可以理直气壮对客户说:我们大哥说了,你们的要求是不可能实现的.

banq
2006-12-19 10:41

>我们大哥说了,你们的要求是不可能实现的

别,这和客户要求可能不是一回事,我也没有亲手试验,JBoss4以后bug是很多,当他们开始将JBoss组件切分时,不免丢三拉四,当初设计概念太死了,如果早点意识到组件可彻底分离定制是一个方向,何苦现在呢?

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

3Go 1 2 3 下一页