熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Turbine HowTo 之 Service

2022-06-13   來源: JSP教程 

  在Turbine中實現自己的服務是非常容易的一件事你的類只需要繼承orgapacheturbineservicesTurbineBaseService(這是必須的只有這樣Turbine的ServiceBroker才能啟動你的服務)
  
  要告訴Turbine你的這個服務你必需在TrubineResourcesproperties裡這樣配置:
  
  servicesMyServiceNameclassname = fullclassnameofyourservice
  
  配置好以後當有程序請求這個服務的時候Turbine會初始化這個服務必須說明的是你的服務並不是在Turbine啟動的時候初始化的這叫lazy init如果你需要你的服務在Turbine啟動是就初始化你必須在TurbineResourcesproperties裡添加另一條配置:
  
  servicesMyServiceNameearlyInit = true
  
  如果你查看一下db/TurbinePoolBrokerService或者servlet/TurbineServletService這兩個簡單的示例的話你上手會更快一點
  
  In a Nutshell
  
  * 你不能試著提供帶參數的構造函數最好是不提供構造函數因為在類構造時不需要做任何事情(我們只需要默認的構造函數就好了)
  
  * 你的服務只能初始化一次因此你的類必須是線程安全的(threadsafe)不能使用類級的變量來處理Session級的請求
  
  * 你需要提供一個init()方法Turbine會在第一次請求的時候調用他(如果earlyInit=true則是在Turbine啟動時)並且初始化你的服務相關的內容令人迷惑的是init()方法到底應該是什麼樣的?因為Turbine使用不同的方法來進行服務的初始化不過從 Turbine開始你只需要提供一個不帶參數的方法就可以了:
  
  public void init() throws InitializationException
  {
  }
  * 如果正常初始化結束來你必須調用setInit(true)否則你的服務仍然不能響應任何的用戶請求當你這麼設置以後你的服務服務就有可能被調用所以你就不能再次調用setInit()
  
  * 你可以提供一個shutdown()方法Turbine會在自己關閉之前調用他你可以在這裡清理你服務的一些內部數據在執行完shutdown()之前你應該調用setInit(false)
  
  一般的模式
  如果你要實現一個FooService聲明一個繼承orgapacheturbineservicesService的接口 (yourpackageFooService)是一個好習慣這個接口應該提供一個叫SERVICE_NAME的常量這是你的服務的名字比如:
  [code]
  package yourpackage;
  
  import orgapacheturbineservicesService;
  
  public interface FooService extends Service
  {
  /**
  * 服務的標記應該是唯一的以區分開別的服務
  */
  public String SERVICE_NAME = FooService;
  
  []
  
  }
  [/code]
  yourpackageTurbineFooServicejava 繼承了orgapacheturbineservicesTurbineBaseService類並且實現yourpackageFooService並提供來具體的實現 如:
  [code]
  package yourpackage;
  
  import orgapacheturbineservicesTurbineBaseService;
  
  public class TurbineFooService
  extends TurbineBaseService
  implements FooService
  {
  /**
  * 在這裡提供具體的實現
  */
  []
  
  }
  [/code]
  yourpackageTurbineFoojava 提供一些靜態的facade方法來調用你的服務如:
  
  [code]
  import orgapacheturbineservicesTurbineServices;
  
  public class TurbineFoo
  {
  protected static FooService getService()
  {
  return (FooService) TurbineServices
  getInstance()getService(FooServiceSERVICE_NAME);
  }
  
  []
  
  public static void fooMethod()
  {
  getService()fooMethod();
  }
  
  public static int fooMethod(int bar)
  {
  return getService()fooMethod(bar);
  }
  
  []
  
  }
  [/code]
  用戶調用你的服務只需要簡單的TurbineFoofooMethod();在調用的代碼裡就不需要知道具體實現的類是哪一個
  
  注意:在Turbine中管理服務的生命周期(lifecycle)的init()和shutdown()方法可能在以後的版本中有所改變的
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19804.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.