Weblogic 应用服务器中的主要 SQLException(XA 相关)

Posted

技术标签:

【中文标题】Weblogic 应用服务器中的主要 SQLException(XA 相关)【英文标题】:Major SQLException (XA related) in Weblogic application Server 【发布时间】:2012-06-20 08:55:51 【问题描述】:

我们正在使用 Weblogic 应用服务器 (12.1.1.0) 开发软件;我们有一个域和两个应用程序。

我们刚刚从开发数据库升级到预生产数据库(类似于生产),哦,天哪,我们遇到了一个重大问题...... DBA 说数据库运行的是相同的版本——Oracle 11(我不记得确切的版本)。我们可以看到的唯一区别是 dvlp DB 使用 SID 进行连接,而另外两个使用 service-name。

现在,在我们的域中,我们有两个数据源 X 和 Y。两者都连接到同一个数据库。我们在两者上都使用 XA 驱动程序。我们的两个应用程序都使用相同的“persistence.xml”(和实体),它有两个 PU(持久性单元),每个都使用不同的数据源(X 和 Y)。

问题是这样的:

    MDB 开始处理请求。 它使用带有 EntityManagers 的 PU 和带有 DataSource 接口的 Y 数据源,用于获取连接(我们有一些 JDBC 代码)。 它从其他应用程序调用一个 bean。 另一个 bean 尝试使用其中一个 PU(连接到 X 数据源的那个)。

    抛出 SQLException:

    XA error: XAResource.XAER_NOTA start() failed on resource 'x_my_domain': XAER_NOTA : The XID is not valid

我们在网上搜索了错误,发现我们应该将数据源的配置更改为XASetTransactionTimeout=trueXATransactionTimeout=0 但这没有用。

我们还尝试(很多)调整数据源的配置,最终删除其中一个,因此我们只需要调整其中一个,但没有任何效果。

此外,在反复调整配置时,我们发现了一个不同的 SQLException 并开始弹出:

Internal error: Cannot obtain XAConnection weblogic.common.resourcepool.ResourceDisabledException: Pool X is Suspended, cannot allocate resources to applications

现在这个更令人沮丧,因为我们尝试了所有方法;重置数据源;删除并重新创建;删除并使用不同的名称重新创建;删除域并使用不同的数据源名称重新创建;使用 dvlp 数据库返回;但没什么,异常似乎仍然存在。

我们真的不知道如何解决这个问题,如果不解决这个问题,我们就无法继续前进。

【问题讨论】:

【参考方案1】:

我们终于找到了解决问题的方法,但要回答这个问题,我必须更多地解释一下我们的环境;我们实际上有两台托管服务器,每个应用程序都在另一台服务器上运行。 admin-server 和其中一个 MS 在一台机器上运行,另一个 MS 在另一台机器上运行(共两台机器)。

问题是,当我们修改了另一个 MS 也使用的数据源 (X) 时,我们没有重新启动另一个 MS,而只是重新启动了数据源。我们猜测这导致数据源没有更新其他 MS 上的新修改,这导致了我们遇到的错误。

这个问题是由一个相当愚蠢的原因引起的,但很难发现它,因为它在管理服务器 + 第一个 MS 部分的任何环境设置中反复出现,即使在我们自己的 PC 上只设置了一个管理服务器没有机器的定义。它仍然发生的原因是因为包含另一个应用程序的机器的地址是写在代码中的(从 XML 配置中读取,但这并没有太大变化)。

好吧,很高兴这一切都结束了。

【讨论】:

以上是关于Weblogic 应用服务器中的主要 SQLException(XA 相关)的主要内容,如果未能解决你的问题,请参考以下文章

系列5使用Dockerfile创建带weblogic的Centos Docker镜像

WebLogic中的一些基本概念

weblogic_server103.c的安装及配置

weblogic 集群出现socket错误,导致应用服务器无法启动

Weblogic的架构

什么是国外 JMS 提供者? Weblogic 在 JMS 应用程序中的典型作用是什么?