Jakarta ee 在JavaEE中使用多实体管理器回滚
在一个使用JBossApplicationServer7和容器管理事务的web应用程序中,我有两个持久化单元,一个用于Oracle,一个用于PostgreSQL。然后我在一个类中注入两个实体管理器 在此类同时使用这些实体管理器的方法中,当引发导致回滚的运行时异常时,只有Oracle数据将回滚Jakarta ee 在JavaEE中使用多实体管理器回滚,jakarta-ee,jboss,transactions,entitymanager,rollback,Jakarta Ee,Jboss,Transactions,Entitymanager,Rollback,在一个使用JBossApplicationServer7和容器管理事务的web应用程序中,我有两个持久化单元,一个用于Oracle,一个用于PostgreSQL。然后我在一个类中注入两个实体管理器 在此类同时使用这些实体管理器的方法中,当引发导致回滚的运行时异常时,只有Oracle数据将回滚 我做错了什么?查找两阶段事务 您应该为XA事务准备数据库 例如,对于PostgreSQL,将参数设置为10 对于Oracle 9.2/10,授予用户权限: grant select on sys.dba_p
我做错了什么?查找两阶段事务 您应该为XA事务准备数据库 例如,对于PostgreSQL,将参数设置为10 对于Oracle 9.2/10,授予用户权限:
grant select on sys.dba_pending_transactions to <user name>;
grant select on sys.pending_trans$ to <user name>;
grant select on sys.dba_2pc_pending to <user name>;
grant execute on sys.dbms_system to <user name>;
将sys.dba_pending_事务上的select授予;
将系统挂起的select_trans$授予;
授予sys.dba_2pc_上的select待定;
将sys.dbms_系统上的execute授予;
您应该在JBoss中创建XA数据源。我的示例(对数据库进行更改)
PostgreSQL:
<driver name="postgresql-xa" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
<xa-datasource jndi-name="java:jboss/datasources/MoneyXADS" pool-name="MoneyXADS" enabled="true" use-ccm="false">
<xa-datasource-property name="ServerName">
127.0.0.1
</xa-datasource-property>
<xa-datasource-property name="PortNumber">
5432
</xa-datasource-property>
<xa-datasource-property name="DatabaseName">
money
</xa-datasource-property>
<driver>postgresql-xa</driver>
<xa-pool>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<security>
<user-name>wassily</user-name>
<password>leontief</password>
</security>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
org.postgresql.xa.PGXADataSource
127.0.0.1
5432
钱
PostgrexA
假的
假的
假的
假的
瓦西里
莱昂蒂夫
假的
假的
假的
甲骨文:
<driver name="oracle-xa" module="com.oracle.db">
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
</driver>
<xa-datasource jndi-name="java:jboss/datasources/CACCXADS" pool-name="CACCXADS" enabled="true" use-ccm="false">
<xa-datasource-property name="URL">
jdbc:oracle:thin:@localhost:1521:XE
</xa-datasource-property>
<xa-datasource-property name="User">
DEV_CACC
</xa-datasource-property>
<xa-datasource-property name="Password">
DEV_CACC
</xa-datasource-property>
<driver>oracle-xa</driver>
<xa-pool>
<is-same-rm-override>false</is-same-rm-override>
<interleaving>false</interleaving>
<pad-xid>false</pad-xid>
<wrap-xa-resource>false</wrap-xa-resource>
</xa-pool>
<validation>
<validate-on-match>false</validate-on-match>
<background-validation>false</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
oracle.jdbc.xa.client.oraclexadasource
jdbc:oracle:thin:@localhost:1521:XE
德福CACC
德福CACC
甲骨文xa
假的
假的
假的
假的
假的
假的
假的
您需要使用复合持久性单元来连接更多数据库。复合持久性单元包含更多的复合单元成员。一个这样的复合持久性单元成员与每个数据库相关联。所有复合持久化单元成员都连接到一个(完整的)复合持久化单元中。这个复合单元在Java中链接到一个@PersistenceContext。它根据一个XA事务进行操作
在详细的回答中,我解释了如何组合两个持久性单元成员。每个复合持久性单元成员都与不同的数据库连接。您可以使用EclipseLink配置复合持久性单元:。欢迎使用SO!请发一封邮件给我们帮助。格式,大写谢谢回复,我使用jta交易。你可以通过jta交易吗?是的,你可以。只需设置xa数据源。