独立的CDI + JTA没有JNDI



我在一个独立的应用程序中使用CDI + DeltaSpike + Camel。

这是我当前的设置:

persistence . xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
         version="2.0">
<persistence-unit name="primary" transaction-type="RESOURCE_LOCAL">
    <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode>
</persistence-unit>

EntityManagerFactoryProducer的自定义属性:

properties.put("hibernate.connection.provider_class", "org.example.HikariConnectionProvider");

我正在使用DeltaSpike JPA Transaction with (https://deltaspike.apache.org/documentation/jpa.html):

  • org.apache.deltaspike.jpa.api.transaction.TransactionScoped;
  • org.apache.deltaspike.jpa.api.transaction.Transactional;

我想使用Infinispan来同步我的应用程序缓存。根据Infinispan doc:

"强烈建议Hibernate配置JTA事务"

如何使用JTA事务?我试图将"RESOURCE_LOCAL"更改为"JTA",但我不明白我应该配置什么:

  • hibernate.transaction.factory_class
  • hibernate.transaction.jta.platform

我没有使用JNDI,也不在应用服务器中。

另外,我想使用@javax.transaction。事务性而不是DeltaSpike

本质上,您是在询问如何在不使用Java EE容器的情况下使用大多数Java EE特性。

当然,也有一些JTA实现,比如Atomikos,可以嵌入到"独立"应用程序中。

另一方面,从一个成熟的Java EE环境开始,然后忽略或排除任何不需要的东西可能要容易得多。

现在的应用服务器相当轻量级,如果你必须拥有一个自包含的可执行文件,那么可以看看WildFly Swarm或Payara Micro。

最新更新