菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
来源:互联网 发布:tensorflow的api 编辑:程序博客网 时间:2024/05/19 13:23
不废话,直接进入正题:
在Jboss4及以前的版本中,如下代码可以成功部署:
package com.tjb.ejb;import javax.ejb.Local;import javax.ejb.Remote;import javax.ejb.Stateless;@Stateless@Remote@Localpublic class UserManagerBean implements UserManager { public void saveUser(User user) { System.out.println("User对象已被保存"); }}
从代码可以看出,UserManagerBean对接口UserManager 同时声明了远程和本地两种发布方式,这种方式在Jboss4及以前的版本中是被允许的,但是Jboss5以后的版本则认为这是错误的(具体从哪个版本开始改的,这里就不追究了)。如果将上面的代码部署到Jboss5中,会出现以下的错误提示:
java.lang.RuntimeException: @Remote and @Local may not both be specified on the same interface "interface com.lzq.ejb.UserManager" for EJB "UserManagerBean" per EJB3 Spec 4.6.6, Bullet 5.4 [EJBTHREE-751] at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalAndBusinessLocalInterfaces(ProxyFactoryHelper.java:233) at org.jboss.ejb3.proxy.factory.ProxyFactoryHelper.getLocalBusinessInterfaces(ProxyFactoryHelper.java:550) at org.jboss.ejb3.session.SessionContainer.resolveBusinessInterfaces(SessionContainer.java:192) at org.jboss.ejb3.EJBContainer.instantiated(EJBContainer.java:1564) at org.jboss.ejb3.session.SessionContainer.instantiated(SessionContainer.java:182) at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:726) ... 33 more
根据第一句话就能看出来,是因为不允许对同一个接口同时声明Remote和Local两种发布方式,因此,在Jboss5中要实现这样的功能,就需要实现两个接口,代码如下:
package com.tgb.ejb;import javax.ejb.Local;import javax.ejb.Remote;import javax.ejb.Stateless;@Stateless@Remote(value=UserManagerRemote.class)@Local(value=UserManagerLocal.class)public class UserManagerBean implements UserManagerLocal,UserManagerRemote { @Override public void saveUser(User user) { System.out.println("Use对象已被保存"); }}
如果两个接口中的方法相同,重写一个即可。
结论:在Jboss4及以前的版本,可以在一个SessionBean中对同一个接口同时声明Remote和Local两种发布方式;而在Jboss5以后的版本中则不允许这种方式,如果要在一个SessionBean中同时使用Remote和Local方式,则必须实现两个接口,并指明哪个接口用哪种方式。推荐使用第二种,因为任何版本的Jboss都支持此方式。
17 1
- 菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
- EJB3中SessionBean使用Local及Remote接口的注意事项
- 【EJB二】有状态SessionBean和无状态SessionBean
- 解读Ejb中Local与Remote项目
- EJB Remote/Local 绑定和JNDI Lookup
- EJB remote 和sessionBean,以及新工程调用EJB,实现数据的增删改查
- 菜鸟学EJB(一)——第一个实例
- ejb中sessionbean的见解
- 在JBOSS中开发SESSIONBEAN和MSGBEAN
- EJB的Remote访问方式和Local访问方式
- EJb sessionBean
- EJB--SessionBean
- EJB学习笔记四((@Remote与@Local的差异)
- 【EJB系列】(二)——JBOSS7中EJB的远程调用和本地调用
- 图解MyEclipse炮制(EJB)SessionBean全过程
- EJB Local与Remote接口区别
- 菜鸟学Java之Java与C++在字符串中使用+和==的区别
- 菜鸟学数据库(二)——触发器
- linux 信号-- 安装
- insertion sort list
- android中查看网页源码
- Java语言中内存管理的几个技巧
- ubuntu下编译适合ndk的faac
- 菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
- Spring CharacterEncodingFilter字符集过滤器
- 编译boost库
- 详谈JobInProgress中Map/Reduce任务分配
- 总结Java中return语句的用法
- 不止Touch ID,iPhone7将有多种身份验证
- Android中values各国语言命名规则
- 长按鼠标事件js
- Hashtable 和 HashMap的区别