簡體   English   中英

如何重用Web服務的實例?

[英]How can I reuse an instance of a webservice?

我運行的服務A的類別為X。 我將在使用此類X的同一台計算機上部署另一個服務B。 如何確保服務A的同一實例被重用,而不是另一個。

PS:用JAVA編寫的服務。

添加:這兩個服務都是Axis2服務。 服務B已熱部署。 服務B使用了Y類,它是X類的擴展。

我們能否嘗試區分類,對象和服務。

你有這樣的東西嗎?

@javax.jws.WebService
public class ServiceAAA{

    public String echo(String arg) {
        // some really nice code here     
    }

}

而你想添加

@javax.jws.WebService
public class ServiceBBB{
    public String superEcho(String arg) {
        // even more code here
        // which needs to reuse the code from A's echo()     
    }   
}

顯然,我們不想在這兩種實現之間進行剪切和粘貼。 我們如何重用?

選擇1:

直接從B呼叫A。您正在詢問該怎么做。 可以做到的。 您只需在實現中編寫一個JAX-WS客戶端調用的代碼即可。 但是,我強烈建議不要這樣做。 服務調用可能比簡單的Java調用更昂貴。

僅當y6ou無法選擇將兩個服務類一起部署時,才執行此操作。

選擇2:

重構實現。 只需將代碼移到worker類中即可。

@ javax.jws.WebService公共類ServiceAAA {

    MyWorker worker = new Worker();
    public String echo(String arg) {
        return worker.doSomething(arg) ;      
    }

}

@ javax.jws.WebService公共類ServiceBBB {

    MyWorker worker = new Worker();
    public String superEcho(String arg) {
        worker.doSomething(arg) ;  
        // and some morestuff             
    }    
}

我知道A也會使用X類,而B也會使用。

將兩個Web服務A和B配置為使用對象X的相同實例。可以通過多種方式來完成此配置,例如:

  • 按照開始的順序,創建一個實例X,然后通過setX(x)將其分配給每個webService。
  • 或者您可以在構造函數中使用靜態字段來執行此操作

例:

     @javax.jws.WebService
     public class A implements WebService {
       public static final X x = new X();

       public void methodA() {
         // use x
       }
     }

     @javax.jws.WebService
     public class B implements WebService {
       private Y y = new Y(A.x);

       public void methodB() {
         // use y that uses x.
         y.methodY();
       }
     }

     public class Y {
       private final X x;
       public Y(X x) {
         this.x = x;
       }

       public void methodY() {
         // use x, it is the same instance as in A
       }
     }

不懂Java,但是您可以在嘗試使用的對象上使用單例模式

編輯:我認為您應該讓X類實現單例模式...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM