我想通过以下方式开发一个"基于数据库"的Java桌面应用程序:
- 使用 JPA 开发数据访问层 (DAL)(由 Netbeans 7.4 生成的 POJO)
- 开发业务层(BL)(我自己的类、控制器等)
- 开发表示层 (PL):图形用户界面(面板、框架、对话框)
- 使 (PL) 与 (BL) 通信
我在单个 Netbeans 项目 (ProjectDBL.jar) 中开发了 (DAL + BL)。
我在一个单独的 Netbeans 项目 (ProjectGUI) 中开发了 PL
我正在将ProjectDBL.jar作为编译库导入ProjectGUI。
我没有将 EclipseLink 库添加到 ProjectGUI 中,因为它们是在 ProjectDBL.jar 中添加的。
出于同样的原因,我没有将数据库驱动程序库添加到 ProjectGUI
。我想在我的DAL+BL和我的PL之间完全分开。进一步的数据库修改(例如MySQL->SQLServer)不应影响PL中所做的所有工作。
我面临的问题是当我想调用ProjectDBL中的任何方法时引发的一种异常.jar:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/EntityNotFoundException
似乎持久性单元不能由外部罐子实例化......
库不包括它使用的所有库。Otherwize,每个jar文件的大小为50MB,并且最终会在类路径中多次出现常用库。
您需要将您使用的每个库直接或间接添加到类路径中。
请考虑为此使用企业应用程序原型。
您的 DAL 和 BL 将包含在 EJB 项目中,而 PL 将包含在 Web 项目中。
这种特定情况正是此原型的用途,它将确保您在每个模块中包含必要的库,而不仅仅是去除其依赖项的已编译类。
顺便说一句,在使用 JPA 时,如果你的 DAL/BL 封装在 EJB 类中,你也会得到容器管理的事务,所以无论如何都最好隔离类,因为你可以更好地利用 JEE 广泛的内置管道。