使用表示层(Netbeans 7.x)与业务层(JPA)进行通信时出现问题

时间:2014-04-06 13:05:35

标签: java jpa netbeans noclassdeffounderror presentation-layer

我想以下列方式开发一个“基于数据库”的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实例化......

2 个答案:

答案 0 :(得分:0)

编译的库不包含它使用的所有库。另外,每个jar文件的大小都是50MB,你最终会在类路径中多次出现常用的库。

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

答案 1 :(得分:0)

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

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

这个具体案例正是这个原型所针对的,并且将确保您在每个模块中包含必要的库,而不仅仅是编译的类被剥夺了它们的依赖性。

顺便说一下,当使用JPA时,如果你的DAL / BL被封装在EJB类中,你也会得到容器管理事务,所以最好按照你的方式分离类,因为你可以更好地服用JEE广泛的内置管道的优势。