我的当前项目包括Hibernate平台上的JPA2.0,HSQLDB2.0和JBoss5.1。
我还在JBoss中以hmc。
的名义定义了数据源 Persistence.xml看起来像:
<persistence-unit name=HMC><jta-data-source>java:/hmc</jta-data-source>...</persistence-unit>
任何人都可以告诉我
JPA persistence.xml中jta和非jta数据源定义之间的区别是什么。
如何获取连接,以JTA模式启动事务?
我对如何开始持久化实体的交易感到困惑。
每当运行select查询时,EntityManager都会工作,但不能保存数据。
我试过
使用EntityManager,它抛出IllegalStateException : A JTA EntityManager cannot use getTransaction()
例外。
查找数据源并且能够获取连接对象,但无法从该javax.sql.Connection对象启动事务。
使用@Inject,@ Resource用于EJBContext,EntityManager和UserTransaction。
此致
萨蒂亚
答案 0 :(得分:2)
对于JTA和非JTA之间的差异,可以参考this article
有关如何在JTA模式下访问JDBC连接,您可以参考this article
使用EntityManager,它扔了 IllegalStateException:一个JTA EntityManager无法使用 getTransaction()异常。
我认为发生此错误是因为容器是管理您的事务的容器,而不是您(否则它将是非jta,您将使用应用程序管理的实体管理器)
您无法访问事务的原因是您可以调用应该由Java EE容器执行的提交或其他方法。
查找数据源并且是 能够获得连接对象,但是 无法从那开始交易 javax.sql.Connection对象。
我认为这很好,因为你已经可以从数据源获得连接,这是一种干净的方式。我不认为你需要担心这里的事务,因为它已经由你正在使用的Java EE容器管理。那么为什么不只是连接已经连接的东西? : - )
答案 1 :(得分:0)