EJB entity bean JAR & RESTeasy



我在让我的实体豆子正确连接到 MySQL 时遇到问题。这是我的设置:

JBOSS: 6

优麒麟图: 11.04

EJB: 3.1

我目前正在尝试通过对 EAR 文件根目录中的 JARed 会话 Bean 的 JNDI 远程调用来访问实体 bean。

我的实体 bean 正确映射到我的数据库并在一个 EAR 文件中工作,但是我想在同一容器中的另一个 EAR 文件中使用相同的实体 bean,因此我已对实体 bean 进行了 JAR,并使用我的构建脚本将它们拉入我的第二个 EAR 文件中。我正在拉取与我的第一个 EAR 文件完全相同的持久性.xml文件,它指向我的部署目录根目录中的相同数据源 XML。我可以定义我的持久性上下文并访问我的实体 bean,而不会出错,我可以编译和部署我的 JBoss 服务器而没有任何异常。但是,当我在容器部署后尝试访问实体 bean 时,我收到此错误:

java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [SELECT u FROM User u WHERE u.accountId=:accountId]

这是我正在使用的查询:

List<User> users = entityManager.createQuery("SELECT u FROM User u WHERE u.accountId=:accountId")
        .setParameter("accountId", accountId)
        .getResultList(); 

谁能告诉我,如果:

  1. JARing 实体 Bean 存在问题
  2. RESTeasy是否需要一些特殊的配置来处理实体豆
  3. 甚至可以使用 JAR 实体豆
  4. 如果我在同一容器中使用同一实体 Bean 的两个单独实例访问同一数据源,可能会有配置冲突

提前感谢您对此的任何帮助。我真的被困住了。

已添加 (20/05/2011):

所以我现在已经将我的实体和会话 bean 合并到一个罐子中并更改了持久性.xml因此请在下面包含 Nayan 建议的自动检测属性:

<property name="hibernate.archive.autodetection" value="class"/>

但无济于事。我在应用程序中注册了 JAR.xml并将 JAR 添加到构建脚本中的类路径中。

将 JAR 文件放入部署目录的根目录并尝试从那里访问它是否有意义?

在您的 EAR 中,似乎无法识别打包在 jar 中的实体,还要检查类路径中是否存在 jar。

尝试在持久性中添加<property name="hibernate.archive.autodetection" value="class"/>.xml。

否则,请尝试包含持久单元的类。

<persistence-unit name="unitName">
    <class>com.package.User</class>
    ...
 </persistence-unit>

问题出在我的持久性.xml文件的位置上。我在 JAR 中具有持久性.xml文件,其中包含我的会话 bean,而不是需要它的实体 bean。问题解决了!

最新更新