DeltaSpike Data和JTA不起作用

时间:2016-11-18 17:56:42

标签: java transactions jta deltaspike

我在Wildfly 10.1中遇到基于容器的数据源的问题“没有正在进行的事务”

有我的设置:

<datasource jta="true" jndi-name="java:jboss/datasources/MY_DATASOURCE" pool-name="MY_DATASOURCE_POOL" enabled="true" use-java-context="true" use-ccm="true" statistics-enabled="true">
                <connection-url>jdbc:postgresql://localhost:5432/test</connection-url>
                <driver>postgresql</driver>
                <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                <pool>
                    <min-pool-size>50</min-pool-size>
                    <max-pool-size>150</max-pool-size>
                </pool>
                <security>
                    <user-name>test</user-name>
                    <password>test</password>
                </security>
                <validation>
                    <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
                    <validate-on-match>true</validate-on-match>
                    <background-validation>true</background-validation>
                    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
                </validation>
            </datasource>

我们不使用persistence.xml,所以它是我的 hibernate.cfg.xml

    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>
            <property name="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>
            <!-- Configuration for multitenancy separate database support -->
            <property name="hibernate.multiTenancy">DATABASE</property>
            <property name="hibernate.tenant_identifier_resolver">org.example.TenantResolver</property>
        </session-factory>
    </hibernate-configuration>

我还添加 apache-deltaspike.properties 文件

globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction.ContainerManagedTransactionStrategy

也用于在容器中提供事务策略支持。但不幸的是,在我的 @Stateless 服务中,我仍然没有交易。有人能给我一个建议,我的配置有什么问题吗?

1 个答案:

答案 0 :(得分:0)

确保添加行

   <property name="hibernate.transaction.coordinator_class">jta</property>

在hibernate.cfg.xml中,你的类路径中也有 javax.interceptor.InvocationContext 的实现,与我的情况相同。