WildFly部署:无法使用SynchronizationType创建EntityManager

时间:2014-06-27 11:10:05

标签: java-ee jpa wildfly-8

我正在尝试迁移GlassFish 4.0 webapp以在WildFly 8.1.0 FINAL上部署。该应用程序正确部署,但在sendind GET请求后(例如输入localhost:8080 / meanful /),会发生奇怪的错误:

2:57:15,493 ERROR [org.jboss.as.ejb3.invocation] (default task-4) JBAS014134: EJB Invocation failed on component SystemDaoImpl for method public abstract boolean com.meanful.service.system.SystemDao.contains(java.lang.String): javax.ejb.EJBException: java.lang.IllegalStateException: Unable to create EntityManager with SynchronizationType because PersistenceUnit is configured with resource-local transactions.

我的persistence.xml看起来像这样,并且在我的GlassFish 4服务器上使用相同版本的EclipseLink完全正常运行。

<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="mysqlPersistenceUnit" transaction-type="JTA">
      <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
      <jta-data-source>java:/jdbc/mySQL</jta-data-source>
     <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <properties>
        </properties>
  </persistence-unit>
</persistence>

实现类本身如下所示:

@Stateless
public class SystemDaoImpl implements SystemDao {

@PersistenceContext private EntityManager entityManager;

@Override
public boolean contains(String infoKey) {
    return entityManager.find(SystemInfo.class, infoKey) != null;

    }

注入实体经理。当程序到达contains()方法的内部时(只有一行),抛出错误。

连接设置正确,连接测试显示一切正常。 JTA is enabled enter image description here

2 个答案:

答案 0 :(得分:2)

请检查行:

<resource-root path="jipijapa-eclipselink-1.0.1.Final.jar"/>

modules / system / layers / base / org / eclipse / persistence / main / module.xml <resource>元素中。

  

jipijapa-的EclipseLink-1.0.1.Final.jar:

     
    

此库是一组实用程序类,用于帮助集成     EclipseLink进入JBossAS7

  

根据以下内容应该有两行(集成和eclipselink库):

JPA Reference Guide - Using EclipseLink

答案 1 :(得分:1)

本期与EclipseLink相关。 EclipseLink 2.5.1。被定义为persistence.xml中的提供者。在删除此声明并让Hibenate捆绑在WildFly中之后,一切正常。

我还没有发现为什么会发生这种奇怪的错误。看起来EclipseLink认为事务管理是RESOURCE_LOCAL。