`

plugins 机制

 
阅读更多

觉得这块也是蛮重要的,所以得要认真学了。

但检索到网上讲得不是很清楚,要么就是背书一样;要么 就是没深入到点子上。

这里可以说 是作为一种扩展吧,希望可以对那么有所额外的补充。

 

一.概念

PluginClassloader:利用self-defined的来指定具体的loader,只是名称变了,其实是URLClassLoader,因为plugin所依賴    的libs及files均转换file to url形式来加载的。

 

PluginRepository:plugin的管理类,可以说是代理吧,重头戏的是将所有的plugin.xml解析封装,所以它包含很多形如

PluginDescriptor,Plugin,Point等cached maps.

 

Plugin:在plugin.xml中,用户可以定义一个customerized的class(必须继承Plugin.java),来扩展默认的实现(默认的start(),shutdown()是不做任何事的)。所以其实就是一个plugin.xml对应一个Plugin.另外,它内置了PluginDescriptor,所以说,Plugin与PluginDescriptor是1对1关系.一个Plugin可以被安装和御载。

 

PluginDescriptor:与Plugin是对应的,它包含了一个plugin.xml的metadata,extension-points(只有nutch-extensinos/plugin.xml才有),exportedlibs,notexportedlibs,PluginClassloader等等。其实这此属性基本上就是xml中的属性。

 

ExtensionPoint:只有nutch-extensions/plugin.xml中才有此定义,它表明nutch的一个内置class或interface,用户真正扩展的是这些接口。当然了,因为一个point可以被多个customerized classes来实现,所以其中也含有若干extension(s)。

 

Extension:在一个plugin.xml中,可以有若干个extension元素 ;而每个元素下也可以有若干个implemention元素。这样的情况可以在若干个plugin.xml有同样的定义,那么Extension(s)可以认为是所有这些implemention(s)。即事实上,point与extension是1对多的关系。因而它包含Plugindescriptor,point,class和params等variables.

 

plugin.dtd:一个plugin.xml的document type definition

 

nutch-default.xml:包含plugin的excludes & includes plugin,加载plugins顺序等参数默认配置。

 

nutch-site.xml:site special configs

 

 

--举例说明--

QueryFilter:extension point

BasciQueryFilter: 具体的一个point实现之一

 

path-to-plugin/plugin.xml:真正的实现point(s)的所有配置文件

 

nutch-extension/plugin.xml:nutch core extension points,其它plugin.xml下的point值必须在这里定义过才起作用。

 

 

二. 配置/数据结构

nutch-extensions/plugin.xml

<plugin
   id="nutch-extensionpoints"
   name="the nutch core extension points"
   version="0.8.0"
   provider-name="nutch.org">

   <!-- this file hosts all extension points nutch core code offers. 
   Please not(note?) that plugins can define extension points as well to be extendable.
   这里的id就是相应plugin.xml下的extension.point属性!
   -->

<extension-point
      id="org.apache.nutch.clustering.OnlineClusterer"
      name="Nutch Online Search Results Clustering Plugin"/>

<extension-point
      id="org.apache.nutch.indexer.field.FieldFilter"
      name="Nutch Field Filter"/>
...
</plugin>
 

other plugin.xml,for example query-basic/plugin.xml:

<!--global:plugin (runtime?, requires?, extension-point*, extension*)-->
<!-- plugin:id,name,version are must;class is optiona

l -->
<plugin
   id="query-basic"
   name="Basic Query Filter"
   version="1.0.0"
   provider-name="nutch.org">
   
   <!--运行时由classloader加载和实例的包,可以说是由ant生成的包名;
   所以export表明此包应该导出的文件
   -->
   <runtime>
      <library name="query-basic.jar">
         <export name="*"/>
      </library>
   </runtime>

   <!--运行此plugin需要用到的依赖points;这里是nutch的core point-->
   <requires>
      <import plugin="nutch-extensionpoints"/>
   </requires>

   <!--extension:此plugin实现point的extention(s),point是必须的且在nutch-extensiionpoints/plugin.xml
   		中有定义;id可以不唯一,也没有用到 -->
   <!-- implementation:实现此point的类,both id and class are must 
   	  	实际处理时会将一个implemention作一个Extention实例处理,
   -->
   <!--  parameter:此extention在运行时用到的KV常量,可选但对extensino唯一 -->
   <extension id="org.apache.nutch.searcher.basic"
              name="Nutch Basic Query Filter"
              point="org.apache.nutch.searcher.QueryFilter">
      <implementation id="BasicQueryFilter"
                      class="org.apache.nutch.searcher.basic.BasicQueryFilter">
        <parameter name="fields" value="DEFAULT"/>
      </implementation>
      
   </extension>

</plugin>
 

nutch-site.xml

<property>
	  <name>plugin.includes</name>
	  <value>protocol-http|urlfilter-regex|parse-(text|html)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-(link|opic)|urlnormalizer-(pass|regex|basic)</value>
	  <description>NOTE:THIS VALUE MANYE HAVE BEEN CHANGED!.
	  </description>
</property>
	
<property>
	  <name>plugin.folders</name>
          <!-- crawl/产品环境-->
	  <value>plugins</value>
	 ....
</property>
...

 

 

 

三.运行流程



 

 

 

 

 

 

 

 

 

四.小结

插件这块也是繁锁的,刚看时会很晕,很多相关的类说明不够詳細,对应关系没说清楚。

不过话又说回来 ,其实想知道一个class的功能也容易的,只要看name和其中的fields也基本上清楚了,因为无非就是一个输入,处理,输出的过程;两者看看相关的methods就有个基本。

 

机制特点:

*使用lazy loading原则提交效率;

*使用1:n方式,只要定义好point,就可以在xml指定多个implementions,灵活方便;

*使用缓存形式提交效率;

*支持依赖性检查,避免代码重复冗余;

*灵活的过滤机制 ,减少直接代码处理引起 的风险;

 

 

 

references:

nutch plugin浅析

 

 

 

 

 

  • 大小: 26 KB
  • 大小: 21 KB
  • 大小: 16.5 KB
  • 大小: 27.9 KB
分享到:
评论

相关推荐

    oryx 业务流程编辑器学习 pdf

    **Plugins机制** oryx.js提供了一个插件架构,允许开发人员根据需求添加自定义功能。这些插件可以扩展编辑器的行为,例如添加新的图形元素、修改默认行为或者集成其他服务。这种灵活性使得oryx能够适应各种复杂的...

    ansible1.7.2.zip

    6. **Plugins**: Ansible 的 Plugins 机制允许扩展其功能,包括插件类型如回调、过滤器、变量等,以适应不同的工作流程和场景。 ### Ansible 1.7.2 特性 在 Ansible 1.7.2 版本中,可能包含以下特性: 1. **改进...

    plugins_jekins.rar

    此外,理解Jenkins的插件管理机制也很重要。Jenkins通过`/usr/share/jenkins/ref/plugins/`目录(在某些系统中可能是`/var/jenkins_home/plugins/`)来保存插件的初始版本,这被称为“默认插件”。当Jenkins启动时,...

    plugins1.rar

    首先,Eclipse作为一个开放源码的平台,其核心功能主要通过插件机制来实现。"plugins1"很可能包含了一系列针对C++开发的插件,这些插件能够提供语法高亮、自动完成、调试工具、代码分析等功能,极大地提升了开发效率...

    plugins

    6. **插件管理**:许多应用提供了内置的插件管理机制,允许用户安装、禁用、更新插件。这包括插件市场的访问,以及对已安装插件的配置和控制。 7. **安全考虑**:尽管插件带来了诸多便利,但也可能引入安全风险。不...

    nagios-plugins-1.4.14.tar.gz

    《Nagios插件nagios-plugins-1.4.14详解》 Nagios是一款广泛使用的开源网络监控系统,它能够实时监控网络服务、主机状态以及各种系统资源,及时发现并报告问题,确保系统的稳定运行。而nagios-plugins是Nagios的...

    xdoclet-plugins-1.0.3

    5. **错误处理和日志记录**:增强了错误处理机制,提供详细的日志记录,方便开发者调试和排查问题。 使用"XDoclet-plugins-1.0.3",开发者可以专注于业务逻辑的实现,而不必担心安全配置的复杂性。它使得OA系统的...

    plugins.7c vlc

    不同的平台(Windows、macOS、Linux等)可能有不同的硬件加速机制,这些都在插件中得以实现。 5. **二次开发接口**:对于开发者来说,VLC的插件系统提供了丰富的API和SDK,允许开发人员编写自定义插件以扩展VLC的...

    jmeter-plugins

    同时,它有一个持续更新的机制,确保你可以获取到最新的插件版本和修复。 **5. 使用技巧** 在使用JMeter Plugins时,应注意以下几点: - **资源需求**:某些插件可能增加JMeter的内存消耗,因此在配置JMeter时要...

    nagios-plugins-2.3.3.tar.gz

    "nagios-plugins-2.3.3.tar.gz" 是一个包含了Nagios官方插件的压缩包,版本为2.3.3,是经过广泛测试和验证的稳定版本。 在深入探讨Nagios插件之前,我们需要了解Nagios的基本架构。Nagios服务器会定期或按需向各个...

    nagios-plugins-1.4.9.tar.gz

    其核心功能在于提供警报机制,当系统出现异常时,能够及时通知管理员。而nagios-plugins则是Nagios生态系统中的重要组成部分,它们是一系列用于检查不同服务和资源状态的插件,通过这些插件,Nagios可以监测各种服务...

    mybatis-plugins

    在使用MyBatis-Plugins之前,首先需要理解MyBatis的拦截器(Interceptor)机制。拦截器是一种设计模式,它可以在方法调用前后插入额外的处理逻辑。在MyBatis中,通过实现Interceptor接口并重写其intercept()方法,...

    VLC3.0的SDK文件和plugins文件夹方便开发使用

    5. **错误处理与调试**: SDK通常提供错误处理机制,帮助开发者追踪和修复程序中的问题。 **plugins文件夹** VLC的插件系统是其强大功能的核心。plugins文件夹包含了VLC运行所需的解码器、编码器、过滤器和其他模块...

    CTG Plugins.zip

    综合来看,"CTG Plugins.zip" 提供了一个完整的自动点击工具,利用JavaScript、jQuery和浏览器扩展机制,实现对网页的自动化点击操作。用户可以通过设置界面定制其功能,而插件的后台脚本则持续监控和执行这些设定,...

    xdoclet-plugins-dist

    5. **可扩展性**:XDoclet的插件机制使得它具有很高的可扩展性。开发者可以根据自己的需求编写新的插件,处理自定义的注解,实现更个性化的功能。 6. **集成开发环境支持**:虽然XDoclet最初是在命令行下使用的,但...

    nagios-plugins-1.4.13.tar.gz.gz

    Nagios的核心在于其强大的插件机制,而nagios-plugins-1.4.13就是这些插件的一个重要版本。本文将深入探讨nagios-plugins-1.4.13及其在Nagios监控体系中的作用。 一、Nagios插件概述 Nagios插件是Nagios系统功能的...

    Plugins.zip

    Unreal Engine的插件系统允许开发者根据项目需求创建或安装第三方插件,这些插件可以是图形用户界面(GUI)的增强,如新的编辑器窗口、按钮或工具栏按钮,也可以是动画系统、物理模拟或其他游戏机制的扩展。...

    Sublime-APICloud-Plugins_v1.3.13

    6. **错误检查与调试**:集成的错误检查机制能在编写代码时即时反馈问题,方便调试和修复,提高开发质量。 7. **版本控制**:与Sublime Text3的版本控制集成,如Git,使得项目版本管理和协同更加顺畅。 8. **...

    JMeterPlugins-Extras-1.3.1.zip

    5. **其他辅助功能**:还包括了对JMeter脚本的增强,如自动重试机制、更丰富的日志记录选项等,以提高测试效率和可维护性。 总之,JMeterPlugins-Extras-1.3.1是JMeter测试者的一大福音,它通过提供一系列附加组件...

    nagios-plugins-release-2.2.1.tar

    "nagios-plugins-release-2.2.1.tar" 是Nagios插件的发布包,版本号为2.2.1。这个压缩文件包含了用于扩展Nagios核心功能的各种插件,使监控能力更为全面和深入。 Nagios的核心功能包括监测网络设备(如路由器、...

Global site tag (gtag.js) - Google Analytics