В WildFly 14
у меня есть компонент @Stateless
, который запускает два выбора с разными соединениями / базами данных:
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
Я получаю предупреждение во втором выборе (который также не выполняется):
ARJUNA012140: Adding multiple last resources is disallowed
Согласно этой ссылке , проблема в том, что я выполняю одну транзакцию с двумя разными базами данных.Обратите внимание, что источники данных НЕ сконфигурированы с опцией XA, так как в моем приложении нет вариантов использования, которые обновляют обе базы данных в одной транзакции.
Бин, в котором у меня проблема, доступен только для чтения, он тольковыполняет два SQL-выбора.
Я пытался аннотировать метод bean-компонента с помощью:
@TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
Но я получаю ошибку времени выполнения:
WFLYEJB0063: Transaction present on server in Never call (EJB3 13.6.2.6)
Почему присутствует транзакция?Как это отключить?