У меня есть две базы данных на удаленной машине, и я хочу использовать их в CMT
на TomEE 7.0.2
. Я настроил два источника данных XA в своем tomee.xml
и столкнулся с проблемой входа в систему. Сервер приложений не может создать источники данных из-за ошибки. Имя пользователя и пароль правильно указаны в xml. Я создал тест, чтобы проверить, не делает ли ojdbc7.jar
что-то неприятное, но он может войти в систему, как должен.
Проблема
Я отладил TomEE
, чтобы проверить пакеты и с wireshark
. Проблема, похоже, внутри TomEE
. Запрос, отправленный на машину оракула, содержит следующее:
(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>
persistence.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
Другие неработающие решения:
Я проверил следующее, но это не решение моей проблемы:
#P18#
A) У меня нет свойства factory
, которое вызвало проблему в соответствии с принятым ответом.
Б) Я использую последний драйвер Oracle, и база данных также 12, несмотря на то, что я создал простой тест, представленный ниже.
#P21#
A) Я использую Linux на обеих машинах, и я нахожусь на другом сервере приложений с Java
.
#P23#