2012-06-20 40 views
1

我们正在开发带有Weblogic应用服务器(12.1.1.0)的软件;我们有一个域和两个应用程序。我们刚刚从开发数据库移动到预生产数据库(类似于生产),噢,我们有一个重大问题去...
DBA说数据库运行相同的版本 - 甲骨文公司11(我不记得确切的版本)。我们唯一的区别是dvlp数据库使用SID进行连接,另外两个使用服务名称。Weblogic应用服务器中的主要SQLException(与XA相关)服务器

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

问题是这样的:

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

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

我们搜查了错误在线,我们发现,我们应该在数据源配置更改为
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;但没有什么,例外似乎仍然存在。

我们真的不知道如何解决这个问题,如果没有解决这个问题,我们不能再进行下去。

回答

0

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

问题是,当我们修改其他MS使用的数据源(X)之一时,我们没有重新启动其他MS,但只重新启动了数据源。我们猜测这导致数据源不能通过其他MS上的新修改进行更新,这导致了我们遇到的错误。

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

好吧,很高兴结束了。