我们正在使用 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=true
XATransactionTimeout=0
但没有奏效。
我们还尝试(很多)调整数据源的配置,最终删除其中一个,因此我们只需要调整其中一个,但没有任何效果。
此外,在反复调整配置时,我们发现了一个不同的 SQLException 并开始弹出,而不是之前的:
Internal error: Cannot obtain XAConnection weblogic.common.resourcepool.ResourceDisabledException: Pool X is Suspended, cannot allocate resources to applications
现在这个更令人沮丧,因为我们尝试了一切;重置数据源;删除并重新创建;删除并使用不同的名称重新创建;删除域并使用不同的数据源名称重新创建;使用 dvlp DB 返回;但没什么,例外似乎仍然存在。
我们真的不知道如何解决这个问题,如果不解决这个问题,我们就无法继续前进。