我目前正在使用 Java-EE6(GlassFish 3.1.2、MySQL Server 5.1 和 Netbeans 7.1.1)开发 3 层应用程序。
该项目目前包括3个项目:
- 企业应用程序/EJB:控制数据库实体的外观
- Java Class-Library:表示数据库模型的@Entity 注释类(该项目由 EE-app 和胖客户端共享,以便在层之间交换实体实例)
- J2SE Fat-Client:服务器资源的 JNDI 查找(远程访问 EJB)
为了在创建/修改/删除实体时更新客户端的 GUI,我决定通过实现一个主题来使用 JMS,其中每个客户端在启动时订阅,并且 EJB 容器上的消息驱动 bean 充当发布者。
现在我面临以下大问题:
- 我将生命周期侦听器(@PostUpdate 等)附加到实体对象,然后它们应该将更新消息发布到订阅的客户端。实体类位于 class-lib 项目中,而发布者位于 EE-app 中。问题是,EE 应用程序引用了类库项目,但反之亦然(因为不允许循环项目引用)。因此,实体类中的生命周期回调方法在 EE-app 中的消息驱动发布者 bean 上没有引用。
这是一个与设计更相关的问题,因此问您这是否基本上是使用 Java-EE6 设计 3 层应用程序的正确方法?
如果可能,我想避免 DTO/DAO,以尽可能降低复杂性,并且应用程序不会产生繁重的网络流量。
提前感谢您的建议!