我在远程机器上有两个数据库,我想在CMT
on中使用它们TomEE 7.0.2
。我在其中配置了两个 XA 数据源,tomee.xml
但遇到了登录问题。应用程序服务器遇到错误时无法创建数据源。在 xml 中正确设置了用户名和密码。我创建了一个测试来检查它是否ojdbc7.jar
做了一些讨厌的事情,但它能够正常登录。
问题
我也调试TomEE
了检查包wireshark
。问题似乎在里面TomEE
。发送到 oracle 机器的请求包含以下内容:
(DESCRIPTION=(CONNECT_DATA=(SID=DBNAME)(CID=(PROGRAM=JDBC Thin Client)(HOST=__jdbc__)(USER=osuser)))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521)))
如您所见,此连接数据尝试使用osuser而不是tomee.xml
.
我也尝试了基于http://tomee.apache.org/datasource-config.html的不同配置。
问题
如何配置TomEE
为使用提供的用户和密码进行数据库连接?
应用:
tomee.xml:
默认PasswordCipher
是PlainText
包含它以确保它。
<?xml version="1.0" encoding="UTF-8"?>
<tomee>
<Resource id="oracleDS" type="DataSource">
XaDataSource oracleXADS
DataSourceCreator dbcp-alternative
</Resource>
<Resource id="oracleXADS" type="XADataSource" class-name="oracle.jdbc.xa.client.OracleXADataSource">
Url jdbc:oracle:thin:@192.168.1.10:1521:DBNAME
Username user
PasswordCipher PlainText
Password pass
</Resource>
<Resource id="postgreDS" type="DataSource">
XaDataSource postgreXADS
DataSourceCreator dbcp-alternative
</Resource>
<Resource id="postgreXADS" type="XADataSource" class-name="org.postgresql.xa.PGXADataSource">
Url jdbc:postgresql://192.168.1.10:5432/DBNAME
Username user
PasswordCipher PlainText
Password pass
</Resource>
</tomee>
还尝试了这种格式:
<Resource id="oracleXADS" type="javax.sql.XADataSource" class-name="oracle.jdbc.xa.client.OracleXADataSource">
url = jdbc:oracle:thin:@192.168.1.10:1521:DBNAME
userName = user
passwordCipher = PlainText
password = pass
</Resource>
持久性.xml:
<persistence-unit name="oraDS" transaction-type="JTA">
<jta-data-source>oracleXADS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>
<persistence-unit name="pgDS" transaction-type="JTA">
<jta-data-source>postgreXADS</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>
测试文件相同ojdbc7.jar
TestDatasource.java 的相关部分
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("Oracle JDBC Driver Registered!");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.10:1521:DBNAME", "user", "pass");
//connection is checked and it is OK
相关TestXADatasource.java
OracleXADataSource oxds = new OracleXADataSource();
oxds.setURL("jdbc:oracle:thin:@192.168.1.10:1521:DBNAME");
oxds.setUser("user");
oxds.setPassword("pass");
XAConnection pc = oxds.getXAConnection();
Connection conn1 = pc.getConnection();
//connection is checked and it is OK
其他不起作用的解决方案:
我检查了以下内容,但这些不是我的问题的解决方案:
factory
A)根据接受的答案,我没有导致问题的财产。
B)我使用最新的 Oracle 驱动程序,数据库也是 12,尽管我创建了下面提供的简单测试。
A) 我在两台机器上都使用 linux,并且在不同的应用服务器上使用Java
.