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

如何在Jpos-template中通过XML配置切换LOCAL/UAT交易参与者

无需修改Java代码实现参与者切换的XML配置方案

你可以通过jPOS内置的SelectParticipant或ConditionalParticipant来实现根据上下文属性动态切换LOCAL/UAT参与者,无需修改任何Java代码,仅需调整XML配置:

方案1:SelectParticipant(推荐,配置简洁)

该参与者可直接根据TransactionContext中的属性值匹配对应的目标参与者,适合简单的键值匹配场景:

<txnmgr class="org.jpos.transaction.TransactionManager" logger="Q2">
    <property name="queue" value="TXNMGR"/>
    <property name="sessions" value="10"/>
    <property name="max-sessions" value="100"/>

    <!-- 根据上下文属性environment的值选择参与者 -->
    <participant class="org.jpos.transaction.participant.SelectParticipant">
        <!-- 指定上下文里用来区分环境的属性键 -->
        <property name="key" value="environment"/>
        <!-- 属性值为LOCAL时,执行name为LOCAL的参与者 -->
        <property name="LOCAL" value="LOCAL"/>
        <!-- 属性值为UAT时,执行name为UAT的参与者 -->
        <property name="UAT" value="UAT"/>
    </participant>

    <participant name="LOCAL" class="com.sanjok.qbean.RestParticipant">     
        <property name="server-signature-public-key" value="***"/>
        <property name="server-encryption-public-key" value="***"/>
        <property name="base64-client-signature-private-key" value="***"/>
        <property name="base64-client-encryption-private-key" value="***"/>               
    </participant>
    
    <participant name="UAT" class="com.sanjok.qbean.RestParticipant">     
        <property name="server-signature-public-key" value="***"/>
        <property name="server-encryption-public-key" value="***"/>
        <property name="base64-client-signature-private-key" value="***"/>
        <property name="base64-client-encryption-private-key" value="***"/>               
    </participant>

    <participant class="org.jpos.transaction.participant.SendResponse">        
    </participant>
</txnmgr>
  • 注意:确保你的TransactionContext中存在environment属性,值为LOCAL或UAT。如果需要基于ISO消息字段判断,可先通过ISOMsgParticipant将消息域存入上下文,再用SelectParticipant匹配。

方案2:ConditionalParticipant(灵活支持复杂条件)

如果需要多分支、范围判断等复杂逻辑,可使用该参与者结合EL表达式:

<txnmgr class="org.jpos.transaction.TransactionManager" logger="Q2">
    <property name="queue" value="TXNMGR"/>
    <property name="sessions" value="10"/>
    <property name="max-sessions" value="100"/>

    <!-- 基于EL表达式的条件判断 -->
    <participant class="org.jpos.transaction.participant.ConditionalParticipant">
        <!-- 条件:上下文environment字段等于LOCAL -->
        <property name="if" value="${ctx.environment == 'LOCAL'}"/>
        <!-- 满足条件时执行LOCAL参与者 -->
        <property name="then" value="LOCAL"/>
        <!-- 否则执行UAT参与者 -->
        <property name="else" value="UAT"/>
    </participant>

    <participant name="LOCAL" class="com.sanjok.qbean.RestParticipant">     
        <property name="server-signature-public-key" value="***"/>
        <property name="server-encryption-public-key" value="***"/>
        <property name="base64-client-signature-private-key" value="***"/>
        <property name="base64-client-encryption-private-key" value="***"/>               
    </participant>
    
    <participant name="UAT" class="com.sanjok.qbean.RestParticipant">     
        <property name="server-signature-public-key" value="***"/>
        <property name="server-encryption-public-key" value="***"/>
        <property name="base64-client-signature-private-key" value="***"/>
        <property name="base64-client-encryption-private-key" value="***"/>               
    </participant>

    <participant class="org.jpos.transaction.participant.SendResponse">        
    </participant>
</txnmgr>
  • 说明:ctx代表TransactionContext对象,可根据实际需求修改表达式,比如判断ISO消息域:${iso.get(70) == '001'}(域70值为001时走LOCAL)。

关于JSParticipant的说明

JSParticipant也能实现需求,它允许嵌入JSP脚本逻辑,但配置繁琐,仅推荐用于极复杂的判断场景,示例如下:

<participant class="org.jpos.transaction.participant.JSParticipant">
    <property name="script"><![CDATA[
        <% 
            String env = (String) ctx.get("environment");
            if ("LOCAL".equals(env)) {
                setParticipant("LOCAL");
            } else if ("UAT".equals(env)) {
                setParticipant("UAT");
            }
        %>
    ]]></property>
</participant>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:17:22