Я устанавливаю 2 новых источника данных (для 2 разных баз данных) в TomEE, чтобы использовать встроенную реализацию JTA. Ниже я добавил два ресурса в файл tomee.xml
XaDataSource myDatabase1XA
DataSourceCreator dbcp
MaxIdle 10
MaxActive 20
ValidationQuery ВЫБЕРИТЕ 1 ИЗ ДВОЙНОГО
Имя пользователя database1
Пароль db1
URL JDBC: оракул: тонкий: @ DB1: 1521 / DB1
<Resource id="myDatabase2" type="DataSource">
XaDataSource myDatabase2XA
DataSourceCreator dbcp
MaxIdle 10
MaxActive 20
ValidationQuery SELECT 1 FROM DUAL
Username database2
Password db2
URL JDBC: оракул: тонкий: @ DB2: 1521 / DB2
Ниже приведен мой простой код Java:
Публичный класс Test {
@Resource
private DataSource myDatabase1XA;
@Resource
private DataSource myDatabase2XA;
@Path("/test")
@Produces(MediaType.TEXT_PLAIN)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public String testDB() throws SQLException {
Connection conn = myDatabase1XA.getConnection();
PreparedStatement sql = conn.prepareStatement("INSERT into test (test1, test2) values (?, ?)");
sql.setString(1, "test1");
sql.setString(2, "test2");
sql.execute();
Connection conn2 = myDatabase2XA.getConnection();
PreparedStatement sql2 = conn2.prepareStatement("INSERT into test2 (test1, test2) values (?, ?)");
sql2.setString(1, "test1");
sql2.setString(2, "test2");
sql2.execute();
return "OK";
}
}
в коде Java myDatabase1XA.getConnection (); сервер выбрасывает org.apache.cxf.interceptor.Fault: ORA-01017: неверное имя пользователя / пароль; вход в систему запрещен.
с той же конфигурацией, когда я заменяю имя класса в ресурсе драйвером не-XAracle, например oracle.jdbc.OracleDriver, мой код работает полностью нормально.
Я не уверен, что именно мне здесь не хватает.