Транзакции в MDB

 
 
 
Сообщения:21
Подскажите плз чайнику. Под веб-сферой запускаю сервлет, к-рый выполняет запрос к базе, а потом отправляет сообщение в очередь.

InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/MetrRef");
Connection connection = ds.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select SYSDATE from DUAL");
resultSet.next(); 
System.out.println(resultSet.getString("SYSDATE"));
statement.close();
connection.close();
......
QueueSender queueSender = queueSession.createSender(queue);
TextMessage message = queueSession.createTextMessage();
message.setText("Listen to me please");
queueSender.send(message);
.....


Это сообщение отлавливается c помощью MDB, к-рый в своем методе onMessage() выполняет запрос к той же базе:

onMessage() {
.........
InitialContext initialContext = new InitialContext();
DataSource ds = (DataSource)initialContext.lookup("java:comp/env/MetrRef");
Connection connection = ds.getConnection();
Statement statement = connection.createStatement(); // вот здесь
ResultSet resultSet = statement.executeQuery("select SYSDATE from DUAL");
resultSet.next();
System.out.println(resultSet.getString("SYSDATE"));
....


и вот в этом onMessage в строке "вот здесь" Веб-сфера ругается:

WTRN0063E: An illegal attempt to commit a one phase capable resource with existing two phase capable resources has occurred.
WTRN0086I: XAException encountered during prepare phase for transaction ... Local resources follow.
WTRN0089I: ...


Что я не так делаю и как этого избежать?
Заранее спасибо
 
 
Сообщения:21
Сам справился. Хозяйке на заметку: надо на сервере в источнике данных указать класс OracleXADataSource вместо OracleConnectionPoolDataSource
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет