HelloWorld 善战者,求之于势,不责于人;故能择人而任势。

知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。物有本末,事有终始。知所先后,则近道矣。

  BlogJava :: 首页 ::  :: 联系 ::  :: 管理 ::
  167 随笔 :: 1 文章 :: 40 评论 :: 0 Trackbacks

 

 EJB client调用EJB3 ()

当你的EJB3deploy to jboss的情况下,ejb client调用EJB3分两种情况:

1)      发布在jbossweb app作为client来调用EJB

EJB和调用EJBWEB 应用都发布在Jboss 集成环境下。在Jboss下发布WEB 应用,需要把WEB 应用打包成war 文件。另外在此环境下调用EJB 不需要把EJB 的接口类放入/WEB-INF/classes/目录中,否则在调用Stateful Bean 就会发生类型冲突,引发下面的例外

java.lang.ClassCastException: $Proxy84

org.apache.jsp.StatefulBeanTest_jsp._jspService(org.apache.jsp.StatefulBeanTest_jsp:55)

如果EJB和调用EJBWEB 应用都发布在Jboss 集成环境下,那么EJBLocalRemote接口都可以被调用

发布在Jboss 下的客户端不需要明确设置JNDI 访问的上下文环境,可以直接通过

InitialContext ctx = new InitialContext()

获得上下文环境,容器会自动赋给InitialContext 正确的环境,例如:

InitialContext ctx = new InitialContext();//客户端和jboss运行在同一个jvm,不需要传入props

HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

如果硬给InitialContext 设置了访问属性,反而会带来不可移植的问题,因为你的应用有可能部署在weblogic 等应用服务器。(本教程考虑到部分同学可能需要在独立的J2se 中调用EJB,为了教学的方便,把访问属性都设上了,这样不管在jbossj2se 或独立tomcat,都能获得正确的InitialContext

2)      在单独的TomcatJ2SE(如junit test)中调用EJB

在正式的生产环境下,大部分调用EJB 的客户端可能是单独的Tomcat Resin。下面介绍如何在单独的Tomcat服务器中调用EJB在单独的Tomcat 服务器中调用EJB 需要有以下步骤

A)                    把调用EJB 所依赖的Jar 包拷贝到tomcat 下的/shared/lib 目录或WEB 应用的WEB-INF/lib,所依赖的Jarjboss 安装目录的client目录下。你可以在eclipse里设置一个自定义的library “ejb3 library”,把这些jars都添加到该library里,然后在你的EJB project里把“ejb3 library” add to classpath

B)                     EJB 接口拷贝到应用的/WEB-INF/classes/目录下

C)                     客户端访问EJB 时必须明确设置InitialContext 环境属性,代码如下:

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);//客户端和jboss运行在同一个jvm,不需要传入props

HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");

Tip: 除了上面通过硬编码设置环境属性的方式外,还可以在应用的classpath 下放置一个jndi.properties 文件

注意:在单独的tomcatJ2SE里不能调用EJB Local 接口,因为他与JBOSS 不在同一个VM 中。J2se中调用EJB3 同样需要把上述jar EJB 接口放置在应用的类路径下。(如果是JBoss,则需要把JBoss_HOME/client下的 jbossall-client.jar jnp_client.jar引入到你的工程里)

 


</script>

posted on 2008-06-02 15:18 helloworld2008 阅读(630) 评论(1)  编辑  收藏 所属分类: java - ejb3

评论

# re: EJB client调用EJB3 (转) http://jalyspace.spaces.live.com/blog/cns!BBFE3C83B4EE964B!223.entry 2008-11-25 15:31
你太有才啦~  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: