麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

Turbine HowTo 之 Service

2019-11-18 13:10:04
字體:
來源:轉載
供稿:網友

  在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()方法可能在以后的版本中有所改變的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本精品免费观看 | 国产精品18久久久久久久 | 爽爽淫人综合网网站 | 欧美性色黄大片www 成人免费网站在线观看 | 九九热精品视频在线 | 国产久草视频在线 | 色婷婷av一区二区三区久久 | 一区二区三区视频在线观看 | 精品久久久久久综合日本 | 色妞视频男女视频 | 日韩黄网站| 欧美在线观看视频一区 | 亚洲第一成人在线观看 | 噜噜噜躁狠狠躁狠狠精品视频 | 一色屋任你操 | 一区二区三区欧美在线 | 视频一区免费观看 | 中文字幕涩涩久久乱小说 | 92自拍视频 | 男女羞羞的视频 | 精品亚洲一 | 韩国草草影院 | 成人在线观看免费 | 91成人在线免费观看 | 中文字幕四区 | 哪里可以看免费的av | 蜜桃成品人免费视频 | 欧美一区在线观看视频 | 欧美日韩国产成人在线 | 看一级毛片 | 激情亚洲一区二区三区 | 成人免费毛片在线观看 | 成人在线视频黄色 | 久久电影一区二区 | 久久精品国产99久久6动漫亮点 | 国产午夜电影 | 久久久久久久久成人 | 国产精品av久久久久久网址 | 国产视频在线一区 | 亚洲精品永久视频 | 精品国产乱码久久久久久久 |