有谁知道在Java EE应用程序中是否可以用EJB3 bean迭代地替换EJB2.1 bean?

即:一次从代码中删除一个2.1 bean,然后添加实现相同行为而无需触摸其余代码的相应EJB3 bean(+能够通过新EJB3中的注释注入(inject)旧式EJB)。

我不是EJB规范的专家(并且我只有EJB3的经验),但是对我来说,EJB是具有给定业务接口(interface)的简单组件,该接口(interface)由应用服务器管理。 AFAIK EJB3大大简化了组件的编写方式(无人工接口(interface)),并且由于注释的缘故,大多数时候可以省略xml描述符,但是基本原理是相同的。因此,这似乎是可行的。

EJB2.1和EJB3之间是否存在任何不兼容?

问题的核心是,迁移EJB2.1-> EJB3是否需要停止运行/完成重写操作,或者可以在添加新功能和修复旧应用程序错误的同时做到这一点(因此可能会混在一起) EJB2.1和EJB3在运行的应用程序中运行一段时间。

编辑:

  • 我仅对 session bean感兴趣。
  • 我很好奇查询是否(以及如何)进行。 AFAIK EJB2.1需要一些称为home接口(interface)的东西来获取对另一个EJB的引用,但是EJB3没有home接口(interface)...
  • 最佳答案

    EJB 2.1和EJB 3 Bean共存

    EJB2和EJB3 bean可以共存于一个企业应用程序(.ear)中,但不能驻留在相同的ejb jar文件(模块)中。因此,EJB3 bean必须驻留在与EJB2 bean不同的jar中。

    从EJB 2.1调用EJB 3

    EJB3 bean没有home接口(interface),而EJB 2.1需要它。为了使EJB3 bean能够从EJB2访问,您需要向EJB3 bean添加本地本地接口(interface)(或远程本地,如果需要远程调用)。

    创建主界面:

    public interface SystemTimeLocalHome extends EJBLocalHome {
      SystemTimeLocal create() throws CreateException;
    }
    

    向EJB3 bean添加主接口(interface):
    @Stateless
    @Local(TimeServiceLocal.class)
    @LocalHome(TimeServiceLocalHome.class)
    public class TimeServiceBean implements TimeServiceLocal {
       public long getCurrentTimeMillis() {
          return System.currentTimeMillis();
       }
    }
    

    在EJB2 bean内部,调用EJB3 bean的代码仅遵循EJB2规范:查找引用,调用home接口(interface)创建本地接口(interface),然后在本地接口(interface)上调用方法。
    Context ctx = new InitialContext();
    TimeServiceLocalHome home = (TimeServiceLocalHome)ctx.lookup("java:comp/env/" + ejbRefName);
    TimeServiceLocal timeService = home.create();
    timeService.getCurrentTimeMillis();
    

    从EJB 3调用EJB 2.1

    依赖注入(inject)用于将EJB 2.1组件引用注入(inject)到EJB3 bean中。与注入(inject)EJB3 bean的不同之处在于,它是注入(inject)的EJB2的home接口(interface)。在注入(inject)的EJB主接口(interface)上调用create()方法以实例化bean类。
    @EJB BankingServiceHome bsHome;
    
    BankingService bs = bsHome.create();
    bs.getBalance(...);
    

    关于jakarta-ee - EJB2和EJB3可以在一个应用程序中共存吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6051310/

    10-13 01:23