EJB client调用EJB3 (转)

 
当你的EJB3是deploy to jboss的情况下,ejb client调用EJB3分两种情况:
1)      发布在 jboss web app 作为 client 来调用 EJB
EJB和调用EJB的WEB 应用都发布在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和调用EJB的WEB 应用都发布在Jboss 集成环境下,那么EJB的Local或Remote接口都可以被调用
 
发布在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 ,为了教学的方便,把访问属性都设上了,这样不管在 jboss j2se 或独立 tomcat ,都能获得正确的 InitialContext
 
2)      在单独的 Tomcat J2SE (如 junit test )中调用 EJB
在正式的生产环境下,大部分调用EJB 的客户端可能是单独的Tomcat 或Resin。下面介绍如何在单独的Tomcat服务器中调用EJB。 在单独的 Tomcat 服务器中调用 EJB 需要有以下步骤
A)                    把调用 EJB 所依赖的 Jar 包拷贝到 tomcat 下的 /shared/lib 目录或 WEB 应用的 WEB-INF/lib , 所依赖的 Jar jboss 安装目录的 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 文件
 
注意:在单独的tomcat和J2SE里不能调用 EJB Local 接口,因为他与 JBOSS 不在同一个 VM 中。 J2se 中调用 EJB3 同样需要把上述 jar EJB 接口放置在应用的类路径下。
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值