You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Weblogic 14.1.2.0.0:使用Foreign JNDI调用远程EJB时XA事务提交失败

环境背景

  • 两个WebLogic 14.1.2域(均命名为base_domain,分别运行在9001和8001端口)。
  • Agency域(9001端口)部署了一个MDB,该MDB执行以下操作:
    1. 从本地XA队列消费消息;
    2. 向多个表写入数据(使用XA数据源);
    3. 通过Foreign Server(FactoryConnectionAirline → jmsremote/connectionFactoryAirline(本地JNDI)→ jms/connectionFactory(远程JNDI))向Airline域(8001端口)的远程队列发送消息。

整个流程需作为单个XA/两阶段提交事务执行。

已尝试的解决方案

  1. 跨域安全配置
    • 两个域均设置CrossDomainSecurityEnabled = true;
    • 将用户xdUser添加到CrossDomainConnectors组;
    • 双向创建凭据映射,执行命令:
      createCredMapCredential('base_domain', 'xdUser', 'xdUser', 'password1$', 'Cross-domain')
      
    • 日志显示:
      <Security> Cross-domain authentication succeeded for user xdUser from domain base_domain
      
  2. 远程连接工厂(Airline域)
    • 设置One-Way Send Mode = disabled;
    • 设置One-Way Window Size = 1;
  3. 本地连接工厂(Agency域)
    • 设置Blocking Send Policy = Block;
  4. JMS存储
    • 设置Synchronous Write Policy = Direct-Write;
    • 队列和存储部署在本地SSD上;
  5. 所有数据源均设置为两阶段提交;无LLR数据源;
  6. 将JTA超时时间增加至120秒;
  7. 启用DebugJTA2PC, DebugJTAXA, DebugJMSStore进行跟踪;

问题现象

执行commit操作时仍出现以下错误:

<2025年7月15日 中欧夏令时下午1:01:49,284> <错误> <EJB> <BEA-010026> <事务提交期间发生异常,事务名称=[EJB domainevent.consumer.DomainEventConsumerOrchestator.onMessage(javax.jms.Message)],Xid=BEA1-00087BE481DF3057A4BD(341918243),状态=已回滚。[原因=javax.transaction.SystemException: 仅当没有等待响应的请求时才能提交。当前存在一个此类请求],numRepliesOwedMe=1,numRepliesOwedOthers=0,事务开始后秒数=0,剩余秒数=30,useSecure=false,XAServerResourceInfo[WLStore_base_domain__WLS_AdminServer]=(ServerResourceInfo[WLStore_base_domain__WLS_AdminServer]=(state=rolledback,assigned=AdminServer),xar=WLStore_base_domain__WLS_AdminServer598849144,re-Registered = false),SCInfo[base_domain+AdminServer]=(state=rolledback),properties=({weblogic.transaction.name=[EJB domainevent.consumer.DomainEventConsumerOrchestator.onMessage(javax.jms.Message)]}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=AdminServer+172.21.48.1:9001+base_domain+t3+ CoordinatorNonSecureURL=AdminServer+172.21.48.1:9001+base_domain+t3+ coordinatorSecureURL=null, XAResources={PoolAgencyErrorQueue_base_domain, PoolMsaCountry_base_domain, WSATGatewayRM_AdminServer_base_domain, PoolMsaTravel_base_domain, PoolMsaUser_base_domain, WLStore_base_domain__WLS_AdminServer, PoolMsaTypeUser_base_domain, PoolMTAAgency_base_domain},NonXAResources={})],CoordinatorURL=AdminServer+172.21.48.1:9001+base_domain+t3+): weblogic.transaction.RollbackException: 仅当没有等待响应的请求时才能提交。当前存在一个此类请求
        at weblogic.transaction.internal.TransactionImpl.throwRollbackException(TransactionImpl.java:2122)
        at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:384)
        at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:270)
        at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:487)
        at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDListener.java:370)
        at weblogic.ejb.container.internal.MDListener.onMessage(MDListener.java:306)
        at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:5172)
        at weblogic.jms.client.JMSSession.execute(JMSSession.java:4820)
        at weblogic.jms.client.JMSSession.executeMessage(JMSSession.java:4214)
        at weblogic.jms.client.JMSSession$UseForRunnable.run(JMSSession.java:5707)
        at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:691)
        at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)
        at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)
        at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:60)
        at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)
        at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:665)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:430)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:370)
Caused by: javax.transaction.SystemException: 仅当没有等待响应的请求时才能提交。当前存在一个此类请求
        at weblogic.transaction.internal.TransactionImpl.abort(TransactionImpl.java:1305)
        at weblogic.transaction.internal.TransactionImpl.enforceCheckedTransaction(TransactionImpl.java:2051)
        at weblogic.transaction.internal.TransactionImpl.checkIfCommitPossible(TransactionImpl.java:2028)
        at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:295)
        ... 16 more
.>

内容的提问来源于stack exchange,提问作者Jose Villacres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 16:58:11