Приложение JBoss не может установить соединение XA с Oracle 11g

Я работал над несколькими приложениями JBoss, где у меня все работает на моем ноутбуке (Windows XP), включая базу данных Oracle (11g Enterprise Edition). На ноутбуке все работает нормально.

Теперь я настраиваю новую, более быструю машину (под управлением Windows 7 Professional), и приложения JBoss, отличные от XA, работают нормально, но приложения, требующие подключения XA, не могут подключиться к Oracle. Я почти уверен, что это проблема с моей новой установкой Oracle, потому что я могу указать приложениям внешний сервер Oracle, и они работают, но они не могут подключиться, когда указывают им мою локальную базу данных Oracle.

Я сделал много поисков в Google, и единственная информация, которую я могу найти, это то, что мне нужно запустить скрипт $ORACLE_HOME/rdbms/admin/xaview.sql для создания некоторых представлений XA, и мне нужно предоставить пользователю следующие разрешения:

GRANT SELECT ON sys.dba_pending_transactions TO <user>;
GRANT SELECT ON sys.pending_trans$ TO <user>;
GRANT SELECT ON sys.dba_2pc_pending TO <user>;
GRANT EXECUTE ON sys.dbms_xa TO <user>;

Но после всего этого я все еще не могу подключить приложения. Это исключение, которое я получаю:

org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: Io exception:
The Network Adapter could not establish the connection)     at
org.jboss.resource.adapter.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAMangedConnectionFactory.java:144)   at
org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventLisener(InternalManagedConnectionPool.java:577) at
org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:262)    at
org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:500) at
org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:347)   at
org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:330) at
org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:402) at
org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849)  at
org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:90) at
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46)   at
org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)

Я знаю, что на самом деле это не вопрос программирования, но я надеялся, что кто-то видел это раньше. Любая помощь приветствуется.


person Mike Hopper    schedule 11.05.2012    source источник
comment
Нет оракула jdbc в трассировке стека?   -  person Nicholas    schedule 12.05.2012
comment
Проверьте, открыт ли порт для подключения внешних систем, и проверьте, можете ли вы подключиться с помощью простой программы JDBC.   -  person Phani    schedule 14.05.2012


Ответы (2)


Мне удалось решить эту проблему, убедившись, что параметры имени хоста и имени домена в файле LISTENER.ORA и в файле TNSNAMES.ORA совпадают. Например, если у одного HOST = localhost, а у другого HOST = myhost.xyz.com, это вызовет проблемы для XA, но не для обычных соединений Java JDBC. Моя теория заключается в том, что какая-то часть стека XA должна была установить соединение OCI, которое прочитало файл TNSNAMES.ORA, но затем не могло подключиться из-за несоответствия с конфигурацией прослушивателя. Обычные соединения Java JDBC не заботятся о файле TNSNAMES.ORA, поскольку они устанавливают прямое соединение с прослушивателем со своими собственными настройками конфигурации.

Мне также пришлось переименовать некоторые папки с xxx_localhost_yyy на xxx_myhost_yyy, чтобы заставить Enterprise Manager работать.

Чтобы заставить TOAD работать, мне пришлось установить 32-битный клиент, поскольку он не будет работать с 64-битным клиентом, и мне пришлось настроить его переменную ORACLE_HOME в реестре Windows в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle. По-видимому, Wow6432Node — это специальное место в реестре Windows для определения значений, которые увидят только 32-битные приложения.

Во всяком случае, я рад, что все это работает.

person Mike Hopper    schedule 14.05.2012

Хорошо, вы можете подключиться с помощью клиента sql к этой базе данных?

person souser    schedule 12.05.2012