java - 独立 CDI + JTA(无 JNDI)

标签 java hibernate jpa transactions cdi

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

这是我当前的设置:

持久性.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 事务 ( https://deltaspike.apache.org/documentation/jpa.html ):

  • org.apache.deltaspike.jpa.api.transaction.TransactionScoped;
  • org.apache.deltaspike.jpa.api.transaction.Transactional;
<小时/>

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

“强烈建议 Hibernate 配置 JTA 事务”

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

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

我没有使用 JNDI,并且我不在应用程序服务器中。

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

最佳答案

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

当然,还有像 Atomikos 这样的 JTA 实现,您可以将其嵌入到“独立”应用程序中。

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

如今应用程序服务器相当轻量级,如果您必须拥有独立的可执行文件,那么可以看看 WildFly Swarm 或 Payara Micro。

关于java - 独立 CDI + JTA(无 JNDI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284287/

相关文章:

java - 写时复制集合如何提供线程安全?

java - 如何让 RecyclerView 处理 onclicklistener

Hibernate示例程序中的java.lang.NullPointerException

hibernate - 在 PostgreSQL 和 SpringBoot (JPA) 中创建序列的问题

java - jboss 下的多个数据库可供读取

java - WSDL 生成在 Jenkins 中失败,但在本地工作

java - n 个线程的循环屏障也可以处理 n*2 个线程

java - JPA:防止级联操作[坚持,删除...]

java - 在 Play 框架 2.1 中集成 Spring 和 Hibernate?

hibernate - 使用 Hibernate 将实体映射到表时出现 BeanCreationException