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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Turbine HowTo 之 Service

2019-11-18 13:10:04
字體:
供稿:網(wǎng)友

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 浦城县| 抚州市| 德江县| 南开区| 普定县| 清镇市| 晋江市| 罗甸县| 潞城市| 泸定县| 重庆市| 霍林郭勒市| 隆尧县| 文安县| 墨玉县| 枣强县| 上饶市| 航空| 罗定市| 望谟县| 屏南县| 营山县| 泗洪县| 中江县| 裕民县| 碌曲县| 育儿| 开鲁县| 泗阳县| 大厂| 天全县| 琼结县| 渝中区| 屯昌县| 新龙县| 阿瓦提县| 五寨县| 盖州市| 上犹县| 淮滨县| 台南县|