开源ESB引擎Mule初印象

[url=http://mule.codehaus.org]Mule[/url] is the leading open source ESB (Enterprise Service Bus) and integration platform. It is a scalable, highly distributable
object broker that can seamlessly handle interactions with services and applications using disparate transport and messaging
technologies。
[img]http://mule.codehaus.org/download/attachments/1401/mule_esb.gif[/img]
在这里我们简单看看如何用Mule发布和调用Web服务,体验一下Mule的简洁和高效。

[b]安装Mule[/b]
去[url=http://mule.codehaus.org/display/MULE/Download]Mule官方下载页[/url]下载最新的Full版zip文件,解压到一个目录。
运行一下MULE_HOME\examples\maven\echo目录下的echo.bat,则mule会自动下载合适版本的activation.jar和mail.jar到MULE_HOME\lib\user目录
echo.bat示例了一个command prompt下的echo程序,该程序会echo你在命令行输入的字符串。

[b]创建Eclipse项目[/b]
我们在Eclipse下新建命名为mule的Java project,其中包结构如下:
[code]
mule
src-demo
cn.hidetoishandsome.mule.demo
EchoService.java
IEchoService.java
images
mule-banner.gif
WEB-INF
lib
mule-echo-config.xml
web.xml
contents.html
echo.jsp
header.html
index.html
welcome.html
[/code]
将MULE_HOME\lib\mule目录和MULE_HOME\lib\opt目录下所有的jar包以及MULE_HOME\lib\user目录下的activation.jar和mail.jar统统扔到WEB-INF\lib目录下。
其中mule-banner.gif、contents.html、header.html、index.html、welcome.html等来自将MULE_HOME\examples\ant\webapp目录下的build.xml用ant
build后在build目录下生成的mule-example-webapp.war中的文件。
在这里我们修改该mule-example-webapp.war工程来demo一下使用Mule发布和调用Web服务。

[b]写我们要发布的服务[/b]
上面列出的IEchoService.java为我们要发布的服务的接口,该接口约束了我们要发布的服务:
[code]
package cn.hidetoishandsome.mule.demo;

public interface IEchoService {
String echo(String s);

String haha(String s);
}
[/code]
如上,我们将使用该接口发布echo和haha这两个服务。现在写我们的服务实现类EchoService.java(系统集成时可能实现已经存在,我们只需抽离要
发布的服务的窄接口即可):
[code]
package cn.hidetoishandsome.mule.demo;

public class EchoService implements IEchoService {

public String echo(String s) {
return "Hello, " + s + "!";
}

public String haha(String s) {
return "haha";
}

public String hehe(String s) {
return "hehe";
}
}
[/code]
可以看到,虽然我们的EchoService提供了echo/haha/hehe三个服务,但我们使用IEchoService来约束它,从而只发布其中的echo和haha这两个服务。

[b]配置使我们的服务以Web Service发布[/b]
首先我们修改web.xml来让servlet容器listen和mapping一些东西:
[code]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Mule</display-name>
<description>Mule Demo</description>

<context-param>
<param-name>org.mule.config</param-name>
<param-value>/WEB-INF/mule-echo-config.xml,</param-value>
</context-param>

<listener>
<listener-class>org.mule.config.builders.MuleXmlBuilderContextListener</listener-class>
</listener>

<servlet>
<servlet-name>muleServlet</servlet-name>
<servlet-class>org.mule.providers.http.servlet.MuleReceiverServlet</servlet-class>
<load-on-startup/>
</servlet>

<servlet-mapping>
<servlet-name>muleServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
[/code]
然后我们配置mule-echo-config.xml来以Web Service方式发布我们的服务:
[code]
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN"
"http://mule.mulesource.org/dtds/mule-configuration.dtd">

<mule-configuration id="Mule_Demo" version="1.0">
<mule-descriptor name="echoService" implementation="cn.hidetoishandsome.mule.demo.EchoService">
<inbound-router>
<endpoint address="xfire:http://localhost:8181/services"/>
</inbound-router>
<properties>
<list name="serviceInterfaces">
<entry value="cn.hidetoishandsome.mule.demo.IEchoService"/>
</list>
</properties>
</mule-descriptor>
</mule-configuration>
[/code]
这里我们的echoService实现为cn.hidetoishandsome.mule.demo.EchoService,inbound-router中<endpoint address="xfire:http://localhost:8181/services"/>表示我们以xfire发布我们的服务到本机该端口的services这个context下,而serviceInterfaces的entry表示我们使用IEchoService
来约束我们要发布的服务接口。

[b]运行和调用服务[/b]
让我们将该mule项目在Tomcat中跑起来看看效果吧。
例如配置Tomcat的server.xml,在<Host>标签中加入<Context path="/mule" docBase="D:\project\mule" reloadable="true" />
启动Tomcat,打开浏览器访问[url]http://localhost:8181/services/echoService?wsdl[/url]可以看到Mule通过xfire自动生成的wsdl文档,其中
我们可以看到Mule只暴露了EchoService和echo和haha方法,而没有暴露hehe方法。
现在我们在echo.jsp中利用Mule的UMO(Universal Message Object)API写对我们刚发布的Web服务的客户端调用:
[code]
<%@ page import="org.mule.extras.client.MuleClient, org.mule.umo.UMOMessage"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<html>
<head>
<title>Mule Echo Example</title>
</head>
<body>
<%
String s = request.getParameter("name");
if(s!=null) {
MuleClient client = new MuleClient();
UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=echo", s, null);
%>
<h3><%=message.getPayload()%></h3>
<%}%>
Please enter your name:
<form method="POST" name="submitEcho" action="">
<table>
<tr><td>
<input type="text" name="name"/></td><td><input type="submit" name="Go" value=" Go " />
</td></tr>
</table>
</form>
<p/>
</body>
</html>
[/code]
好了,用浏览器访问[url]http://localhost:8080/mule[/url]并点击左侧菜单的Echo链接,或者直接访问[url]http://localhost:8080/mule/echo.jsp[/url],然后在input框输入一些文本内容如"Hideto",点击Go,则你会看到页面返回"Hello, Hideto!"。
现在让我们修改echo.jsp,将UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=echo", s, null);
这段代码中的method改为haha,即:
[code]
UMOMessage message = client.send("xfire:http://localhost:8181/services/echoService?method=haha", s, null);
[/code]
然后刷新一下浏览器页面,再输入一些文本内容,看看页面是不是返回"haha"字样了?
企业服务总线(EnterpriseServiceBus,ESB) 企业服务总线(EnterpriseServiceBus,ESB)是构建基于面向服务体系结构(SOA)解决方案时所使用基础架构的关键部分,是由中间件技术实现并支持SOA的一组基础架构功能。ESB支持异构环境中的服务、消息,以及基于事件的交互,并且具有适当的服务级别和可管理性。简而言之,ESB提供了连接企业内部及跨企业间新的和现有软件应用程序的功能,以一组丰富的功能启用管理和监控应用程序之间的交互。在SOA分层模型中,ESB用于组件层以及服务层之间,它能够通过多种通信协议连接并集成不同平台上的组件将其映射成服务 阅读详情

相关推荐

五大开源ESB项目

ESB,英文全称Enterprise Service Busses(直译为企业级服务列车),是一种可以让你在Web服务上创建运行在不同平台上的商务流程的软件。 下面列出五大开源ESB项目,排名不分先后: JBoss ESB(JBoss)   在GA版本中有着成熟的组件,没有厂商绑定之类的特征。 Apache ServiceMix(Apache)   A

MyDriverC 5359

ESB工具比较

最近想学习了解下ESB 就从网上转载了下:各种ESB产品比较  ESB产品一览表包括商业和开源: 类型 产品 公司 商业 Oracle Service Bus (OSB) Oracle Oracle Enterprise Service Bus (ESB) WebSphere Enterprise Service Bus IBM WebSphere M...

iteye_13479的博客 2023

Mule,目前综合状态最良好的开源ESB方案引文

Mule,目前综合状态最良好的开源ESB方案收藏 http://blog.csdn.net/zhangliulin/archive/2007/10/16/1826703.aspx 新一篇:设计一个美好的服务器--MINA、CXF、Mule、JBoss/Geronimo |旧一篇:ESB综述2:ESB使用案例 原文地址:http://blog.csdn.net/cal...

weixin_30312659的博客 647

java 开源esb_五大开源ESB项目

【51CTO快译】ESB,英文全称Enterprise Service Busses(直译为企业级服务列车),是一种可以让你在Web服务上创建运行在不同平台上的商务流程的软件。JBoss ESB(JBoss)在GA版本中有着成熟的组件,没有厂商绑定之类的特征。Apache ServiceMix(Apache)Apache ServiceMix 4基于OSGi,提供了一个与XML标准集成的选项。Op...

weixin_32430941的博客 3341

java工作物品移交情况_微服务中的事件、流程和长时间运行业务

本文是讨论微服务和领域事件架构下一些需要长时间运行服务的设计问题,这些长时间运行的服务任务是因为有人工流程介入导致,比如请假需要所在部门和人事部门等两个部门领导批准,那么请假这个服务就可能需要一两天时间才能完成,因为需要两个部门领导都在电脑前且点按了批准按钮,这个请假服务流程才结束。本文关键点:1. 围绕微服务架构的讨论促进了EDA事件驱动架构思想的发展,EDA能有效地解耦服务。领域事件概念属于E...

weixin_29475449的博客 143

jBPM4工作流应用开发指南

首先十分感谢作者给我这个机会在他的作品即将问世之前做一些感想,也正好让我能在忙碌中抽空回顾一下这么多年在技术平台方面走过的路以及在Workflow方面的点点滴滴。因为本书是介绍jBPM的专业书籍,所以我谈不上给些什么评论,只是将对作者的印象和对书中内容引发的一些思考和回味分享给大家。 首先就要从我跟作者如何相识的次合作谈起了。记得那应该是2005年,我们经历了两年多搭建面向ERP项目的研发平台...

weixin_30390075的博客 60

java web 学习成长路线(1)

2:熟悉并掌握java的基础语法,类,抽象类,接口,内部类等概念3: java核心编程,如输入输出流,多线程,集合,XML,正则表达式等4:java图形化编程,如awt,swing5:java网络编程,Applet,Socket,TCP/IP,NIO等6:java高级特性,如反射,泛型,自动装箱与拆箱等二:提高阶段学习目标:java级软件工程师1:网页开发技术,如HTML,CSS,JavaScript,AJAX。

2401_84152232的博客 685

2026版企业级国产PLM供应商综合评分Excel矩阵表与量化选型指南

2026国产PLM选型指南:Excel量化评估矩阵助力企业精准决策 本文提供了一套科学的国产PLM系统选型评估体系,通过六大核心维度(研发业务闭环30%、IT架构15%、国产化适配15%、实施能力15%、TCO成本15%、标杆案例10%)构建Excel评分矩阵。重点解决企业选型中"感性决策"痛点,强调以量化数据替代主观判断,包含严谨的1-5分打分标准及权重计算公式。文章特别指出需警惕"演示幻觉"等三大选型陷阱,建议通过POC验证、跨部门协同打分等方式确保评估客观性,为

RHLPLM的博客 1380

jBPM4工作流应用开发指南-样章免费试读

[size=medium]经过近1年的辛苦创作,胡奇的[color=blue]jBPM4工作流应用开发指南[/color]就要与广大读者见面了.为了让大家能够先领略下这部作品的特点,先把本书的2章内容和目录结构.这部作品的正式出版时间预计是2010年10月中旬,将由电子工业出版社发行.欢迎各位朋友提出宝贵的意见和建议,您的意见可以EMAIL: sharepub@126.com.[/size] ...

eztec的专栏 215

开源ESB平台Mule 基本概念介绍

Mule 基本概念 最简单的说来,Mule应用通过若干像乐高积木一样的消息处理器来处理消息,这些处理器组合在一起就是一个我们称之为flow的过程。理解基本的消息结构以及flow体系是理解Mule的关键所在。本质上来讲,每一个Mule flow都包含一系列接收、传输和处理消息的构件(building block)。 本文将首先介绍Mule的flow概念,然后分解流经flow的Mul...

he91-com 562

开源ESB产品列表信息

WSO2 ESB:WSO2 ESB是一套轻量级,以XMLWeb service为核心的ESB(Enterprise Service Bus)。基于Apache Synapse和Apache Axis2项目构建。它支持connectivity,transformation,mediation和Web service交互管理。 JBossESB:ESB是SOA基础架构的一部分,而SOA并不

涂作权的博客 1884
上一篇: jQuery快速上手
下一篇: 实战Mule:利用Mule调用XFire发布的文件上传服务
hidetobj
博客等级 码龄19年 15粉丝 301原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值