Nutch解析工厂类ParseFactory分析

nutch插件系统概念知识

1. nutch插件系统总体介绍

对于nutch的插件系统,有三个概念需要理顺,pluginExtensionExtensionPoint。对于这三个角色,以下画了张图加深下理解。

ExtensionPoint:是nutch系统提供给用户的可扩展的接口,用户可以对他进行实现(就是扩展)来实现自己的功能。备注:Nutch源代码中也有名为ExtensionPoint的类,但这个类不代表扩展点,他是扩展点的管理类,负责一类扩展点的管理工作,它的属性包含了一类扩展点的所有元信息。

Extension:它是针对插件系统提供的扩展点的实现,-作为extension points的侦听器,可以被动态的安装。一个Extension实现一个ExtensionPoint。备注:Nutch系统中也有对名为Extension的类,他是扩展的管理类。

Plugin:是一类扩展的集合,他包括具体的一个或多个扩展类以及扩展类需要的辅助类,还有管理这些类的配置文档(如Plugin.xml),向nutch的核心功能提供扩展。

 

2. nutch插件系统中相关类介绍

 

(1)    PluginRepository:该类是nutch插件的仓库类,用于组织和管理扩展点和对应的扩展。

(2)    PluginManifestParser:该类解析各个插件配置文档,用解析得到的信息构建插件仓库类PluginRepository

(3)    ExtensionPoint:该类是扩展点管理类,插件仓库类PluginRepository使用该类管理系统中的扩展点,他内部通过Extension扩展管理类管理针对该扩展点的扩展。

(4)    Extension:该类为扩展管理类,负责管理具体的一个扩展和他的配置信息。

(5)    Plugin:该类为插件信息管理类,负责插件信息的维护工作。

 

ParseFactory的工作分析:

1.ParserFactory类总体介绍

该工厂类负责管理各种解析扩展,系统通过该类提供的函数getParsers(String contentType, String url)获得需要的解析类。该类有三个属性,配置信息类Configuration负责管理系统提供的配置信息,ParserFactory工厂类通过它提供的信息获得各种插件的信息和实现;扩展点管理类ExtensionPoint负责管理系统提供的解析类扩展点和扩展,在ParserFactory的构造函数中,根据配置信息类Configuration从插件仓库集合中获得对应该配置信息类的插件仓库PluginRepository实例,然后调用仓库类的getExtensionPoint(Parser.X_POINT_ID )函数获得解析类的扩展点管理类ExtensionPoint,扩展点管理类中包含了系统中所有的关于解析类的扩展点和他们的扩展实现;解析插件列表ParsePluginList属性负责解析管理parse-plugins.xml中的配置信息,该配置文件说明了什么类型的数据使用哪种解析扩展进行处理,他通过ParsePluginsReader插件解读类的parse解析函数进行解析获得信息。

 

2.插件工厂类的工作流程

解释:流程中对简单介绍了程序的大体流程,对于程序中的一些细节(如当没有指定的扩展是如何处理)进行了省略。

(1)    调用ParserFactorygetParsers函数,该函数调用本类的getExtensions函数选择合适的扩展。

(2)    getExtensions函数会首先查看缓存中ObjectCache中有没有对该类型解析类的缓存,若有则直接返回,没有则调用findExtensionsExtensionPointList中进行选取。

(3)    findExtensions函数会获得对应的扩展点ExtensionPoint中的所有Extension,在从属性parsePluginList中获得对应contentType类型数据应该选择解析类表示信息parsePluginList。然后调用matchExtensions函数进行选择处理。

(4)    matchExtensions函数对每一条解析类表示信息parsePluginList进行循环查找,查找Extension中有没有符合要求的插件,将查找到的结果存储为List<Extension>类型返回结果。

(5)    最后getParsers函数,会针对查找返回的扩展进行实例化,调用每个扩展管理类ExtensiongetExtensionInstance函数,获得该扩展的一个实例,将它转换成Parser类型,并对该实例进行缓存。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WitsMakeMen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值