分享
 
 
 

TurbineHowTo之Service

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有