2009-11-10 24 views
3

我想公開一些Java Web服務,以便我可以從C#進行互操作(請參閱SO question)。下面的概念驗證碼對WCF非常有用!使用javax.xml.ws.Endpoint公開Java Web服務的侷限性?

我的問題是有關使用javax.xml.ws.Endpoint類的出版我的服務:

  1. 我是什麼走這條路,而不是一個完整的應用服務器被沒收?
  2. 這是一個適合長時間運行的服務與低調用量的合適解決方案嗎?

以下產生WSDL,可以從.Net清晰地調用,並且執行得很好。 爲什麼我不使用它?

@javax.jws.WebService 
public class TestSvc { 
    @javax.jws.WebMethod() 
    public String sayHello() { 
     return "Hello!"; 
    } 
} 

import javax.xml.ws.Endpoint; 
public class Main { 
    public static void main(String[] args) throws Exception { 
     Endpoint.publish("http://localhost:8181/Test", new TestSvc()); 
    } 
} 

回答

4

通常情況下,可擴展性參數(線程池等)是非常有力的,但你已經打折的。

接下來,可靠性。某些應用服務器具有良好的羣集功能,非常容易添加新實例,因此在啓用綜合管理視圖時啓用容錯功能。

隨着您的服務數量的增長,管理的便捷性相當方便。

安全基礎設施和聲明式安全模型可能非常重要。

對於我來說,當您的業務邏輯變得不平凡時,整個Java EE編程模型都值得擁有。現在我們可以進入整個EJB v Spring v辯論。但我想說的一般觀點是,隨着業務邏輯變得越來越嚴重,您需要諸如線程管理,持久性,連接池,消息傳送,緩存和調度等設施;你在App Servers中找到的東西。其中的一些自然來自EJB3 + JPA或Spring,其中一些作爲App Server中的自然插件。如果您有進行嚴肅的企業規模Java開發的前景,現在購買更多的完整性可能會更好,以便爲未來奠定可擴展的基礎。

+0

我可以交換一些App Server的某些功能,只要我們不需要用內置的東西來解決任何問題。 JEE編程模型意味着什麼? (我是一個C#人 - 這是Enterprise Java Beans嗎?) – intoOrbit 2009-11-10 20:54:22

+0

添加了更多的細節, – djna 2009-11-10 21:31:47

2

除了普遍失去應用程序服務器的優點外,如果您要使用應用程序服務器,則可能會失去管理和管理和測試服務的能力。

在inter-op方面,如果沒有java調用,您將無法提取WSDL。如果您的新服務在發佈時執行了某些操作,則可能需要圍繞此設計。如果您打算使用WCF或類似的東西來使用WSDL,那麼在生成服務客戶端時必須解決VS方面的一些怪癖(這些怪癖並非每一代都發生,但它們確實發生在時間)。

長期運行的服務(我假設換句話說,您的意思是預期無限期運行的服務)只能作爲一個流程進行管理。根據您的設計和要求,您必須考慮啓動和停止過程,暫停過程等。

+0

您可以詳細說明一下這些WSDL怪癖嗎?間歇?聽起來很可怕。 :) – intoOrbit 2009-11-10 20:49:36

+0

其中兩個突出顯示: 1。當從WSDL重新生成客戶端時,Visual Studio似乎經常掛起。最終的結果是令人沮喪和耗時的,因爲它要求你殺死這個進程,稍微解散你的解決方案,然後再把它們放回去。它只需要大約10分鐘(左右),但它經常發生的事情足以讓您每次必須重新生成時都會結束。這個問題肯定存在於一行代碼中,但谷歌搜索會告訴你很多人都有相同的代碼行。 2.客戶端將生成一個單獨的類型......跑出房間 – Steve 2009-11-10 20:56:59

+0

問題#2:將使用它自己的WSDL對象的個人副本生成客戶端。如果您有兩個服務在Java端返回相同的對象,則C#端將有兩個單獨的對象打包在不同的包中。所以,你將在C#方面做一些設計來合理化如何在兩個不同的包中使用同一個對象。 – Steve 2009-11-10 20:58:46