我一直在研究几个JBoss应用程序,我在笔记本电脑(Windows XP)上运行所有内容,包括Oracle数据库(11g企业版)。笔记本电脑上的一切正常。
现在我正在设置一台新的,更快的机器(运行Windows 7专业版),非XA JBoss应用程序运行良好,但需要XA连接的应用程序无法连接到Oracle。我很确定这是我的新Oracle安装的问题,因为我可以将应用程序指向外部Oracle服务器并且它们可以工作,但是当它们指向我的本地Oracle数据库时它们无法连接。
我做了很多谷歌搜索,我能找到的唯一信息是我需要运行脚本$ORACLE_HOME/rdbms/admin/xaview.sql
来创建一些XA视图,我需要向用户授予以下权限: / p>
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 :(得分:1)
我能够通过确保LISTENER.ORA文件和TNSNAMES.ORA文件中的主机名和域名设置匹配来解决此问题。例如,如果一个人拥有HOST = localhost而另一个拥有HOST = myhost.xyz.com,则会导致XA出现问题,但不会导致正常的Java JDBC连接出现问题。我的理论是,XA堆栈的某些部分需要建立一个OCI连接来读取TNSNAMES.ORA文件,但由于与Listener配置不匹配而无法连接。普通Java JDBC连接不关心TNSNAMES.ORA文件,因为它们使用自己的配置设置直接连接到侦听器。
我还必须将一些文件夹从xxx_localhost_yyy重命名为xxx_myhost_yyy,以使企业管理器正常工作。
为了让TOAD工作,我必须安装32位客户端,因为它不适用于64位客户端,我必须在HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Oracle下的Windows注册表中配置它的ORACLE_HOME变量。显然,Wow6432Node是Windows注册表中的一个特殊位置,用于定义只有32位应用程序才能看到的值。
无论如何,我很放心让它全部工作。
答案 1 :(得分:0)
那么,你可以使用sql客户端连接到这个数据库吗?