版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、首先我們需要了解一下相關概念,什么SOA,什么是ESB 面向服務的體系結構(Service-Oriented Architecture,SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯(lián)系起來。接口是采用中立的方式進行定義的,它應該獨立于實現(xiàn)服務的硬件平臺、操作系統(tǒng)和編程語言。這使得構建在各種這樣的系統(tǒng)中的服務可以一種統(tǒng)一和通用的方式進行交互。這是完整的定義:1 是一個組件模型2 不同功能單元,稱為服務3 服務之間通過接口和約定聯(lián)系起來4 接口是中立的 ESB全稱為Enterprise Service Bus,即企業(yè)服務總線
2、。它是傳統(tǒng)中間件技術與XML、Web服務等技術結合的產(chǎn)物。ESB提供了網(wǎng)絡中最基本的連接中樞,是構筑企業(yè)神經(jīng)系統(tǒng)的必要元素。ESB的出現(xiàn)改變了傳統(tǒng)的軟件架構,可以提供比傳統(tǒng)中間件產(chǎn)品更為廉價的解決方案,同時它還可以消除不同應用之間的技術差異,讓不同的應用服務器協(xié)調運作,實現(xiàn)了不同服務之間的通信與整合。從功能上看,ESB提供了事 件驅動和文檔導向的處理模式,以及分布式的運行管理機制,它支持基于內容的路由和過濾,具備了復雜數(shù)據(jù)的傳輸能力,并可以提供一系列的標準接口。 Servicemix是什么?Servicemix是apache發(fā)布的一種ESB。參考官方頁http:/servicemix
3、. Servicemix上服務的實現(xiàn) Servicemix上可以直接發(fā)布Webservice和POJOs之類的程序或者模塊,也可以發(fā)布一個類似于代理的服務。從流程上來說:Servicemix使用consumer接受到客戶request,在Servicemix的服務列表中尋找服務,并且發(fā)布一個EndPoint,然后再provider中發(fā)布一個指向目標service的服務。 Service Unit 和 Service Assembly如字面意思,service unit就是一個一個的服務單元,而service assembly是這些
4、單元的集合在servicemix上發(fā)布一項服務,其實是發(fā)布一個服務集(SA),在這個集合中,可能存在一個或者多個服務(SU)例如,我們有一個服務需要順序使用兩個webservice,那個我們可以定義兩個SU分別對應不同的webservice,然后使用一個SA將這兩個SU統(tǒng)合起來這樣,我們就可以調用一個暴露在外面的服務(該SA的服務),來達到使用兩個webservice的目的 本文的目標我們的目標是讓Servicemix充當一個Proxy,即將一個外部的WebService發(fā)布到ServiceMix服務當中。使得客戶可以通過調用暴露在外面的Servicemix的服務端口來調用實際上在其
5、他服務器上的 WebService。 實現(xiàn)這個目標,可以通過兩種組件完成。1,Servicemix-Http-bc2,Servicemix-CXF-bc Http-bc的優(yōu)點是使用范圍非常的廣,缺點是使用非常麻煩。也就是說大多數(shù)組件都要我們自己定義。Cxf-bc的優(yōu)點是比較簡單。這個組件本身集成了對現(xiàn)有大多數(shù)Soap/Http形式的支持,對于沒有特定要求的使用來說是足夠了。 順便一提Http-se和Cxf-se,這兩個是相對于上面兩個而言的,這兩個是服務引擎,對象一般是實際的Class或者Application Servicemix的教程參考:http:
6、//tutorials.htmlCXF教程參考:/4- beginner-web-services-with-servicemix-and-cxf.html 本文使用CXF-bc來實現(xiàn),參考:/servicemix-cxf- bc.html 所需工具:apache-Servicemix-3.2.2 release (據(jù)官方說,開源變化很大,最新的比較完備,至少需要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 測試:在CMD下,Servciemix安裝目錄下 運行 cd bin
13、servicemix 則服務器啟動 在http:/localhost:8192/可以看到服務器已經(jīng)在運行。 4,安裝好Tomcat,并且配置好環(huán)境變量 5,安裝好Axis2,并且配置好環(huán)境變量 注:這里可以使用簡單方式,下載Axis2的war包,直接
14、發(fā)布到Tomcat中就可以。 測試:http:/localhost:8080/下檢查新添加的Axis2服務 6,將Service Archive Wizard - Eclipse Plug-in等插件裝進Eclipse 注:這些插件不是必要的,僅僅可以使工作變得簡單一些。 7,打開E
15、clipse并新建動態(tài)Web工程(Eclipse需要WTP插件) 輸入Project名字HelloWorld,然后點擊finish 8,在新建的工程中添加class 在新建的project的src中添加一個package package名字為sample
16、60; 在該包中添加一個class Class的名字為Hello,點擊Finish 修改java文件的內容如下。 9,生成wsdl文件 這里可以用Code Generator Wizard
17、- Eclipse Plug-in插件生成,也可以用其他插件生成,差別不大 以上兩種方法都可以,第二種只要按照提示來就可以了,分別是選擇class,選擇生成路徑 下面說第一種方法 注:這里如果想測試的話,就把左上條子拉到頂,點擊finish
18、60; 測試:點擊Operations中剛剛發(fā)布Say 輸入World,看到返回值正常 10,發(fā)布webservice 發(fā)布WebService有很多種方式,可以把它直接發(fā)布Tomcat中,也可以利用Axis來發(fā)布
19、; 我們使用Axis2來發(fā)布 注意,我們要發(fā)布到Axis2中,所以我們service的address就變了,這里需要根據(jù)實際發(fā)布地址進 行修改 例如本示例修改如上1. <wsdlsoap:address location="http:/localhost:8080/axis2/services/HelloService"/>
20、; 使用插件Service Archive Wizard - Eclipse Plug-in 點擊Next,然后選擇Class文件的路徑 點擊Next,選擇我們剛剛發(fā)布的wsdl
21、0;點擊Next,然后來選擇必要的jar包。 點擊Next,勾選自動生成Service.xml 點擊Next,填選Class 點擊Next,填寫發(fā)布路徑
22、; 點擊Finish,則在目標路徑生成aar文件 將生成的aar文件復制到%Tomcat%/webapps/axis2/WEB-INF/services下,或者在axis2的admin頁面添 加該aar文件 默認的用戶名是admin,密碼是axis2
23、0; 點擊Upload Service 將剛剛生成的wsdl發(fā)布 發(fā)布成功后,就可以在Service中找到剛剛發(fā)布HelloService 點擊HelloService,我們就可以看到這個服務的具體內容,就是我們剛剛發(fā)布wsdl。
24、60; 至此,我們成功地發(fā)布了一個webservice *以上示例使用的是POJOs形式發(fā)布。 11,運行Servicemix 運行cmd,然后啟動servicemix服務 等待服務完全開啟。
25、; 當啟動成功之后。我們就可以在JDK的控制臺看到關于ServiceMix的服務信息 運行 %JDK%/bin/jconsole.exe 則我們可以找到servicemix的服務已經(jīng)開啟 點擊連接,則我們可以看到servic
26、emix中的所有信息,包括所有的操作及消息隊列等等,在此不多述。 12,新建一個Servicemix的組件 我們的目的是WebService,所以我們建一個Cxf-bc的組件 在任意路徑下建一個項目工程的目錄,示例建立的是D:/CXFHello 運行cmd,進入該目錄
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;用來創(chuàng)建一個標準的pom.xml 在這個pom.xml中,對于一些基本的工程配置作了設定 在我們成功建立了之后,會發(fā)現(xiàn)CXFHello文件夾下面多出了一個路徑 則我們在這個新建的路徑下面運行1. mvn install &
29、#160; 至此,我們已經(jīng)將這個新建的工程發(fā)布到我們的本地 Maven repository 中 下面我們建立一個CXF-BC Service Unit 在我們剛才建立的工程文件夾下面,運行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 用來創(chuàng)建一個標準的CXF-BC-SU組件 至此,我們建議了一個標準的CXF-BC-SU組件的框子
31、60; 現(xiàn)在進入新建的組件的文件夾。 我們看到一個pom.xml文件,這個是對這個組件進行配置的一個文件。 打開,我們可以看到詳細內容 現(xiàn)在我們修改這個組件的名字 &
32、#160; 將<name>A Cxf BC Service Unit</name> 改成<name>Cxf-Hello-SU</name> 然后我們需要將我們發(fā)布在Axis2上的Webservice的wsdl復制下來放入servicemix這個bc組建之中。 關于wsdl
33、文件 打開wsdl文件,我們可以發(fā)現(xiàn),wsdl其實定義了webservice的所有規(guī)范,例如它的名字,接 口,方法,參數(shù)等等 而我們需要將wsdl復制到我們要發(fā)布的servicemix當中,是因為我們暴露出去的接口,方法, 參數(shù)等要能和實際服務的webservice一致。所以servicemix當中需要一個由同樣接
34、口定義的wsdl文件 訪問 http:/localhost:8080/axis2/services/HelloService?wsdl 得到我們剛才發(fā)布的webservice的wsdl文件
35、0; 將這個wsdl文件復制到%/my-cxf-bc-su/src/main/resources 下 其實這里原本就預訂了一個wsdl文件的位置。 注意,我的wsdl名字叫做Hello.wsdl,因此,當復制過來后,原來的service.wsdl就可以刪除了 當然,我們也可以把剛才ecilpse
36、項目中生成的wsdl復制過來,這是一樣的文件 現(xiàn)在我們需要修改這個復制進來的wsdl文件 將webservice服務定義作如下替換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> 結果如下圖 現(xiàn)在我們已經(jīng)完成了對wsdl的設定,現(xiàn)在我們需要在xbean.xml設定consumer和provider來幫定這些東西。 打開xbean.
39、xml,作如下修改 首先,我們需要一個namespace,這個namespace要和我們引用的wsdl中的service和 endpoint的namespace一致,這樣我們才能準確找到service和接口 我們的wsdl定義的targetNamespace="http:/sample"
40、0; 所以我們bc組件中的consumer和provider定義的namespace也必須和上面一樣 現(xiàn)在來定義consumer和provider,基本的定義規(guī)則參照:/servicemix-cxf-bc.html
41、 則最終修改好的文件如下 注:這里采用輕量級模式,即,將consumer和provider寫在一個service unit內,如果想在中間加入其它程序,則可以將 consumer和provider分成兩個service unit 這樣service unit就建好了,接下來我們建立
42、service assembly 在我們的工程路目下運行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)在可以看到工程目錄中新建出來了SA的文件夾 同樣,我們修改一個名字 <name>Cxf-Hello-SA</name> 接下來,我們要在這個SA中注冊我們剛才制作的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)在一切就緒,我們在工程目錄下面運行1. mvn install 就可以建立好組件了
46、 在build successful之后,我們就可以在 %/my-cxf-sa/target 目錄下面看到我們建立好的jar包 將這個jar包復制到servicemix目錄下面的/hotdeploy文件夾,來正式發(fā)布到ser
47、vicemix當中 如此一來,我們就成功的發(fā)布了一個服務到servicemix上 下面讓我們來檢測一下成果 建立一個客戶端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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學初中說課稿
- 好朋友起玩說課稿
- 治療糖尿病周圍神經(jīng)病變
- 臨時行政主管
- 學校園區(qū)噴泉施工合同
- 精密儀器公司法務聘用合同
- 體育場館隔離墻安裝合同
- 市政排水工程級配碎石施工合同
- 綠色制造車間環(huán)保操作規(guī)程
- 2022年大學林業(yè)工程專業(yè)大學物理下冊期中考試試題B卷-附解析
- 社會學職業(yè)生涯規(guī)劃書
- 三年級課外閱讀書目《格林童話》測試題(含答案)
- 學做小小按摩師(課件)全國通用三年級上冊綜合實踐活動
- 5G網(wǎng)絡設備-5G基站硬件更換
- 山西省電力系統(tǒng)污區(qū)分布圖-2021版-實施細則
- 中國傳統(tǒng)紋樣吉祥圖案課件
- 人工智能技術應用于智能醫(yī)療影像診斷營銷計劃書
- 《生活中的函數(shù)》課件
- 2022-2023學年福建省福州市福清市閩教版五年級上學期期中練習英語試卷(含聽力音頻)
- 生活區(qū)消防自查記錄表
- 2024屆廣東省深圳市寶安區(qū)寶安中學物理九上期中質量跟蹤監(jiān)視模擬試題含解析
評論
0/150
提交評論