互联网博客
http://internet.blog.enorth.com.cn >复制 >收藏本站
首页 IT技术(99) 音视频(7) 汽车(6) 搜索引擎(2) 我的日志(34) 歌词(12) James(19) 笑话(10) Blog技术(4) 诗词歌赋(7)

北方博客 > 首页 > James--编写一个定制的匹配器
Google
3上一篇: James安装指南 下一篇: James -- 编写一个定制的Mailet4
[James]James--编写一个定制的匹配器
Tags: james 匹配器 apache

写一个定制的匹配器
通常来说,实现定制的匹配器是个简单的任务,复杂性主要在于编码实现匹配器要完成的实际工作。这种简单性很大程度上归功于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
处理流程的配置在文档的 其它文件中讨论。篇幅所限,这里不对匹配器部署的配置细节展开讨论。这里仅提出需要着重注意的两点,第一是将定制的匹配器添加到适当的匹配器包列表中,第二点是你的匹配器的名字不能与这里描述的任何匹配器相冲突。


字体:
引用地址 http://internet.blog.enorth.com.cn/article/30810.shtml


allenzz7 | 2006-03-01 11:29


发表评论
 
昵称
主页
标题
内容
算式的解
看不清校验算式?
 



 


公告

抗震救灾

众志成城

站内搜索

最新日志

linux 中文显示乱码解决办法
国足欢迎你
A780的快捷键图标设置
Jfreechart中画双Y坐标的折线图
在dwr的回调函数中传递多个参数
Lemon Tree
去掉jsessionid
Windows media encoder及其SDK编程说明
保留weblogic中jsp编译后生成的java文件
行为艺术家扮“房奴”抗议房产商(图)
DWR 调用返回值方法
民间节油“秘笈” “节油王”道出节油六高招
开车十五年心得!真真实实的26条教训!
ChannelSocket INFO: connection timeout reached
杭州干部徐新贤死了都要爱!
创业前请回答这些问题
Linux下让编译安装的Apache自动启动
IllegalStateException: getOutputStream() 异常的解决方案
LINUX下配置系统环境变量
Servlet图像处理 X11错误解决方法
解决winxp搜索不到文件中的某个字或词组的问题
夜的第七章
Linux下两种自动启动Tomcat的方法
使用mod_usertrack跟踪用户
apache2.0 prefork和worker模块性能调优

网友评论

Re:Apache-WebLogic plugin插件的安装
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个简单的DWR例子
Re:一个女人的十年 [录音+文字]
Re:一组照片
Re:一组照片
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:apache2.0 prefork和worker模块性能调优
Re:蒋捷《虞美人·少年听雨歌楼上》
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]
Re:一个女人的十年 [录音+文字]

我的链接

妮妮的世界
小宝成长日记
汽车维修、保养专业站

CSS2中文手册
SpringFramework中文论坛
以前的事 现在的事 将来的事
DynamicDrive
CSDN 金·评·没|YanHui's blog
tomcat 5.0 文档
sixsun的blog
王育琨专栏
西安信息资源网
[埃里克森]的Blog



flashplayer.cn

Apache HTTP Server Version 2.2 文档
天津一汽
Tortoise Cvs Homepage
天津博客
Java开源大全
OpenSymphony
Java视线论坛

网友留言

<写留言>
我们的感觉好比一个十年的女人
你的博客做得很棒
认识你好高兴
其实我也是学计算机的
你好,朋友!
你是不是搞程序的?
交朋识有
祝你新年快乐!
经常关注你的blog,希望有机会认识一下!
元旦快乐

站内统计

日志总数:200
今日访问:1289
访问总数:1145155
评论总数:324
留言总数:14

存档

2008年01月(1)
2007年12月(3)
2007年11月(2)
2007年10月(1)
2007年08月(2)
2007年07月(1)
2007年06月(3)
2007年05月(2)
2007年04月(5)
2007年03月(2)
2007年01月(2)
2006年12月(3)
2006年11月(1)
2006年09月(5)
2006年08月(2)
2006年07月(8)
2006年06月(7)
2006年05月(9)
2006年04月(13)
2006年03月(30)
2006年02月(23)
2006年01月(9)
2005年12月(12)
2005年11月(23)
2005年10月(23)
2005年09月(2)

控制台入口

用户名
密 码