Java EE 应用程序间通信

3
我们正在开发几个独立的应用程序/模块,并将其部署到Glassfish 3.1.1应用服务器上。有些情况下,这些应用程序需要通过远程接口调用彼此的方法。当涉及到打包这些远程接口时,最佳实践是什么呢?例如,如果A需要调用B的远程接口,您会将B的远程接口提取到一个单独的JAR文件中,并将其与模块A一起打包吗?如果此远程接口引用实体类,您会将该实体类与接口一起打包在此JAR文件中吗?
如果您对此主题有任何反馈,请随意建议您认为应该如何处理。

我认为这个问题有两个方面。共享实体或公共实体和纯粹的数据共享。 - r0ast3d
1个回答

2
我曾经在上一份工作中解决过这个具体问题。
这就是EJB设计的目的。EJB既有实现,也有接口。接口放在客户端jar中,被应用程序使用:
@EJB
MyService myService;

实现部分是单独打包并安装在服务器的其他位置:
@Stateless
@Remote({MyService.class})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceBean implements MyService {
...
}

您不应该在Java EE中直接调用应用程序!(但在某些情况下可以)将EJB视为极轻量级的单一目的服务,在其中提取应用程序之间的常见业务逻辑。
您的问题听起来像是循环依赖情况,其中AppA调用AppB并且AppB调用AppA。从AppA中提取AppA和AppB正在使用的业务逻辑,并将其放入EJB中。对于AppB也同样如此。现在您有两个应用程序和两个EJB,可以从任一应用程序中调用共同的业务逻辑。
简单吧?让我知道如何更好地解释这个问题!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接