




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、首先我們需要了解一下相關(guān)概念,什么SOA,什么是ESB 面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱(chēng)為服務(wù))通過(guò)這些服務(wù)之間定義良好的接口和契約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以一種統(tǒng)一和通用的方式進(jìn)行交互。這是完整的定義:1 是一個(gè)組件模型2 不同功能單元,稱(chēng)為服務(wù)3 服務(wù)之間通過(guò)接口和約定聯(lián)系起來(lái)4 接口是中立的 ESB全稱(chēng)為Enterprise Service Bus,即企業(yè)服務(wù)總線
2、。它是傳統(tǒng)中間件技術(shù)與XML、Web服務(wù)等技術(shù)結(jié)合的產(chǎn)物。ESB提供了網(wǎng)絡(luò)中最基本的連接中樞,是構(gòu)筑企業(yè)神經(jīng)系統(tǒng)的必要元素。ESB的出現(xiàn)改變了傳統(tǒng)的軟件架構(gòu),可以提供比傳統(tǒng)中間件產(chǎn)品更為廉價(jià)的解決方案,同時(shí)它還可以消除不同應(yīng)用之間的技術(shù)差異,讓不同的應(yīng)用服務(wù)器協(xié)調(diào)運(yùn)作,實(shí)現(xiàn)了不同服務(wù)之間的通信與整合。從功能上看,ESB提供了事 件驅(qū)動(dòng)和文檔導(dǎo)向的處理模式,以及分布式的運(yùn)行管理機(jī)制,它支持基于內(nèi)容的路由和過(guò)濾,具備了復(fù)雜數(shù)據(jù)的傳輸能力,并可以提供一系列的標(biāo)準(zhǔn)接口。 Servicemix是什么?Servicemix是apache發(fā)布的一種ESB。參考官方頁(yè)http:/servicemix
3、. Servicemix上服務(wù)的實(shí)現(xiàn) Servicemix上可以直接發(fā)布Webservice和POJOs之類(lèi)的程序或者模塊,也可以發(fā)布一個(gè)類(lèi)似于代理的服務(wù)。從流程上來(lái)說(shuō):Servicemix使用consumer接受到客戶(hù)request,在Servicemix的服務(wù)列表中尋找服務(wù),并且發(fā)布一個(gè)EndPoint,然后再provider中發(fā)布一個(gè)指向目標(biāo)service的服務(wù)。 Service Unit 和 Service Assembly如字面意思,service unit就是一個(gè)一個(gè)的服務(wù)單元,而service assembly是這些
4、單元的集合在servicemix上發(fā)布一項(xiàng)服務(wù),其實(shí)是發(fā)布一個(gè)服務(wù)集(SA),在這個(gè)集合中,可能存在一個(gè)或者多個(gè)服務(wù)(SU)例如,我們有一個(gè)服務(wù)需要順序使用兩個(gè)webservice,那個(gè)我們可以定義兩個(gè)SU分別對(duì)應(yīng)不同的webservice,然后使用一個(gè)SA將這兩個(gè)SU統(tǒng)合起來(lái)這樣,我們就可以調(diào)用一個(gè)暴露在外面的服務(wù)(該SA的服務(wù)),來(lái)達(dá)到使用兩個(gè)webservice的目的 本文的目標(biāo)我們的目標(biāo)是讓Servicemix充當(dāng)一個(gè)Proxy,即將一個(gè)外部的WebService發(fā)布到ServiceMix服務(wù)當(dāng)中。使得客戶(hù)可以通過(guò)調(diào)用暴露在外面的Servicemix的服務(wù)端口來(lái)調(diào)用實(shí)際上在其
5、他服務(wù)器上的 WebService。 實(shí)現(xiàn)這個(gè)目標(biāo),可以通過(guò)兩種組件完成。1,Servicemix-Http-bc2,Servicemix-CXF-bc Http-bc的優(yōu)點(diǎn)是使用范圍非常的廣,缺點(diǎn)是使用非常麻煩。也就是說(shuō)大多數(shù)組件都要我們自己定義。Cxf-bc的優(yōu)點(diǎn)是比較簡(jiǎn)單。這個(gè)組件本身集成了對(duì)現(xiàn)有大多數(shù)Soap/Http形式的支持,對(duì)于沒(méi)有特定要求的使用來(lái)說(shuō)是足夠了。 順便一提Http-se和Cxf-se,這兩個(gè)是相對(duì)于上面兩個(gè)而言的,這兩個(gè)是服務(wù)引擎,對(duì)象一般是實(shí)際的Class或者Application Servicemix的教程參考:http:
6、//tutorials.htmlCXF教程參考:/4- beginner-web-services-with-servicemix-and-cxf.html 本文使用CXF-bc來(lái)實(shí)現(xiàn),參考:/servicemix-cxf- bc.html 所需工具:apache-Servicemix-3.2.2 release (據(jù)官方說(shuō),開(kāi)源變化很大,最新的比較完備,至少需要3.2以上版本)http:/servicemix.apache.
7、org/download.htmlapache-Maven 2.0以上版本/download.htmlJDK1.5以上版本apache-axis2/axis2/download.cgiapache-tomcatapache eclipse wsdl 插件(Service Archive Wizard - Eclipse Plug-in,Code Generator Wizard - Eclipse Plug-in等)/axis2/tools/index.html 示
8、例:1,安裝好JDK,并且配置好JDK的環(huán)境變量 2,安裝好Maven,并且配置好Maven的環(huán)境變量 環(huán)境變量: M2_HOME :
9、; 解壓Maven的目錄 M2: ; &
10、#160; &nbs p;M2_HOME%/bin MAVEN_OPTS : - Xms256m -Xmx512m
11、 Path: ; %M2%
12、 3,安裝好Servicemix 測(cè)試:在CMD下,Servciemix安裝目錄下 運(yùn)行 cd bin
13、servicemix 則服務(wù)器啟動(dòng) 在http:/localhost:8192/可以看到服務(wù)器已經(jīng)在運(yùn)行。 4,安裝好Tomcat,并且配置好環(huán)境變量 5,安裝好Axis2,并且配置好環(huán)境變量 注:這里可以使用簡(jiǎn)單方式,下載Axis2的war包,直接
14、發(fā)布到Tomcat中就可以。 測(cè)試:http:/localhost:8080/下檢查新添加的Axis2服務(wù) 6,將Service Archive Wizard - Eclipse Plug-in等插件裝進(jìn)Eclipse 注:這些插件不是必要的,僅僅可以使工作變得簡(jiǎn)單一些。 7,打開(kāi)E
15、clipse并新建動(dòng)態(tài)Web工程(Eclipse需要WTP插件) 輸入Project名字HelloWorld,然后點(diǎn)擊finish 8,在新建的工程中添加class 在新建的project的src中添加一個(gè)package package名字為sample
16、60; 在該包中添加一個(gè)class Class的名字為Hello,點(diǎn)擊Finish 修改java文件的內(nèi)容如下。 9,生成wsdl文件 這里可以用Code Generator Wizard
17、- Eclipse Plug-in插件生成,也可以用其他插件生成,差別不大 以上兩種方法都可以,第二種只要按照提示來(lái)就可以了,分別是選擇class,選擇生成路徑 下面說(shuō)第一種方法 注:這里如果想測(cè)試的話,就把左上條子拉到頂,點(diǎn)擊finish
18、60; 測(cè)試:點(diǎn)擊Operations中剛剛發(fā)布Say 輸入World,看到返回值正常 10,發(fā)布webservice 發(fā)布WebService有很多種方式,可以把它直接發(fā)布Tomcat中,也可以利用Axis來(lái)發(fā)布
19、; 我們使用Axis2來(lái)發(fā)布 注意,我們要發(fā)布到Axis2中,所以我們service的address就變了,這里需要根據(jù)實(shí)際發(fā)布地址進(jìn) 行修改 例如本示例修改如上1. <wsdlsoap:address location="http:/localhost:8080/axis2/services/HelloService"/>
20、; 使用插件Service Archive Wizard - Eclipse Plug-in 點(diǎn)擊Next,然后選擇Class文件的路徑 點(diǎn)擊Next,選擇我們剛剛發(fā)布的wsdl
21、0;點(diǎn)擊Next,然后來(lái)選擇必要的jar包。 點(diǎn)擊Next,勾選自動(dòng)生成Service.xml 點(diǎn)擊Next,填選Class 點(diǎn)擊Next,填寫(xiě)發(fā)布路徑
22、; 點(diǎn)擊Finish,則在目標(biāo)路徑生成aar文件 將生成的aar文件復(fù)制到%Tomcat%/webapps/axis2/WEB-INF/services下,或者在axis2的admin頁(yè)面添 加該aar文件 默認(rèn)的用戶(hù)名是admin,密碼是axis2
23、0; 點(diǎn)擊Upload Service 將剛剛生成的wsdl發(fā)布 發(fā)布成功后,就可以在Service中找到剛剛發(fā)布HelloService 點(diǎn)擊HelloService,我們就可以看到這個(gè)服務(wù)的具體內(nèi)容,就是我們剛剛發(fā)布wsdl。
24、60; 至此,我們成功地發(fā)布了一個(gè)webservice *以上示例使用的是POJOs形式發(fā)布。 11,運(yùn)行Servicemix 運(yùn)行cmd,然后啟動(dòng)servicemix服務(wù) 等待服務(wù)完全開(kāi)啟。
25、; 當(dāng)啟動(dòng)成功之后。我們就可以在JDK的控制臺(tái)看到關(guān)于ServiceMix的服務(wù)信息 運(yùn)行 %JDK%/bin/jconsole.exe 則我們可以找到servicemix的服務(wù)已經(jīng)開(kāi)啟 點(diǎn)擊連接,則我們可以看到servic
26、emix中的所有信息,包括所有的操作及消息隊(duì)列等等,在此不多述。 12,新建一個(gè)Servicemix的組件 我們的目的是WebService,所以我們建一個(gè)Cxf-bc的組件 在任意路徑下建一個(gè)項(xiàng)目工程的目錄,示例建立的是D:/CXFHello 運(yùn)行cmd,進(jìn)入該目錄
27、160; 鍵入1. mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix- project-root -DgroupId=org.apache.servicemix.tutorial -DartifactId=tutorial-wsdl-cxf-service
28、0;用來(lái)創(chuàng)建一個(gè)標(biāo)準(zhǔn)的pom.xml 在這個(gè)pom.xml中,對(duì)于一些基本的工程配置作了設(shè)定 在我們成功建立了之后,會(huì)發(fā)現(xiàn)CXFHello文件夾下面多出了一個(gè)路徑 則我們?cè)谶@個(gè)新建的路徑下面運(yùn)行1. mvn install &
29、#160; 至此,我們已經(jīng)將這個(gè)新建的工程發(fā)布到我們的本地 Maven repository 中 下面我們建立一個(gè)CXF-BC Service Unit 在我們剛才建立的工程文件夾下面,運(yùn)行1. mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling
30、-DarchetypeArtifactId=servicemix- cxf-bc-service-unit -DgroupId=org.apache.servicemix.examples -DartifactId=my-cxf-bc-su 用來(lái)創(chuàng)建一個(gè)標(biāo)準(zhǔn)的CXF-BC-SU組件 至此,我們建議了一個(gè)標(biāo)準(zhǔn)的CXF-BC-SU組件的框子
31、60; 現(xiàn)在進(jìn)入新建的組件的文件夾。 我們看到一個(gè)pom.xml文件,這個(gè)是對(duì)這個(gè)組件進(jìn)行配置的一個(gè)文件。 打開(kāi),我們可以看到詳細(xì)內(nèi)容 現(xiàn)在我們修改這個(gè)組件的名字 &
32、#160; 將<name>A Cxf BC Service Unit</name> 改成<name>Cxf-Hello-SU</name> 然后我們需要將我們發(fā)布在Axis2上的Webservice的wsdl復(fù)制下來(lái)放入servicemix這個(gè)bc組建之中。 關(guān)于wsdl
33、文件 打開(kāi)wsdl文件,我們可以發(fā)現(xiàn),wsdl其實(shí)定義了webservice的所有規(guī)范,例如它的名字,接 口,方法,參數(shù)等等 而我們需要將wsdl復(fù)制到我們要發(fā)布的servicemix當(dāng)中,是因?yàn)槲覀儽┞冻鋈サ慕涌?,方法?參數(shù)等要能和實(shí)際服務(wù)的webservice一致。所以servicemix當(dāng)中需要一個(gè)由同樣接
34、口定義的wsdl文件 訪問(wèn) http:/localhost:8080/axis2/services/HelloService?wsdl 得到我們剛才發(fā)布的webservice的wsdl文件
35、0; 將這個(gè)wsdl文件復(fù)制到%/my-cxf-bc-su/src/main/resources 下 其實(shí)這里原本就預(yù)訂了一個(gè)wsdl文件的位置。 注意,我的wsdl名字叫做Hello.wsdl,因此,當(dāng)復(fù)制過(guò)來(lái)后,原來(lái)的service.wsdl就可以刪除了 當(dāng)然,我們也可以把剛才ecilpse
36、項(xiàng)目中生成的wsdl復(fù)制過(guò)來(lái),這是一樣的文件 現(xiàn)在我們需要修改這個(gè)復(fù)制進(jìn)來(lái)的wsdl文件 將webservice服務(wù)定義作如下替換1. <wsdl:service name="HelloServiceProxy"> 2.3.
37、 <wsdl:port binding="impl:HelloSoapBinding" name="HelloProxy"> 4.5. <wsdlsoap:address location="http:/localhost:8193/HelloWorld/"/> 6.7.
38、; </wsdl:port> 8.9. </wsdl:service> 結(jié)果如下圖 現(xiàn)在我們已經(jīng)完成了對(duì)wsdl的設(shè)定,現(xiàn)在我們需要在xbean.xml設(shè)定consumer和provider來(lái)幫定這些東西。 打開(kāi)xbean.
39、xml,作如下修改 首先,我們需要一個(gè)namespace,這個(gè)namespace要和我們引用的wsdl中的service和 endpoint的namespace一致,這樣我們才能準(zhǔn)確找到service和接口 我們的wsdl定義的targetNamespace="http:/sample"
40、0; 所以我們bc組件中的consumer和provider定義的namespace也必須和上面一樣 現(xiàn)在來(lái)定義consumer和provider,基本的定義規(guī)則參照:/servicemix-cxf-bc.html
41、 則最終修改好的文件如下 注:這里采用輕量級(jí)模式,即,將consumer和provider寫(xiě)在一個(gè)service unit內(nèi),如果想在中間加入其它程序,則可以將 consumer和provider分成兩個(gè)service unit 這樣service unit就建好了,接下來(lái)我們建立
42、service assembly 在我們的工程路目下運(yùn)行1. mvn archetype:create -DarchetypeGroupId=org.apache.servicemix.tooling -DarchetypeArtifactId=servicemix- service-assembly -DgroupId=org.apache.servicemix.examples -DartifactId=my-cxf-sa
43、 現(xiàn)在可以看到工程目錄中新建出來(lái)了SA的文件夾 同樣,我們修改一個(gè)名字 <name>Cxf-Hello-SA</name> 接下來(lái),我們要在這個(gè)SA中注冊(cè)我們剛才制作的SU1.
44、; 2. <dependencies> 3. <dependency> 4. <groupId>org.apache.servicemix.examples</groupId> 5. <artifactId>my-cxf-bc-su</artifactId> 6.
45、; <version>1.0-SNAPSHOT</version> 7. </dependency> 8. </dependencies> 9. 好了現(xiàn)在一切就緒,我們?cè)诠こ棠夸浵旅孢\(yùn)行1. mvn install 就可以建立好組件了
46、 在build successful之后,我們就可以在 %/my-cxf-sa/target 目錄下面看到我們建立好的jar包 將這個(gè)jar包復(fù)制到servicemix目錄下面的/hotdeploy文件夾,來(lái)正式發(fā)布到ser
47、vicemix當(dāng)中 如此一來(lái),我們就成功的發(fā)布了一個(gè)服務(wù)到servicemix上 下面讓我們來(lái)檢測(cè)一下成果 建立一個(gè)客戶(hù)端html如下 1. <html> 2. <hea
48、d> 3. <title>ServiceMix WSDL -First Example</title> 4. <script type="text/javascript"> 5. var urlToOpen = "http:/localhost:8193/HelloWorld/" /default URL to open 6.7. function getHTTPObject() 8.
49、60; var xmlhttp = false; 9.10. /* Compilation conditionnelle d'IE */ 11. /*cc_on 12. if (_jscript_version >= 5) 13. try 14.
50、 xmlhttp = new ActiveXObject ("Msxml2.XMLHTTP"); 15. catch (e) 16. try 17. xmlhttp = new
51、;ActiveXObject ("Microsoft.XMLHTTP"); 18. catch (E) 19. xmlhttp = false; 20. 21. &
52、#160; 22. else 23. xmlhttp = false; 24. end */ 25.26. /* on essaie de créer l'objet si ce n'est pas déjà&nb sp;fait */ 27.
53、160;if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 28. try 29. xmlhttp = new XMLHttpRequest (); 30. catch&
54、#160;(e) 31. xmlhttp = false; 32. 33. 34.35. if (xmlhttp) 36. /* on définit ce qui doit se passer
55、160;quand&nbs p;la page répondra */ 37. xmlhttp.onreadystatechange=function() 38. if (xmlhttp.readyState = 4) /* 4 : état "complete&quo
56、t; */ 39. var response = document.getElementById ("response"); 40. var responseStatus = "" 41.
57、 try 42. responseStatus = xmlhttp.status + "" 43. catch (e)
58、60; 44. responseStatus = "ERROR WHILE RETRIEVING STATUS; MAYBE UNABLE TO CONNECT." 45. 46.
59、60; response.value = "STATUS: " + responseStatus + "/n" + xmlhttp.responseText; 47. 48. 49.
60、0; 50. return xmlhttp; 51. 52.53. function send() 54. if (document.getElementById("urlToOpen").value != urlToOpen) && (document.getElementById("urlToOpen").value != "") 55. &
61、#160; /use user entry only if it at least can be oka y 56. urlToOpen = document.getElementById("urlToOpen").value; 57. 58. var xmlhttp = getHTT
62、PObject(); 59. if (!xmlhttp) 60. alert('cound not create XMLHttpRequest object'); 61. return; 62. 63. var request = document.getElementById("request");
63、 64. var response = document.getElementById("response"); 65. try 66. netscape.security.PrivilegeManager.enablePrivilege ("UniversalBrowserRead UniversalBrowserWrite"); 67. catch (e)
64、160; 68. 69. try 70. xmlhttp.open("POST", urlToOpen, true); 71. catch (e) 72. alert('error opening'); 73. 74. xmlhttp.send(request.val
65、ue); 75. 76. </script> 77. </head> 78.79. <body> 80.81. <h1>ServiceMix CXF example</h1> 82.83. <p>Welcome to the CXF example for ServiceMix</p> 84.85. <p>Perform a POST into the HTTP binding. This requires JavaScr ipt.</p> 86. <p>Target: <input type="text" size="50&quo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)備役介紹課件
- 健康飲食產(chǎn)業(yè)園項(xiàng)目運(yùn)營(yíng)管理方案(范文模板)
- 城市污水管網(wǎng)建設(shè)工程初步設(shè)計(jì)(參考模板)
- 2025年交流調(diào)頻調(diào)壓牽引裝置項(xiàng)目建議書(shū)
- 五年級(jí)上冊(cè)音樂(lè)教案(全集)
- 現(xiàn)場(chǎng)施工事故應(yīng)急救援預(yù)案制度
- 2025年新型節(jié)能水泵、風(fēng)機(jī)和壓縮機(jī)項(xiàng)目建議書(shū)
- 2025年防沉劑項(xiàng)目發(fā)展計(jì)劃
- 2025年高純工藝系統(tǒng)設(shè)備分條機(jī)項(xiàng)目建議書(shū)
- 針對(duì)2025年工業(yè)污染源全面達(dá)標(biāo)排放計(jì)劃的實(shí)施方案的環(huán)境風(fēng)險(xiǎn)評(píng)估與管理001
- 朝花夕拾考試題及答案
- 高中堅(jiān)持議論文范文7篇
- 2025年村干部公務(wù)員試題及答案
- 羊水栓塞個(gè)案護(hù)理
- 2024年萍鄉(xiāng)市縣區(qū)事業(yè)單位引進(jìn)人才筆試真題
- 2025-2030中國(guó)透明無(wú)色聚酰亞胺薄膜行業(yè)發(fā)展動(dòng)態(tài)及應(yīng)用趨勢(shì)預(yù)測(cè)報(bào)告
- (外研版3起)英語(yǔ)五年級(jí)上冊(cè)單詞字帖書(shū)寫(xiě)練習(xí)(手寫(xiě)體)高清打印版
- 一例急性心肌梗死合并糖尿病酮癥酸中毒患者的個(gè)案護(hù)理
- 胰島素注射篇課件
- 公司一年完稅證明模板
- DB5306∕T 69-2021 果樹(shù)主要實(shí)蠅害蟲(chóng)綜合防控技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論