【问题标题】:Persistence transaction-type: JTA or RESOURCES_LOCAL持久性事务类型:JTA 或 RESOURCES_LOCAL
【发布时间】:2016-01-11 10:12:32
【问题描述】:

当我使用事务类型:RESOURCES_LOCAL 时,它给出了以下错误:

只有事务类型为 JTA 的持久性单元才能用作容器管理的实体管理器。

我的persistence.xml文件代码是:

<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="empPerUnit" transaction-type="RESOURCE_LOCAL">
<class>com.frameworkonly.domain.Employee</class>
<properties>

  <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
  <property name="hibernate.archive.autodetection" value="class"/>
  <property name="hibernate.hbm2ddl.auto" value="update"/>
 </properties>
   </persistence-unit>

Servlet-context.xml 文件为:

<beans:bean id="entityManagerFactory"   class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <beans:property name="persistenceXmlLocation" value="classpath:/META-INF/persistence.xml"/>
        <beans:property name="persistenceUnitName" value="empPerUnit"/>
        <beans:property name="dataSource" ref="dataSource" />
        <property name="jpaDialect" ref="jpaDialect" />
        <beans:property name="jpaVendorAdapter">
        <beans:bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <beans:property name="database" value="SQL_SERVER" />
                        <beans:property name="showSql" value="true" />
                </beans:bean>
        </beans:property>
</beans:bean>

  <beans:bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />

<beans:bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    <beans:property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
    <beans:property name="url" value="jdbc:sqlserver://192.168.1.194;databaseName=dbAhsan" />
    <beans:property name="username" value="sa" />
    <beans:property name="password" value="Egp12345" />
    <beans:property name="initialSize" value="5" />
    <beans:property name="maxActive" value="10" />
    <beans:property name="maxIdle" value="5" />
    <beans:property name="minIdle" value="2" />
</beans:bean>

<beans:bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <beans:property name="entityManagerFactory" ref="entityManagerFactory" />
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="jpaDialect" ref="jpaDialect" />
</beans:bean>

<tx:annotation-driven transaction-manager="transactionManager" />
<task:annotation-driven/>

<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<mvc:resources mapping="/resources/**" location="/resources/" />

<beans:bean id="tilesConfigurer"
    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <beans:property name="definitions">
        <beans:list>
            <beans:value>/WEB-INF/tiles.xml</beans:value>
            <beans:value>/WEB-INF/views/**/views.xml</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>
<beans:bean id="tilesViewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <beans:property name="viewClass">
        <beans:value>
            org.springframework.web.servlet.view.tiles3.TilesView
        </beans:value>
    </beans:property>
    <beans:property name="order" value="0"/>
</beans:bean>


<context:component-scan base-package="com.frameworkonly" />

`

完整的错误日志:

java.lang.RuntimeException: The persistence-context-ref-name [com.frameworkonly.repository.EmployeeRepositoryImplementation/entityManager] in module [HikariCPConfig] resolves to a persistence unit called [empPerUnit] which is of type RESOURCE_LOCAL. Only persistence units with transaction type JTA can be used as a container managed entity manager. Please verify your application.
    at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUViaEMRef(BundleDescriptor.java:738)
    at com.sun.enterprise.deployment.BundleDescriptor.findReferencedPUsViaPCRefs(BundleDescriptor.java:719)
    at org.glassfish.web.deployment.descriptor.WebBundleDescriptorImpl.findReferencedPUs(WebBundleDescriptorImpl.java:1037)
    at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:186)
    at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:168)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:925)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:434)
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
    at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:539)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:535)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:534)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:565)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:557)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:360)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:556)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1464)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:109)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1846)
    at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1722)
    at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
    at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
    at org.glassfish.grizzly.http.server.StaticHttpHandlerBase.service(StaticHttpHandlerBase.java:189)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:283)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:132)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:111)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:536)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:591)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:571)
    at java.lang.Thread.run(Thread.java:745)

【问题讨论】:

  • 你在谷歌上搜索过错误信息吗?
  • 我怀疑那是你的完整 persistence.xml 并添加完整的堆栈跟踪。
  • 自过去 5 小时以来搜索。 @RemigiusStalder
  • 您的persistence.xml 正在被容器接收。将其重命名为其他名称或将其移动到其他位置。玻璃鱼是一个挑剔的投标,即使它不应该扫描它的课程......
  • 你很棒。非常感谢@M.Deinum

标签: java spring hibernate jpa


【解决方案1】:

不,事务类型RESOURCE_LOCAL,您必须管理数据库交互而不是容器。

您可以通过@PersistenceUnit 注入EntityManagerFactory,然后可以从中检索EntityManager

所有数据库事务将由您管理,不能通过@PersistenceContext注入EntityManager

尝试阅读与JTA、RESOURCE_LOCAL、CMT、BMT等相关的文档,有助于更清楚地理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-17
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多