2012-05-11 4 views
0

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

Теперь я настраиваю новую, более быструю машину (под управлением Windows 7 Professional), а приложения, отличные от XA JBoss, работают нормально, но приложения, требующие подключения 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) 

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

+0

Нет оракула jdbc в трассировке стека? – Nicholas

+0

Проверьте, открыт ли порт для подключения внешних систем и проверьте, можете ли вы подключиться к простой программе JDBC. – Phani

ответ

1

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

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

0

Ну, можете ли вы подключиться с помощью SQL-клиента к этой базе данных?

 Смежные вопросы

  • Нет связанных вопросов^_^