【问题标题】:JBoss application cannot make XA connection to Oracle 11gJBoss 应用程序无法与 Oracle 11g 建立 XA 连接
【发布时间】:2012-05-11 21:23:33
【问题描述】:

我一直在开发几个 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)

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

【问题讨论】:

  • 堆栈跟踪中没有 oracle jdbc?
  • 检查端口是否开放以供外部系统连接,并检查是否可以使用简单的JDBC程序连接。

标签: oracle jboss jta xa


【解决方案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 位应用程序才能看到的值。

不管怎样,一切顺利,我很欣慰。

【讨论】:

    【解决方案2】:

    那么,你可以使用 sql 客户端连接到这个数据库吗?

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 2015-02-15
      • 2011-12-08
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多