gpt4 book ai didi

jakarta-ee - EJB2 和 EJB3 可以共存于一个应用程序中吗?

转载 作者:行者123 更新时间:2023-12-04 05:34:07 27 4
gpt4 key购买 nike

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

也就是说:一次从代码中删除一个 2.1 bean 并添加相应的 EJB3 bean,该 bean 实现相同的行为而无需触及其余代码(+ 能够通过新 EJB3 中的注释注入(inject)遗留 EJB)。

我不是 EJB 规范方面的专家(而且我只有 EJB3 方面的经验),但对我来说,EJB 是一个简单的组件,具有由应用服务器管理的给定业务接口(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 没有主接口(interface),而 EJB 2.1 需要它。为了使 EJB3 bean 能够从 EJB2 访问,您需要向 EJB3 bean 添加本地 home 接口(interface)(如果需要远程调用,则为远程 home)。

    创建主界面:

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

    为 EJB3 bean 添加 home 接口(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 的主接口(interface)。调用 create()注入(inject) EJB 主接口(interface)上的方法来实例化 bean 类。
    @EJB BankingServiceHome bsHome;

    BankingService bs = bsHome.create();
    bs.getBalance(...);

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

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com