簡體   English   中英

在JAX-WS或JAX-RS Web服務上共享類的實例

[英]Share an instance of a class across a JAX-WS or JAX-RS Webservice

我建立了一個類(稱為RecordManager )來管理文件系統上的數據。 我想進行更改此類狀態的SOAP或REST調用。 但是,我只想讓對服務器的每次調用都運行一個此類的實例。

如何創建此類的一個實例,並在所有JAX-WS或JAX-RS調用下都能使用它? 理想情況下,我只想致電:

 @GET 
 public ... (...){
      rec_man.update( <parameters passed by call> )
 }

其中rec_man是實例RecordManager

我可以肯定地說,我已經確保此類的線程安全。

public class RecordManager {
   public static final RecordManager INSTANCE = new RecordManager();
   private RecordManager() {
         // private constructor prevents instantiation
   }
}

您的JAX-WS服務或JAX-RS資源將像這樣引用RecordManager:

 @GET 
 public ... (...){
      ...
      rec_man = RecordManager.INSTANCE;
      rec_man.update( <parameters passed by call> )
 }

或者,如果您不喜歡這種樣式(將單個實例作為公共靜態實例),則可以隱藏該靜態實例並公開一個靜態方法來獲取它。

public class RecordManager {
   private static RecordManager instance;
   private RecordManager() {
         // private constructor prevents instantiation
   }

   public static RecordManager getInstance() {
       if (instance == null) {
           instance = new RecordManager();
           ... init
       }
       return instance;
   }
}

您的用法變為:

 @GET 
 public ... (...){
      ...
      rec_man = RecordManager.getInstance();
      rec_man.update( <parameters passed by call> )
 }

請注意,如果您的實例化邏輯必須是線程安全的(例如, 永遠只能初始化一次),那么你可以做getInstance方法synchronized或描述的技術之一這篇文章

暫無
暫無

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

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