Deltaspike альтернативный выпуск TransactionStrategy

В моем приложении swarm wildfly я хотел бы использовать deltaspike с модулем данных, JPA и JTA.

Я определил свой файл beans.xml, чтобы использовать EnvironmentAwareTransactionStrategy в качестве TransactionStrategy.

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<alternatives>
    <class>org.apache.deltaspike.jpa.impl.transaction.EnvironmentAwareTransactionStrategy</class>
</alternatives>

Однако, когда я запускаю свое приложение, это исключение выдается:

at org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1333)
at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.getTransaction(ResourceLocalTransactionStrategy.java:372)
at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.rollbackAllTransactions(ResourceLocalTransactionStrategy.java:338)
at org.apache.deltaspike.jpa.impl.transaction.ResourceLocalTransactionStrategy.execute(ResourceLocalTransactionStrategy.java:155)
at org.apache.deltaspike.jpa.impl.transaction.TransactionalInterceptor.executeInTransaction(TransactionalInterceptor.java:57)

CDI использовал TransactionStrategy (ResourceLocalTransactionStrategy) по умолчанию вместо альтернативного (EnvironmentAwareTransactionStrategy), определенного в моем файле beans.xml.

Файл beans.xml хорошо расположен в src/main/resources/META-INF и в моем pom.xml

    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>datasources</artifactId>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.wildfly.swarm</groupId>
        <artifactId>cdi</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.core</groupId>
        <artifactId>deltaspike-core-api</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.core</groupId>
        <artifactId>deltaspike-core-impl</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.modules</groupId>
        <artifactId>deltaspike-data-module-api</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.modules</groupId>
        <artifactId>deltaspike-data-module-impl</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.modules</groupId>
        <artifactId>deltaspike-jpa-module-api</artifactId>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.deltaspike.modules</groupId>
        <artifactId>deltaspike-jpa-module-impl</artifactId>
        <scope>runtime</scope>
    </dependency>

Можешь посмотреть?

Благодарю.

Damien

2 ответа

Мне удалось заставить это работать, следуя примеру, доступному здесь: https://github.com/wildfly-swarm/wildfly-swarm-examples/tree/master/jaxrs/jaxrs-deltaspike-data

Я сделал следующее действие:

1 / удалены альтернативы в beans.xml

2 / добавьте apache-deltaspike.properties в src/main/resources/META-INF, содержащую globalAlternatives.org.apache.deltaspike.jpa.spi.transaction.TransactionStrategy=org.apache.deltaspike.jpa.impl.transaction.ContainerManagedTransactionStrate

Однако мне немного любопытно. Может кто-нибудь объяснить мне, почему альтернативы не работают? Это потому, что deltaspike jpa находится в другой банке? проблема с classpath?

Deltaspike дает использовать больше объяснений:

https://deltaspike.apache.org/documentation/jpa.html

В случае некоторых версий Weld, включая несколько версий JBoss EAP/Wildfly и Websphere Liberty Profile, или OpenWebBeans в режиме BDA, который не является версией по умолчанию, вы должны настроить его как глобальную альтернативу вместо альтернативы в bean-компонентах. XML

а также

https://deltaspike.apache.org/documentation/spi.html

Они предлагают использовать apache-deltaspike.properties в качестве обходного пути.

Другие вопросы по тегам