分享
 
 
 

James--编写一个定制的匹配器

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

写一个定制的匹配器

通常来说,实现定制的匹配器是个简单的任务,复杂性主要在于编码实现匹配器要完成的实际工作。这种简单性很大程度上归功于Matcher接口的简单性和Matcher包中提供的两个抽象的模板类。GenericMatcher 和 GenericRecipientMatcher这两个类极大的简化了匹配器开发人员的工作。

正如这个手册其它地方所讨论的那样,匹配器接口不是简单的判断某个特定的消息是否匹配。更确切的说,它将原始消息接收者的某个子集做为match(Mail)方法的结果返回。这导致了对匹配器的实现提供了两种不同的抽象。

第一个是GenericMatcher,这个类是为那些没有必要了解接收者信息的匹配器提供的。如果你的匹配器想要返回所有接收者或不返回任何接收者信息,那你基本上应该实现这个类的子类。

当创建这个类的子类时,有四个方法需要重构,它们是getMatcherInfo()、init()、match(Mail)和destroy()。 More on these anon.

第二个是GenericRecipientMatcher,这个类是为那些需要分别了解每个接收者信息的匹配器提供的。它是GenericMatcher的子类,并且从GenericMatcher类继承了的大多数行为。唯一主要的区别是创建它的子类需要重构 matchRecipient(MailAddress)而不是match(Mail)。

配置

匹配器的配置信息通过一个单独的字符串传送。解释这个字符串列表的任务完全交给匹配器去完成。通过调用 GenericMatcher类的getCondition()方法可以获得这个字符串的值,该方法返回传送给匹配器的字符串的值,如果没有配置字符串,则返回null。可以在init()、destroy()、 match(Mail)和matchRecipient(MailAddress)方法中调用该方法。

Logging

Mailet API提供了一个简单的日志机制。它不支持日志记录的级别,所以必须在匹配器的代码里实现所有的日志过滤器。可以通过调用GenericMatcher/GenericRecipientMatcher中的log(String) 或者 log(String,Throwable)两个方法中的任何一个记录日志信息。 在init()、 destroy()、match(Mail)和matchRecipient(MailAddress)方法中都可以调用日志方法。

getMatcherInfo()的返回值是和匹配器的日志信息相关的。所以你可能希望重构这个方法以便可以分清不同匹配器的日志记录信息。

初始化

初始化是匹配器生命周期的一部分,匹配器实例创建后马上要进行初始化。每个匹配器实例都会进行并仅进行一次初始化操作。匹配器的初始化阶段通常是其进行配置和创建其自身专用资源的阶段。如果你的匹配器不需要,你可能没必要执行任何初始化操作。需要通过重构GenericMatcher/GenericRecipientMatcher的 init()方法来实现初始化逻辑。

匹配

匹配器的工作主要是在匹配阶段完成。这个阶段的形式主要取决于继承了那个匹配器超类。

如果继承GenericMatcher类,要实现match(Mail)方法。如上所述,这个方法返回一个邮件地址的集合--邮件对象原始接收者的子集。

如果纯粹是一个过滤接收者的匹配器,那么应该继承GenericRecipientMatcher类。在这种情况下,开发人员必须实现matchRecipient(MailAddress)方法。如果接收者与条件匹配返回true,否则返回false。

销毁

销毁是匹配器生命周期的一部分,当容器清除匹配器的时候,必须确保匹配器被销毁。每个匹配器实例都会进行并仅进行一次销毁操作。匹配器通常在这个阶段释放其专用的资源。如果你的匹配器不需要,你可能没必要执行任何销毁操作。需要通过重构GenericMatcher/GenericRecipientMatche的 destroy()方法来实现销毁逻辑。

部署定制的匹配器

一旦实现了匹配器,仅仅还需要两步就可以完成匹配器的部署了。

将匹配器添加到Classpath

匹配器必须被加入到James的classpath中以便James能够载入。有如下两种方法可以将定制的匹配器加入到James的classpath中:

1.下载源码发布文件,解压缩后将包含定制类的jar文件添加到lib目录下,然后依照这里的指示创建一个新的.sar文件。现在这个新的.sar文件就包含你定制的类了。

或者

2. 将包含定制类的文件的jar文件放到James安装文件的lib子目录中。此外还必须解压.sar文件,将其中的JavaMaile和James的jar文件添加到这个目录中。

配置James

处理流程的配置在文档的 其它文件中讨论。篇幅所限,这里不对匹配器部署的配置细节展开讨论。这里仅提出需要着重注意的两点,第一是将定制的匹配器添加到适当的匹配器包列表中,第二点是你的匹配器的名字不能与这里描述的任何匹配器相冲突。

,

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有