2014-04-06 50 views
0

我想开发以下列方式为“基于数据库的” Java桌面应用程序:问题沟通业务层(JPA)表示层(Netbeans的7.x版)

  • 开发数据访问层(使用JPA DAL)(由Netbeans的7.4)生成的POJO
  • 开发业务层(BL(我自己的类,控制器等)
  • 开发的表示层(PL):图形用户界面(面板,框架,对话框)
  • 使(PL)与(BL

我公司开发的通信( DAL + BL)在一个Netbeans项目(ProjectDBL.jar)中。

我公司开发的PL在一个单独的NetBeans项目(ProjectGUI)

我进口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 

看来,如果持久性单元不能由外部罐子被实例化...

回答

0

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

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

+0

是否有任何最佳实践要遵循?我需要完全分开我的应用程序的不同组件的开发。因此,将MySQL驱动程序库添加到我的DAL项目和我的GUI项目似乎并不是一种有效的方法... – mathematix

+0

关于什么? –

+0

关于单独开发的多个子项目的图书馆管理。 – mathematix

0

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

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

这个特定的案例正是这个原型的目的,并且将确保你在每个模块中包含必要的库,而不仅仅是剥离其依赖的编译类。另外,当使用JPA时,如果你的DAL/BL被封装在EJB类中,你也会得到容器管理的事务,所以最好像你一样分离类,因为你可以更好地利用JEE广泛的内置管道。

+0

如果我的DAL/BL项目依赖于某些特定的库(例如:EclipseLink,数据库驱动等...),我不明白为什么我应该将所有这些东西导入到我的表示层项目! – mathematix

+0

这就是为什么你应该使用EA原型。基本上你得到的是3种产品:EJB项目,Web项目和组合企业项目,以方便部署。 (另外还有一个控制这3个项目的依赖关系的项目) 如果您希望单独部署它们,您可以,只要您的PL项目可以找到EJB项目的远程接口。这样就可以完全解耦,并且几乎不存在库污染。 – SplinterReality