EJB2 和 EJB3 可以在一个应用程序中共存吗?

发布于 2024-11-08 08:03:34 字数 624 浏览 0 评论 0原文

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

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

我不是 EJB 规范方面的专家(并且我只具有 EJB3 的经验),但对我来说,EJB 是一个简单的组件,具有由应用程序服务器管理的给定业务接口。 AFAIK EJB3 极大地简化了如何编写组件(没有人工接口),并且大多数时候由于注释可以省略 xml 描述符,但基础知识是相同的。所以这似乎是合理的,它可以发挥作用。

EJB2.1和EJB2.1之间是否存在不兼容的情况? EJB3?

问题的核心是是否迁移EJB2.1 --> EJB3 需要停止世界/完全重写操作,或者可以在向遗留应用程序添加新功能和修复错误的同时完成此操作(因此在运行的应用程序中将混合使用 EJB2.1 和 EJB3 一段时间) 。

编辑:

  • 我只对会话 bean 感兴趣。
  • 我很好奇查找是否(以及如何)有效。 AFAIK EJB2.1 需要称为 home 接口的东西来获取对不同 EJB 的引用,但 EJB3 没有 home 接口...

does anybody know if it is possible to iteratively replace EJB2.1 beans with EJB3 beans in Java EE application?

That is: at one time remove one 2.1 bean from the code and add corresponding EJB3 bean that implements the same behavior without touching the rest of the code (+ be able to inject the legacy EJBs via annotations in the new EJB3).

I am not expert at EJB specs (and I have experience only with EJB3), but to me EJB is a simply component with given business interface that is managed by the appserver. AFAIK EJB3 brought big simplification how to write the component (no artifical interfaces) and most of the time xml descriptor can be omitted thanks to the annotations, but the basics are the same. So it is seem plausible, it could work.

Is there any incompatibility between EJB2.1 & EJB3?

The core of the question is if migration EJB2.1 --> EJB3 needs to be stop-the-world/complete-rewrite operation or one can do it while adding new feature and fixing bugs to the legacy application (so there will be mix of EJB2.1 and EJB3 for some time in the running app).

EDIT:

  • I am interested in session beans only.
  • I am curious if (and how) the lookup will work. AFAIK EJB2.1 requires something called home interface to get a reference to a different EJB, but EJB3 does not have home interface ...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

九命猫 2024-11-15 08:03:35

迁移是可能的,尽管并非没有问题。

首先将描述符升级到 Java EE 5 模式。这通常是服务器用来确定是否需要扫描注释的标志。

一旦您升级了描述符(但其他方面未更改),您就可以开始将会话和消息驱动 Bean 迁移到 Java EE 5 bean 中。当您转换 bean 时,如果需要,您还可以将其从部署描述符中删除。

完成所有其他 bean 后,您可以开始删除实体 bean 并将持久性转换为 JPA 实体类。这是练习的重要部分。

Migration is possible, though it is not without hiccups.

Start with upgrading the descriptor to the Java EE 5 schemas. This is usually the flag that servers use to determine if they need to scan for annotations.

Once you have the descriptor upgraded (but otherwise unchanged), you can start migrating your Session and Message Driven Beans into Java EE 5 beans. As you convert a bean, you can also remove it from the deployment descriptor, if you want.

After all your other beans are done, you can start to work on removing your entity beans and converting the persistence to JPA entity classes. This is the non-trivial part of the exercise.

落花随流水 2024-11-15 08:03:35

当然可以。看一下这里的开头: http://www .coderanch.com/t/321218/EJB-JEE/java/EJB-call-EJB

Sure you can. Have a look here for the beginning: http://www.coderanch.com/t/321218/EJB-JEE/java/EJB-call-EJB

毁虫ゝ 2024-11-15 08:03:34

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 接口,而 EJB 2.1 需要它。为了使EJB3 bean能够从EJB2访问,您需要向EJB3 bean添加本地home接口(如果需要远程调用,则添加远程home接口)。

创建 home 接口:

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

将 home 接口添加到 EJB3 bean:

@Stateless  
@Local(TimeServiceLocal.class)  
@LocalHome(TimeServiceLocalHome.class)  
public class TimeServiceBean implements TimeServiceLocal {  
   public long getCurrentTimeMillis() {  
      return System.currentTimeMillis();  
   }  
}  

在 EJB2 bean 内部,调用 EJB3 bean 的代码遵循 EJB2 规范:查找引用,调用 home 接口来创建本地接口,然后调用本地接口上的方法。

Context ctx = new InitialContext();  
TimeServiceLocalHome home = (TimeServiceLocalHome)ctx.lookup("java:comp/env/" + ejbRefName);  
TimeServiceLocal timeService = home.create();  
timeService.getCurrentTimeMillis();  

从 EJB 3 调用 EJB 2.1

依赖注入用于将 EJB 2.1 组件引用注入到 EJB3 bean 中。与注入 EJB3 bean 的不同之处在于它是注入 EJB2 的 home 接口。在注入的 EJB home 接口上调用 create() 方法来实例化 bean 类。

@EJB BankingServiceHome bsHome;

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

Coexist of EJB 2.1 and EJB 3 beans

EJB2 and EJB3 beans can coexist in one enterprise application (.ear), but can’t reside on the same ejb jar file (module). Hence, the EJB3 beans must reside in a different jar to the EJB2 beans.

Invoke EJB 3 from EJB 2.1

EJB3 bean hasn't home interface while EJB 2.1 requires it. In order to make EJB3 bean being able to access from EJB2, you need to add local home interface (or remote home if remote call is required) to EJB3 bean.

Create home interface:

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

Add home interface to EJB3 bean:

@Stateless  
@Local(TimeServiceLocal.class)  
@LocalHome(TimeServiceLocalHome.class)  
public class TimeServiceBean implements TimeServiceLocal {  
   public long getCurrentTimeMillis() {  
      return System.currentTimeMillis();  
   }  
}  

Inside EJB2 bean the code to invoke the EJB3 bean just follows EJB2 specification: looks up the reference, call the home interface to create local interface, then invoke method on the local interface.

Context ctx = new InitialContext();  
TimeServiceLocalHome home = (TimeServiceLocalHome)ctx.lookup("java:comp/env/" + ejbRefName);  
TimeServiceLocal timeService = home.create();  
timeService.getCurrentTimeMillis();  

Invoke EJB 2.1 from EJB 3

Dependency injection is utilized to inject the EJB 2.1 component references into EJB3 bean. The different to injecting EJB3 bean is that it's the home interface of EJB2 being injected. Call create() method on injected EJB home interface to instantiate the bean class.

@EJB BankingServiceHome bsHome;

BankingService bs = bsHome.create();
bs.getBalance(...);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文