在无状态 bean 中禁用数据库事务
Disabling database transaction in stateless bean
在 WildFly 14
中,我有一个 @Stateless
bean,它运行两个 selects 不同的 connections/databases:
InitialContext context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jndi/to/db/1");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from table1"); // table1 in db 1
.........
.........
InitialContext context2 = new InitialContext();
DataSource ds2 = (DataSource)context.lookup("jndi/to/db/2");
Connection conn2 = ds2.getConnection(); // <-- here it fails
Statement stmt2 = conn2.createStatement();
ResultSet rs2 = stmt2.executeQuery("select * from table2"); // table2 in db 2
我在第二个 select 中收到警告(同样失败):
ARJUNA012140: Adding multiple last resources is disallowed
根据这个 link,问题是我 运行 一个事务与两个不同的数据库。请注意,数据源未配置 XA 选项,因为我的应用程序中没有用例在单个事务中更新两个数据库。
我遇到问题的bean是只读的,它只执行两个SQL selects.
我尝试用以下方法注释 bean 方法:
@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
但我收到运行时错误:
WFLYEJB0063: Transaction present on server in Never call (EJB3 13.6.2.6)
为什么交易存在?如何禁用它?
而不是@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
使用:
@TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)
这使得无状态 Bean 避免将自身附加到当前 运行ning 事务;并且 运行 好像根本没有交易...
Why is the transaction present?
我真的不知道...在调用无状态 Bean 之前,您是否调用了任何其他 J2EE 组件(例如,用 @Transactional
注释的 CDI bean 或其他 EJB)?
在 WildFly 14
中,我有一个 @Stateless
bean,它运行两个 selects 不同的 connections/databases:
InitialContext context = new InitialContext();
DataSource ds = (DataSource)context.lookup("jndi/to/db/1");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from table1"); // table1 in db 1
.........
.........
InitialContext context2 = new InitialContext();
DataSource ds2 = (DataSource)context.lookup("jndi/to/db/2");
Connection conn2 = ds2.getConnection(); // <-- here it fails
Statement stmt2 = conn2.createStatement();
ResultSet rs2 = stmt2.executeQuery("select * from table2"); // table2 in db 2
我在第二个 select 中收到警告(同样失败):
ARJUNA012140: Adding multiple last resources is disallowed
根据这个 link,问题是我 运行 一个事务与两个不同的数据库。请注意,数据源未配置 XA 选项,因为我的应用程序中没有用例在单个事务中更新两个数据库。
我遇到问题的bean是只读的,它只执行两个SQL selects.
我尝试用以下方法注释 bean 方法:
@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
但我收到运行时错误:
WFLYEJB0063: Transaction present on server in Never call (EJB3 13.6.2.6)
为什么交易存在?如何禁用它?
而不是@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
使用:
@TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)
这使得无状态 Bean 避免将自身附加到当前 运行ning 事务;并且 运行 好像根本没有交易...
Why is the transaction present?
我真的不知道...在调用无状态 Bean 之前,您是否调用了任何其他 J2EE 组件(例如,用 @Transactional
注释的 CDI bean 或其他 EJB)?