我要在TomEE中设置2个新的数据源(用于2个不同的数据库),以利用其内置的JTA实现。我在tomee.xml文件中添加了以下两个资源
XaDataSource myDatabase1XA DataSourceCreator dbcp 最大闲置10 MaxActive 20 ValidationQuery SELECT 1 FROM DUAL 用户名数据库1 密码db1
网址jdbc:oracle:thin:@ 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
网址jdbc:oracle:thin:@ db2:1521 / DB2
下面是我的简单Java代码:
公共课程测试{
@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:无效的用户名/密码;登录被拒绝。
当我用非XA oracle驱动程序(例如oracle.jdbc.OracleDriver)替换资源中的类名时,使用相同的配置,我的代码可以正常工作。
我不确定我在这里到底想念什么。