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

时间:2012-06-20 08:55:52

标签: sql jpa jdbc weblogic xa

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

我们刚从开发DB升级到预生产DB(类似于生产),哦,我们有一个重大问题...... DBA表示DB正在运行相同的版本--Oracle 11(我不记得确切的版本)。我们唯一的区别是dvlp DB使用SID进行连接,另外两个使用service-name。

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

问题在于:

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

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

  6. 我们在线搜索错误,发现我们应该将数据源的配置更改为
     XASetTransactionTimeout=true
     XATransactionTimeout=0
    但那没用。

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

    此外,在反复调整配置的同时,不同的SQLException在我们的雷达下滑落并开始弹出而不是之前:

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

    现在这个更令人沮丧,因为我们尝试了一切;重置数据源;删除并重新创建;删除并重新创建不同的名称;删除域并使用不同的数据源名称重新创建;回去使用dvlp DB;但没有,这个例外似乎仍然存在。

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

1 个答案:

答案 0 :(得分:0)

我们终于找到了如何解决这个问题,但为了回答这个问题,我将不得不更多地解释我们的环境;我们实际上有两个托管服务器,每个应用程序在另一台服管理服务器和其中一个MS都在一台机器上运行,而另一台MS在另一台机器上运行(总共两台机器)。

事情是,当我们修改其他MS使用的其中一个数据源(X)时,我们没有重新启动另一个MS,而只重新启动数据源。我们猜测这会导致数据源不会随着其他MS上的新修改而更新,从而导致我们遇到的错误。

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

嗯,很高兴结束了。