У меня есть код Java, написанный кем-то еще (давно ушел, и никак не с ними связаться), работающий на сервере JBoss, который я отлаживаю. Это получение javax.sql.DataSource
с этой одной строки кода:Найти, где определяется источник данных, полученный из InitialContext.lookup?
DataSource ds = new InitialContext().lookup("java:/jdbc/WPDS");
Однако, когда они используют ds.getConnection()
на следующей строке, это проявляется в журналах:
...
javax .resource.ResourceException: Не удалось получить управляемое соединение для JDBC/WPDS
...
Вызвано: org.jboss.resource.JBossResourceException: Не удалось создать соединение; - вложенная Throwable: (java.sql.SQLException: ORA-01017: неверное имя пользователя/пароль, для входа в систему отказано)
Я посмотрел вокруг и нашел файл с именем oracle-xa-ds.xml
. Он содержит следующее:
<datasources>
<xa-datasource>
<jndi-name>jdbc/WPDS</jndi-name>
<!-- uncomment to enable interleaving <interleaving/> -->
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
<xa-datasource-property name="URL">jdbc:oracle:thin:@hostname.hidden.com:1621:HIDE</xa-datasource-property>
<xa-datasource-property name="User">hidden</xa-datasource-property>
<xa-datasource-property name="Password">hidden</xa-datasource-property>
<!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>
<!-- Checks the Oracle error codes and messages for fatal errors -->
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<!-- Oracles XA datasource cannot reuse a connection outside a transaction once enlisted in a global transaction and vice-versa -->
<no-tx-separate-pools/>
<max-pool-size>50</max-pool-size>
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</xa-datasource>
<mbean code="org.jboss.resource.adapter.jdbc.vendor.OracleXAExceptionFormatter"
name="jboss.jca:service=OracleXAExceptionFormatter">
<depends optional-attribute-name="TransactionManagerService">jboss:service=TransactionManager</depends>
</mbean>
</datasources>
Я проверял, что все эти настройки правильные. Я могу подключиться к базе данных, используя имя хоста, порт, SID, имя пользователя и пароль, указанные в этом файле.
Я подозреваю, что, возможно, он загружает DataSource
из другого места, но я не знаю, как я мог проверить эту теорию (и если это правда, как бы я узнал, откуда она на самом деле ее получает?) Есть ли какие-то я могу включить, или, может быть, я могу как-то заставить его указать мне, какое имя пользователя/пароль он пытается использовать (так что я могу посмотреть, использует ли он то, что находится в файле или нет?)
Проверьте [Консоль управления] (https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Data_Virtualization/6/html/Administration_and_Configuration_Guide/chap-JDBC_Data_Sources.html#Create_an_XA_Datasource_with_the_Management_Interfaces). –
@ElliottFrisch - Он показывает источник данных с именем 'jdbc/WPDS' с типом' XA Datasource' и статусом 'UP'. Я могу проверить, что это загрузка из этого файла, потому что изначально он сказал, что «Доступный счет подключения» равен 50 (как и в файле в моем исходном сообщении), и когда я изменил файл на 60 и перезапустил сервер, соответственно. – ArtOfWarfare
@ravthiru - Я не знаком с тем, о чем вы сейчас говорите ... помогите объяснить? Что такое контекст безопасности? Как я могу узнать, какое имя пользователя/пароль он использует, и как я могу его изменить? – ArtOfWarfare