0

我想通过以下方式开发一个“基于数据库的”java桌面应用程序:

  • 使用 JPA (Netbeans 7.4 生成的 POJO )开发数据访问层 ( DAL )
  • 开发业务层(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

似乎持久性单元不能由外部 jar 实例化......

4

2 回答 2

0

编译的库不包括它使用的所有库。否则,每个 jar 文件都会有 50MB 大,最终会在类路径中多次出现常用库。

您需要将您使用的每个库直接或间接添加到类路径中。

于 2014-04-06T13:32:05.360 回答
0

考虑为此使用企业应用程序原型。

您的 DAL 和 BL 将包含在 EJB 项目中,而 PL 将包含在 Web 项目中。

这个特定案例正是这个原型的用途,并将确保您在每个模块中包含必要的库,而不仅仅是剥离了它们依赖关系的编译类。

顺便说一句,在使用 JPA 时,如果您的 DAL/BL 封装在 EJB 类中,您还将获得容器托管事务,因此最好按照您的方式隔离类,因为您可以更好地利用 JEE 广泛的内置 -在管道。

于 2014-04-06T13:43:02.010 回答