代码之家  ›  专栏  ›  技术社区  ›  mathematix

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

  •  0
  • mathematix  · 技术社区  · 11 年前

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

    • 开发数据访问层( 达尔 )使用JPA (Netbeans 7.4生成的POJO)
    • 开发业务层( ) (我自己的类、控制器等)
    • 开发演示层( 平面图 ): 图形用户界面(面板、框架、对话框)
    • 制作( 平面图 )与( )

    我在一个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 回复  |  直到 11 年前
        1
  •  0
  •   JB Nizet    11 年前

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

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

        2
  •  0
  •   SplinterReality    11 年前

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

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

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

    顺便说一句,在使用JPA时,如果DAL/BL封装在EJB类中,那么您也会得到容器管理事务,因此最好像现有的那样隔离类,因为您可以更好地利用JEE的广泛内置管道。