企业基于 XML 的统一数据模型
2010-10-22 17:19:06 来源:WEB开发网这里 BranchServerCtx 被定义为 Root Context, 它包含跨渠道的数据和服务, 如后端连接,日志服务等。Java Channel Context 和 Html Channel Context 被定义为 BranchServerCtx 的子 Context, 它们包含渠道连接特性的数据如客户端类型数据。在各自渠道 Context 下,分别下挂 Session Context。它们包含的是和用户会话相关的共用数据,如客户信息,账户信息等。在通过各渠道执行交易的时候,系统在运行时动态创建交易操作的 Operation Context, 并链接到 Session Context 上。各交易的 Operation Context 如 AccountQueryCtx 和 TransferCtx 都能共享 Session Context 的数据。并通过 Session Context 共享 Channel Context 和 BranchServerCtx 的数据。
首先定义的是 branchServer Context,它是 Root Context,它包含共享的银行数据和服务资源,如下所示:
清单 6. 企业数据字典定义实例
<context id="branchServer" parent="nil" type="branch">
<refKColl refId="branchData"/>
<refService alias="CSServer" refId="realCSServer" type="cs"/>
<refService refId="CommunicationsPool" alias="pool" type="pool"/>
</context>
<kColl id="branchData">
<refData refId="BranchId"/>
</kColl>
// 然后定义渠道上下文 Channel Context, 它是父 Context 是 branchServer Context。
<context id="javaChannelCtx" parent="branchServer" type="op">
<refKColl refId="javaChannelData"/>
</context>
<kColl id="javaChannelData">
<refData refId="clientType"/>
</kColl>
// 接下来定义的是渠道会话 Context,它包含用户登录后的会话上下文操作所用到的数据如用户 ID、
客户信息、账户信息等。Session Context 在用户登录后会被创建并链接为 Channel Context
的子 Context。为了简洁起见,下面只列出了 Java 渠道的 Session Context 定义。
<context id="javaSessionCtx" type="op">
<refKColl refId="javaSessionData"/>
</context>
// 在上面会话上下文包含的是一个集合数据 javaSessionData, 它被定义为一个
KeyedCollection 如下:
<kColl id="javaSessionData">
<refData refId="TID"/>
<refData refId="UserId"/>
<refData refId="CustomerId"/>
<refData refId="CustomerName"/>
<refData refId="AccountList "/>
<refData refId="HostBuff"/>
<refData refId="sessionID"/>
</kColl>
// 在其中包含的账户信息被定义为一个账户类型数据的数组 (Indexed Collection)。
<iColl id="AccountList">
<refData refId="account "/>
</iColl>
<data id="account" refType="Account"/>
// 账户类型定义如下:
<type id="Account" implClass="com.ibm.dse.base.KeyedCollection">
<descriptor id="typeDefault"
implClass="com.ibm.dse.base.types.KCollPropertyDescriptor"/>
<dataDescriptor id="Name" refType="String"/>
<dataDescriptor id="Type" refType="String"/>
<dataDescriptor id="AccountNumber" refType="String"/>
<dataDescriptor id="Balance" refType="Amount"/>
</type>
// 最后我们需要针对交易操作定义 Operation Context, 如针对转账交易定义
transferOperationCtx。转账交易 Context 是 Session Context 的子 Context,
能共享上层链路上所有 Context 的数据。
<context id="transferOperationCtx" type="oper">
<refKColl refId="accountTransferData"/>
</context>
<kColl id="accountTransferData">
<data id="acctFrom" refType="String">
<param id="isMandatory" value="true" />
</data>
<data id="acctTo" refType="String">
<param id="isMandatory" value="true" />
</data>
<data id="amount" refType="String">
<param id="isMandatory" value="true" />
</data>
< data id="AccountBalance" refType="Money"/>
<field id="outcome" />
<field id="TrxReplyCode" />
<field id="TrxErrorMessage" />
</kColl>
通过以上的 Context 数据模型定义实例,可以看到对于企业复杂数据结构和类型的支持非常充分,并且各个层次的数据定义在逻辑上很清晰,能很好的支持数据共享,减少数据冗余,并且支持不同业务渠道的数据整合。
总结
随着企业应用复杂度增加,使用基于 XML 中间语言的统一数据模型能够降低企业数据字典的建立、维护的复杂性,为企业带来技术价值和业务价值。
文章作者根据在行业应用框架中间件的工作经验,抽象和介绍了基于 XML 中间语言的统一数据模型 Context 的架构、组件、设计原理、以及使用实例。
更多精彩
赞助商链接