Отключение транзакции базы данных в компоненте без сохранения состояния - PullRequest
0 голосов
/ 19 января 2019

В 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)

Почему присутствует транзакция?Как это отключить?

1 Ответ

0 голосов
/ 20 января 2019

вместо @TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)

Использование:

@TransactionAttribute(javax.ejb.TransactionAttributeType.NOT_SUPPORTED)

Это заставляет компонент без сохранения состояния избегать присоединения к текущей запущенной транзакции; и запустить так, как будто транзакции вообще не выполняются ...

Почему присутствует транзакция?

Я действительно не знаю ... Вы вызывали какой-либо другой компонент J2EE (например, компонент CDI, помеченный @Transactional или другим EJB) перед вызовом вашего компонента без состояния?

...