0

我一直在开发几个 JBoss 应用程序,我的笔记本电脑 (Windows XP) 上运行着所有东西,包括 Oracle 数据库(11g 企业版)。在笔记本电脑上一切正常。

现在我正在设置一台速度更快的新机器(运行 Windows 7 Professional),非 XA JBoss 应用程序运行良好,但需要 XA 连接的应用程序无法连接到 Oracle。我很确定这是我的新 Oracle 安装的问题,因为我可以将应用程序指向外部 Oracle 服务器并且它们可以工作,但是当它们指向我的本地 Oracle 数据库时它们无法连接。

我做了很多谷歌搜索,我能找到的唯一信息是我需要运行脚本$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:无法创建连接;- 嵌套的 throwable: (java.sql.SQLException: Io 异常:
网络适​​配器无法建立连接)在
org.jboss.resource.adapter.jdbc.xa.XAManagedConnectionFactory.createManagedConnection(XAMangedConnectionFactory.java:144) 在
org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventLisener(InternalManagedConnectionPool.java:577) 在
org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:262) 在
org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:500) 在
org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:347) 在
org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:330) 在
org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:402) 在
org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849) 在
org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:90) 在
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46) 在
org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)

我知道这不是一个真正的编程问题,但我希望有人以前见过这个。任何帮助将非常感激。

4

2 回答 2

1

通过确保 LISTENER.ORA 文件和 TNSNAMES.ORA 文件中的主机名和域名设置匹配,我能够解决此问题。例如,如果一个有 HOST = localhost 而另一个有 HOST = myhost.xyz.com,那么它会导致 XA 出现问题,但不会导致正常的 Java JDBC 连接出现问题。我的理论是 XA 堆栈的某些部分需要建立一个读取 TNSNAMES.ORA 文件的 OCI 连接,但由于与侦听器配置不匹配而无法连接。普通的 Java JDBC 连接不关心 TNSNAMES.ORA 文件,因为它们使用自己的配置设置直接连接到侦听器。

我还必须将一些文件夹从 xxx_localhost_yyy 重命名为 xxx_myhost_yyy 才能让企业管理器工作。

为了让 TOAD 工作,我必须安装 32 位客户端,因为它不适用于 64 位客户端,我必须在 Windows 注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle 下配置它的 ORACLE_HOME 变量。显然 Wow6432Node 是 Windows 注册表中的一个特殊位置,用于定义只有 32 位应用程序才能看到的值。

无论如何,我很欣慰所有的工作。

于 2012-05-14T15:14:26.333 回答
0

那么,您可以使用 sql 客户端连接到该数据库吗?

于 2012-05-12T04:09:13.683 回答