`
honno
  • 浏览: 57316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩展camel功能,使它支持SDO

阅读更多

背景


      camel 已经具备了通过多种方式(在camel中称为language )访问exchange的header、property和body,比如
bean,constant,simple,xpath,jxpath,ognl,mvel,scripting等。这些方式可以很容易地操作exchange的内容。如果exchange中包含的内容是一个sdo实例,也就是一个DataObject,那么camel如何去操作它呢?根据我们的理解,DataObject也是一个JavaBean,因为jxpath 可以直接处理JavaBean,除此之外jxpath还可以处理Map,DOM,Servlet等,所以使用jxpath不就可以操作sdo了吗?


实例分析


      下面是截取的部分exchange的内容,可以看到它的BodyType和Body。


Headers:{JMSTimestamp=1258701583453, JMSDeliveryMode=1, JMSMessageID=ID:honnom-1258701582234-0:0:1:2:1, JMSXGroupID=null,
JMSPriority=4, JMSType=null, JMSCorrelationID=null, JMSDestination=queue://in, JMSRedelivered=false, JMSReplyTo=null, JMSExpiration=0},
BodyType:com.honnom.sdo.impl.DataObjectImpl, Body:<supermarketType __type="sdo:http://www.example.com/supermarket#supermarketType" __id="0">
<Name __type="java:java.lang.String">NGS</Name><Address __type="sdo:http://www.example.com/supermarket#addressType" __id="2">
<Street __type="java:java.lang.String">ZhangJiang</Street><City __type="java:java.lang.String">ShangHai</City>
<State __type="java:java.lang.String">China</State><Zip __type="java:java.lang.String">201204</Zip></Address>
<Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list" __collectionid="1" __id="3" __index="0">
<Name __type="java:java.lang.String">Tom</Name><Gender __type="java:java.lang.String">Man</Gender><Age __type="java:java.lang.String">15</Age>
<Fee/></Customer><Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list" __collectionid="1" __id="4" __index="1">
<Name __type="java:java.lang.String">Jim</Name><Gender __type="java:java.lang.String">Man</Gender><Age __type="java:java.lang.String">25
</Age><Fee/></Customer><Customer __type="sdo:http://www.example.com/supermarket#customerType" __collection="list"
__collectionid="1" __id="5" __index="2"><Name __type="java:java.lang.String">Jessica</Name><Gender __type="java:java.lang.String">Woman</Gender>
<Age __type="java:java.lang.String">15</Age> <Fee/></Customer></supermarketType>


      配置camle-config.xml的路由规则:<when><jxpath>in/body/Customer[3]/Age &lt;= 16</jxpath><to uri="jms:queue:honnom" /></when> 。这个规则的意思是如果该exchange的body内容中的Customer[3]的Age的值小于或等于16,那么会将该exchage发送到队列honnom。

      运行结果是队列honnom上没有接收到任何消息,也就是说jxpath认为该消息不符合该表达式,但从exchange的Body可以看到Customer[3]的Age值为15,小于16 ,应该是符合jxpath表达式的。所以jxpath不能正确的路由sdo。

解决方案

 

     为了解决这个问题,必须实现一个新的组件来支持对sdo的解析,在此命名为camle-sxpath。实现该组件的主要内容包括如下。

     1.在camel-config.xml中新增<expath> 元素。<expath> 表示将使用camle-sxpath解析exchange。

     2.实现EXPathLanguage.java,支持expression和predicate。

     3.实现EXPathExpression.java,支持对expression和predicate的evaluate。

     4.在SDL中支持expath()方法。


实现效果

 

    将上文提到的路由规则修改为<when><expath>in/body/Customer[3]/Age &lt;= 16</expath><to uri="jms:queue:honnom" /></when> 即可。可以在队列honnom上接收到该消息,说明对camle-sxpath的实现初步完成。

分享到:
评论

相关推荐

    Camel in action(camel实战)

    - Camel 提供了强大的测试支持,使开发者能够在开发过程中进行充分的单元测试和集成测试。 **2. 错误处理** - Camel 包含了一整套错误处理机制,帮助开发者在遇到异常情况时优雅地处理错误,确保系统的稳定性和...

    camel in action 中文版 第一章

    Camel 打破了传统模式,它支持 80 多种不同的协议和数据类型,它的扩展性和模块性允许你实现你自己专有协议的无缝插件。 1.2.1 为什么使用 Camel Camel 为整합领域介绍了一些新奇的观点,这就是为什么它的作者们...

    Camel服务集成,服务编排操作文档

    Apache Camel 是一个强大的开源框架,专门用于构建企业级应用程序中的集成解决方案。它提供了一种声明式的方式来进行...在实践中,结合具体的业务场景和需求,灵活运用Camel的特性,将使应用程序更加健壮和易于扩展。

    apache camel 集成组件 教程

    4. **可扩展性:** 开发者可以根据需要扩展 Camel 的功能,比如创建自定义的组件或处理器。 5. **异步处理:** Camel 支持非阻塞的消息处理模式,有助于提高系统的吞吐量和响应速度。 6. **容错与重试机制:** Camel...

    [Camel实战].(Camel.in.Action).Claus.Ibsen&Jonathan;.Anstey.文字版

    - **定义**:Apache Camel 是一个强大的开源框架,它使开发者能够轻松地实现企业级集成模式(Enterprise Integration Patterns, EIP)。该框架提供了简洁而强大的领域特定语言(Domain-Specific Language, DSL),...

    ApacheCamel-JDBC

    Apache Camel 的 JDBC 组件就是将这两个强大的工具结合在一起,使开发者能够方便地在Camel路由中执行SQL查询和操作数据库。 在"Apache Camel-JDBC"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **Apache ...

    Apache Camel中文开发使用指南.zip

    7. **分布式系统集成**:Camel的异步处理和负载均衡特性使其在分布式系统中表现出色。配合Camel的云组件,可以轻松实现微服务之间的通信。 8. **事件驱动架构**:Apache Camel可以通过事件驱动的方式工作,结合消息...

    matlab的6驼峰功能的实现六驼峰CAMEL功能说明:外形尺寸

    matlab的6驼峰功能的实现六驼峰CAMEL功能说明:外形尺寸:2左边的图显示了在其推荐的输入域的六驼峰骆驼功能,并且在右边的图显示了该结构域的仅一部分,以允许更容易地观看的功能键的特性。该函数有六个地方很小,...

    camel文档

    - **扩展策略**:讨论如何根据业务需求来扩展Camel应用,以支持更大的负载。 - **第11章:开发Camel项目** - **项目结构**:介绍如何组织Camel项目的结构,以便于维护和扩展。 - **开发工具**:推荐一些常用的...

    Camel_Camel3Camel6函数_

    Camel6函数则是扩展了三峰骆驼函数,增加了一个额外的峰,使其具有四个局部极值点,增加了寻找全局最小值的难度。其数学形式可能为: ``` f(x) = a * (x^2 - b*x)^4 + c * (x^2 - d*x)^2 + e ``` 这里,`a`, `b`, ...

    camel-manual-2.10.4.pdf

    Apache Camel是一个基于已知企业集成模式的多功能开源集成框架。它提供了一种灵活的方式来定义路由和调解规则,支持多种特定领域的语言,包括基于Java的Fluent API、Spring或Blueprint XML配置文件以及Scala DSL。这...

    ApacheCamel-FTP

    总的来说,Apache Camel FTP 组件是构建基于文件传输的集成解决方案的强大工具,通过其丰富的功能和易于使用的 API,能够简化开发工作,提升系统的可维护性和扩展性。结合提供的示例,你可以深入学习并掌握如何在...

    apache-camel-3.7.0_数据同步_

    9. **扩展性和灵活性**:Apache Camel 的设计允许用户轻松添加自定义组件或扩展已有组件,适应各种特定需求。 在压缩包文件“apache-camel-3.7.0”中,可能包含了Apache Camel 3.7.0版本的完整源码、文档、示例项目...

    camel-manual-2.8.0

    其基于企业集成模式的设计理念,结合对多种传输层和消息模型的支持,以及与主流框架的无缝集成,使其成为开发高效、可扩展的集成系统时的理想选择。此外,其丰富的测试支持和详尽的文档资源,为开发者提供了全面的...

    Camel in action PDF和源代码

    Apache Camel是一款流行的开源项目,它提供了一种声明式的方式来进行企业应用集成。该框架的核心概念是“路由规则”(Routes),这些规则定义了数据流如何在不同系统间传输。Camel支持大量协议和API,包括HTTP、JMS...

    apache-camel-demo

    领域特定语言意味着Apache Camel支持你在的集成开发工具中使用平常的,类型安全的,可自动补全的Java代码来编写路由规则,而不需要大量的XML配置文件。同时,也支持在Spring中使用XML配置定义路由和中介规则。 在...

    Camel in Action ch1

    - 探讨Bean的生命周期管理以及如何利用Beans来扩展Camel的功能。 - **第五章:Error Handling**(错误处理) - 提供详细的错误处理策略,以确保系统的稳定性和可靠性。 - 探讨异常处理机制、重试策略等。 - **第...

    Camel.in.Action

    3. **灵活且可扩展**:用户可以轻松地扩展Camel的功能,以适应各种不同的应用场景。 4. **广泛的组件支持**:Camel内置了大量组件,可以与各种不同的技术栈进行无缝集成。 5. **强大的社区支持**:活跃的社区确保了...

    Manning.Camel.in.Action

    《Manning.Camel.in.Action》一书由Claus Ibsen和Jonathan Anstey共同撰写,是Manning Publications出版的一部深入探讨...通过本书的学习,你将能够充分利用Camel的强大功能,构建出高效、可扩展的企业级集成解决方案。

    camel in action@

    Apache Camel是一个流行的开源Java库,它提供了强大的路由和消息转换功能,使得在分布式系统中处理数据和实现组件间的通信变得更加简单。 本书深入浅出地介绍了Camel的核心概念,包括路由规则(DSL)、组件、数据...

Global site tag (gtag.js) - Google Analytics