這是從fusesource forum和servicemmix forum交叉發佈的。Servicemix 4,DOSGi和Zookeeper
我無法使DOSGi在FUSE中工作。我試圖通過在FUSE 4.1.0.2上發現Zookeeper發現CXF的DOSGi 1.1-SNAPSHOT。我也使用Zookeepr 3.2.1。
菲利克斯2.0.0的一切都完美運作。我只需按照DOSGi Discovery頁面上的說明進行操作,然後再安裝Discovery Demo軟件包。對於DOSGi,我只是使用DSW的cxf-dosgi-ri-singlebundle-distribution-1.1-SNAPSHOT.jar和cxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jar來進行zookeepr發現。然後,當我在一臺機器上啓動樣本服務impl的樣本包時,我看到zookeeper中創建了節點。然後我在另一臺機器上啓動示例客戶端,並在服務器上看到輸出。很棒。我確實有一個關於xml錯誤被忽略的警告,因爲一些XSD沒有找到,但它似乎沒有影響任何東西。哦,我還必須先安裝OSGi彙編包。
當我搬到Fuse時,我沒有這樣的運氣。 OSGi彙編包含保險絲,因此無需安裝。我應該能夠安裝dosgi-ri singlebundle和dosgi-ri-discovery單個bundle,但這不起作用。 dosgi-ri singlebundle與servicemix有各種重疊的bundle。我收到有關端口8081的錯誤?或者任何osgi.http.service參數,已被使用。顯然,dosgi-ri singlebundle帶有pax webservice,它讀取與servicemix附帶的servicemix http服務包相同的屬性。那是當我切換到cxf-dosgi-ri-multibundle-distribution-1.1-SNAPSHOT.zip並解壓縮以獲取我想要的部分。我從dosgi-ri multibundle中取出dsw包並安裝它。由於jdom的依賴,沒有運氣。然後我安裝ri多包中的jdom,工作正常。然後回到dsw,然後安裝,所以我認爲我在某個地方。有時間回去安裝ri-discovery單捆。當我開始時,我得到一個pax日誌服務classcastexception,說它不能轉換成osgi logservice或其他東西。但那只是一個記錄錯誤,在底部它說它找不到http://schemas.xmlsoap.org/soap/http的運輸類。好吧,記錄被搞砸了,我錯過了一些交通班。那麼,顯然這是因爲它沒有安裝足夠的ri多包,因爲它工作在felix上。那麼還有什麼是必要的。檢查後的cxf-minimal-bundle包含導致最後一個錯誤的缺失類。所以我安裝它。嘗試啓動發現捆綁包,但最終會出現某種corbabroker異常。跆拳道。所有這些誰使用corba?然後我回去並撤消所有這些,並嘗試堅持ri和ri-discovery的單一發行版,但只需關閉servicemix http服務即可。這崩潰了servicemix,我無法重新啓動它,因爲cxf jbi組件最終導致不滿足的依賴關係。奇。我會忽略這一點,因爲我不使用這些,並嘗試開始我的樣本。無法啓動樣本,因爲它說由於端口已被使用,碼頭無法啓動。沒有意義,因爲我已經關閉了servicemix http服務。然後我重新啓動碼頭。作品?也許。我的服務已註冊,我可以使用Firefox瀏覽到wsdl,但沒有在zookeeper中註冊。嘗試關閉ri-discovery包並重新啓動它,但是我得到一個nullpointerexception。實際上,由於上述錯誤之一,ri-discovery從未真正開始。然後我開始嘗試拆分ri-discovery單一捆綁並將內部結構拉出。這不起作用,因爲它顯然是必要的,儘管在我們內部的一些庫存可能沒有。
故事結束。無法讓它工作。其他人可以使用它嗎?我只想在SMX4中運行發現示例。我很確定它只是一個捆綁衝突問題。這不是OSGi應該解決的問題嗎?這比只告訴我你依賴什麼瓶子並讓我設置類路徑更糟糕。至少我最終會讓事情運行起來。
我認爲我的下一步將是再次嘗試使用ri-multibundle,即dsw和jdom,再加上ri-discovery單捆。然後我會嘗試一些cxf-fuse束或一些cxf-rt束以解決肥皂傳輸問題。
編輯說明:我需要的不僅僅是將DOSGi包顯示爲活動狀態。直到你嘗試通過他們公開服務時,他們實際上並沒有太多的工作。我確實需要看到多臺機器使用zookeeper實例和其他使用這些服務的機器註冊服務 - 就像正在運行的DOSGi Discovery Sample一樣。
我已經能夠通過使用最小cxf捆綁包來揭示分佈式服務示例作爲soap web服務,通過刪除部分原始cxf捆綁包並重新啓動jetty服務,然後啓動示例服務...或者通過安裝cxf最小bunding,然後啓動我的服務,然後立即卸載cxf minimal bundle,然後重新啓動jetty ...我認爲這是訂單。這些都不會從一個乾淨的啓動工作,並且不得不重新啓動服務作爲一個程序來讓DOSGi工作是不好的。我甚至不知道爲什麼安裝然後卸載會做任何事情 - 它不應該留下任何文物。
沒有真正啓動一個標記爲發現的服務,就像我在原始文章中提到的樣本發現服務,沒有任何內容會通過CXF公開,所以即使它活躍,也沒有實際使用cxf-bundle-minimal。 – 2009-09-29 11:26:15
此外,即使您可以啓動標記爲發現的服務,並將它暴露爲帶有您提及的cxf軟件包的soap webservice,但是沒有分佈式發現,您將不會與zookeeper進行通信。您列出的配置無法包含cxf-dosgi-ri-discovery-singlebundle-distribution-1.1-SNAPSHOT.jar,其中包含cxf-dosgi-ri-discovery-distributed-1.1-SNAPSHOT.jar和cxf-dosgi-ri- discovery-distributed-zookeeper-wrapper-1.1-SNAPSHOT.jar,以及它自己明顯重要的服務聚合。 – 2009-09-29 11:27:03
爲了回答你的問題,我非常喜歡OSGi容器本身,通過felix和equinox以及OSGi規範。不過,這些捆綁衝突正在殺死我。 – 2009-09-29 11:37:01