ofbiz 的 service eca调用方式解析

ofbiz 的service eca 调用模式
1. 定义文件位置 
首先我们需要明白eca是什么? 
在执行service 的过程中,可以把调用service 的过程分为几个步骤完成。 
 开启事务 
 用户登陆验证(auth) 
 依照service定义对输入参数验证(in-validate) 
 执行service invoke(invoke) 
 依照service定义对执行结果进行输出验证(out-validate) 
 提交事务(commit) 
 返回最终结果(return) 
在执行这每个步骤之前,我们定义一个设置来运行其他一些service,这类设置就是service eca . 
service eca与service.xml 存放位置平级,都存放在对应模块的/servicedef/底下。 
2. eca定义 
2.1. 例子 
<eca service="TestServiceOnSimple" event="return"> 
        <action service="TestServiceOnJava" mode="sync" result-to-context="true" result-to-result="true" result-map-name="TestServiceOnJavaEcaName"/> 
</eca> 
如上例就是一个简单的service eca 调用.含义为,当系统调用TestServiceOnSimple这个service 执行到将要返回结果之前调用 
TestServiceOnJava这个service 
如果有设置result-map-name的值,那么系统会将service TestServiceOnJava的结果以result-map-name的值为key放进的service TestServiceOnSimple的输入参数并覆盖原来。 (即:context(TestServiceOnSimple).put(${result-map-name }, result(TestServiceOnJava));) 
,并将service TestServiceOnJava的执行结果赋到service TestServiceOnSimple 的输入参数以及service TestServiceOnSimple 的输出结果(需要将service TestServiceOnJava的输出结果依据service TestServiceOnSimple的输出定义进行过滤)。 

2.2. Eca 
: service:触发eca调用的service 名称。 
:event:触发eca调用的event 关键字,即service 调用执行的那几个步骤。这里调用eca 一那几个步骤之前,如event 的 值为commit ,那么则会在commit 之前调用eca. 

2.3. Condition、Condition-service、condition-field 
这几个都是对是否调用eca service 进行条件判断的命令。条件满足则调用eca,不满足则直接退出。 
 Condition : 参数变量与固定值进行比较。
<condition operator="equals" field-name="workEffortId" map-name="ParaMap" value="12345"/> 
详细请参考minilang 解析的 condition-expr,差不多。map-name如果有 设置 的话参数变量为ParaMap.workEffortId  。 

 condition-field :参数变量与参数变量进行比较。 
to-field-name 被比较参数变量名称,to-map-name 如果不为null ,则被 比较参数变量为${to-map-name}.${to-field-name} 

 Condition-service 
通过调用service 进行判断,如果返回结果状态码为error 则不满足条件, 
其他情况条件满足. Java service 中返回结果状态码为error有两种情况 
re.put("error", errorMsg); 
return re; 
或者 
return ServiceUtil.returnError(); 

这三个condition 和 action 组合使用。 


2.4. set 
请参考 minilang 的set . 
无论set 还是Condition、Condition-service、condition-field  所使用和操作的参数变量都是在eca 的输入参数context 中进行的。 
那么eca 的输入参数context 从哪来 ? 
假设A服务的eca action  B服务被调用,B 的参数来源会根据event 的类型决定其来源,如event为"commit "、"out-validate"、"global-commit-post-run"、"return",那么B的参数来源为A的context和A的 result ,而其他event类型则参数只来源于A服务的context。 

2.5. Action 
Eca 触发service 定义。 
result-map-name、result-to-context、result-to-result 
2.1例子中解释过了。 
:mode="sync":同步执行。mode="async"则为异步执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值