国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

TurbineHowTo之Service

2019-11-18 14:30:48
字體:
來源:轉載
供稿:網友

  在Turbine中實現自己的服務是非常輕易的一件事.你的類只需要繼續org.apache.turbine.services.TurbineBaseService(這是必須的,只有這樣,Turbine的ServiceBroker才能啟動你的服務).
  
  要告訴Turbine你的這個服務,你必需在TrubineResources.PRoperties里這樣配置:
  
  services.MyServiceName.classname = full.class.name.of.your.service
  
  配置好以后,當有程序請求這個服務的時候,Turbine會初始化這個服務.必須說明的是,你的服務并不是在Turbine啟動的時候初始化的.這叫"lazy init",假如你需要你的服務在Turbine啟動是就初始化,你必須在TurbineResources.properties里添加另一條配置:
  
  services.MyServiceName.earlyInit = true
  
  假如你查看一下db/TurbinePoolBrokerService或者servlet/TurbineServletService這兩個簡單的示例的話,你上手會更快一點.
  
  In a Nutshell
  
  * 你不能試著提供帶參數的構造函數,最好是不提供構造函數,因為在類構造時不需要做任何事情(我們只需要默認的構造函數就好了).
  
  * 你的服務只能初始化一次.因此,你的類必須是線程安全的(threadsafe),不能使用類級的變量來處理session級的請求.
  
  * 你需要提供一個"init()"方法,Turbine會在第一次請求的時候調用他(假如earlyInit=true,則是在Turbine啟動時)并且初始化你的服務相關的內容.令人迷惑的是"init()"方法到底應該是什么樣的?因為Turbine使用不同的方法來進行服務的初始化.不過,從 Turbine2.2開始,你只需要提供一個不帶參數的方法就可以了:
  
  public void init() throws InitializationException
  {
  }
  * 假如正常初始化結束來,你必須調用"setInit(true)",否則你的服務仍然不能響應任何的用戶請求.當你這么設置以后,你的服務服務就有可能被調用,所以你就不能再次調用"setInit()"了.
  
  * 你可以提供一個"shutdown()"方法,Turbine會在自己關閉之前調用他.你可以在這里清理你服務的一些內部數據,在執行完"shutdown()"之前,你應該調用"setInit(false)".
  
  一般的模式
  假如你要實現一個FooService,聲明一個繼續org.apache.turbine.services.Service的接口 (your.package.FooService)是一個好習慣.這個接口應該提供一個叫SERVICE_NAME的常量,這是你的服務的名字,比如:
  [code]
  package your.package;
  
  import org.apache.turbine.services.Service;
  
  public interface FooService extends Service
  {
  /**
  * 服務的標記,應該是唯一的,以區分開別的服務
  */
  public String SERVICE_NAME = "FooService";
  
  [...]
  
  }
  [/code]
  your.package.TurbineFooService.java 繼續了org.apache.turbine.services.TurbineBaseService類并且實現your.package.FooService并提供來具體的實現 ,如:
  [code]
  package your.package;
  
  import org.apache.turbine.services.TurbineBaseService;
  
  public class TurbineFooService
  extends TurbineBaseService
  implements FooService
  {
  /**
  * 在這里提供具體的實現
  */
  [...]
  
  }
  [/code]
  your.package.TurbineFoo.java 提供一些靜態的facade方法來調用你的服務,如:
  
  [code]
  import org.apache.turbine.services.TurbineServices;
  
  public class TurbineFoo
  {
  protected static FooService getService()
  {
  return (FooService) TurbineServices
  .getInstance().getService(FooService.SERVICE_NAME);
  }
  
  [...]
  
  public static void fooMethod1()
  {
  getService().fooMethod1();
  }
  
  public static int fooMethod2(int bar)
  {
  return getService().fooMethod2(bar);
  }
  
  [...]
  
  }
  [/code]
  用戶調用你的服務只需要簡單的"TurbineFoo.fooMethod1();",在調用的代碼里就不需要知道具體實現的類是哪一個.
  
  注重:在Turbine2.1和2.2中治理服務的生命周期(lifecycle)的init()和shutdown()方法可能在以后的版本中有所改變的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 塔城市| 芜湖市| 昆山市| 许昌市| 湘潭县| 庆阳市| 永修县| 洪江市| 荃湾区| 新余市| 定南县| 玛沁县| 五大连池市| 安乡县| 江孜县| 榆中县| 老河口市| 平山县| 华池县| 中阳县| 吐鲁番市| 晋州市| 沁阳市| 金坛市| 凌源市| 松原市| 汉寿县| 邻水| 江永县| 天峨县| 西峡县| 阿克苏市| 海南省| 麻城市| 中西区| 正定县| 吉隆县| 长春市| 正宁县| 六枝特区| 茌平县|