使用Servicemix(ESB)发布一个外部的WebService

一 :最近刚进公司接手一个Apache的一个开源项目ServiceMix,由于公司需要所以自己自学了一下很多资料都是自己找的供大家一起研究 。

什么是SOA?

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。而ESB是SOA

什么是ESB?

ESB全称为Enterprise Service Bus,即企业服务总线。它是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。

ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。
从功能上看,ESB提供了事 件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。

Servicemix是什么?

Servicemix是apache发布的一种ESB。

Servicemix上服务的实现
Servicemix上可以直接发布Webservice和POJOs之类的程序或者模块,也可以发布一个类似于代理的服务。

从流程上来说:Servicemix使用consumer接受到客户request,在Servicemix的服务列表中寻找服务,并且发布一个EndPoint,然后再provider中发布一个指向目标service的服务。

Service Unit  和  Service Assembly

如字面意思,service unit就是一个一个的服务单元,而service assembly是这些单元的集合

在servicemix上发布一项服务,其实是发布一个服务集(SA),在这个集合中,可能存在一个或者多个服务(SU)

例如,我们有一个服务需要顺序使用两个webservice,那个我们可以定义两个SU分别对应不同的webservice,然后使用一个SA将这两个SU统合起来

这样,我们就可以调用一个暴露在外面的服务(该SA的服务),来达到使用两个webservice的目的

本文的目标

我们的目标是让Servicemix充当一个Proxy,即将一个外部的WebService发布到ServiceMix服务当中。使得客户可以通过调用暴露在外面的Servicemix的服务端口来调用实际上在其他服务器上的 WebService。

实现这个目标,可以通过两种组件完成。

1,Servicemix-Http-bc

2,Servicemix-CXF-bc

Http-bc的优点是使用范围非常的广,缺点是使用非常麻烦。也就是说大多数组件都要我们自己定义。

Cxf-bc的优点是比较简单。这个组件本身集成了对现有大多数Soap/Http形式的支持,对于没有特定要求的使用来说是足够了。

顺便一提Http-se和Cxf-se,这两个是相对于上面两个而言的,这两个是服务引擎,对象一般是实际的Class或者Application

Servicemix的教程参考:

http://servicemix.apache.org/tutorials.html

CXF教程参考:

http://servicemix.apache.org/4- beginner-web-services-with-servicemix-and-cxf.html

本文使用CXF-bc来实现,参考:http://servicemix.apache.org/servicemix-cxf- bc.html

所需工具:

apache-servicemix-3.1.1-incubating

http://servicemix.apache.org/download.html

apache-Maven 2.0以上版本

http://maven.apache.org/download.html

JDK1.5以上版本

apache-tomcat

-----------------------------------------------------------------------------------------------------------------------

首先第一步(一)

1,安装好JDK,并且配置好JDK的环境变量,设置坏境变量。 使用JDK一共需要配置三个环境变量:java_home、classpath和path(不区分大小写)。

    1、java_home (需要变量名=java_home ,变量值=C:\Program Files\Java\jdk1.5.0)

   右击“我的电脑”,选择“属性”,点击“高级”选项卡,选择“环境变量”。进入如下对话框: 
   在变量名处填写java_home,变量值填写JDK所在目录比如C:\Program Files\Java\jdk1.5.0然后点击确定。

  2、classpath 
     可以参考java_home的配置过程,需要新建一个系统变量,不过classpath的变量名是classpath,变量值是.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径)。 
    3、path 
     path变量在系统变量中已存在,要修改path变量只需要选中path变量,点击编辑即可。在变量值中加入如下内容:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin。建议把 JDK bin 的路径放在原有 path 的最前面。因为在 %SystemRoot%\system32 中还有一个 java.exe/javaw.exe,这是 Windows 操作系统自带的那个JRE,如果我们自己装的话就不要用他默认的那个JRE 了,可以用我们自己装的。如果把 JDK bin 的 path 放在最前面的话会优先使用。  
    
     配置JAVA_HOME,CLASSPATH,PATH的目的:

     1,设置JAVA_HOME:

     JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。
     一、为了方便引用,比如,你JDK安装在C:\Program Files\Java\jdk1.6.0目录里,则设置JAVA_HOME为该目录路径, 那么以后你要使用这个路径的时候, 只需输入%JAVA_HOME%即可, 避免每次引用都输入很长的路径串;
     二、归一原则, 当你JDK路径被迫改变的时候, 你仅需更改JAVA_HOME的变量值即可, 否则,你就要更改任何用绝对路径引用JDK目录的文档, 要是万一你没有改全, 某个程序找不到JDK, 后果是可想而知的----系统崩溃!

       2.设置CLASSPATH:
        CLASSPATH环境变量的作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。这个变量设置的目的是为了程序能找到相应的".class"文件, 举个例子: 你编译一个JAVA程序---A.java, 会得到一个A.class的类文件,你在当前目录下执行java A, 将会得到相应的结果(前提是你已经设置CLASSPATH为"."). 现在, 你把A.class移到别的目录下(例如:"e:\"), 执行java A, 将会有NoClassDefFindError的异常,原因就是找不到.class文件, 现在你把CLASSPATH增加为:".;e:\"再运行java A, 看看会有什么结果~~:)~~~, 一切正常, java命令通过CLASSPATH找到了.class文件!

       3.设置PATH:
        道理很简单, 你想在任何时候都使用%JAVA_HOME%\bin\java 等来执行java命令吗, 当然不会, 于是, 你可以选择把 %JAVA_HOME%\bin添加到PATH路径下, 这样, 我们在任何路径下就可以仅用java来执行命令了.(当你在命令提示符窗口输入你个代码时,操作系统会在当前目录和PATH变量目录里查找相应的应用程序, 并且执行.)。PATH环境变量的作用是指定命令搜索路径,在dos命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如 javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

四、安装检查

       在dos窗口下,键入java -version命令可以查看到安装的JDK版本信息;键入java命令,可以看到此命令的帮助信息;键入javac命令可以看到此命令的帮助信息。如果都如愿看到,说明JDK安装成功。

 2,安装好Maven,并且配置好Maven的环境变量

        环境变量:

        M2_HOME :                        ;      解压Maven的目录 D:\apache-servicemix-3.1.1-incubating

        M2:                        ;                   %M2_HOME%\bin

        MAVEN_OPTS :                       - Xms256m -Xmx512m

        Path:                        ;                    %M2%

3,安装好Servicemix

        测试:在CMD下,Servciemix安装目录下

        同样需要配置环境变量

        SERVICEMIX_HOME                  ; D:\apache-servicemix-3.1.1-incubating

         Path:                                       ;     %SERVICEMIX_HOME %\bin

        在CMD下,Servciemix安装目录下

           运行 

            bin\servicemix

        则服务器启动

        在http://localhost:8192/可以看到服务器已经在运行。

 

4,安装好Tomcat,并且配置好环境变量

5.打开MyEclipse新建一个WebServiceProject

   

     

猜你喜欢

转载自qiailing-ok.iteye.com/blog/809327