<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    泰仔在線

    java學習,心情日記,繽紛時刻
    posts - 100, comments - 34, trackbacks - 0, articles - 0

    Nutch插件加載分析

    Posted on 2010-04-23 11:30 泰仔在線 閱讀(485) 評論(0)  編輯  收藏 所屬分類: 云計算相關(guān)
    當某個插件需要被加載時, Nutch 會加載所有插件的相關(guān)接口到緩存,此后每個插件需要實例的時候,根據(jù)相關(guān)接口和相關(guān)接口實現(xiàn)實例在緩存內(nèi)的記錄,使用反射實現(xiàn)一個實例并返回,下面以 QueryFilter 的所有插件被加載例子進行說明。

    具體代碼參看org.apache.nutch.seacher.QueryFilters<init>

    1 )當?shù)谝淮涡枰玫?/span> QueryFilter 的一個子類的實例時,使用下面這句話試圖獲得所有的實例:

    this.queryFilters =

    (QueryFilter[]) conf.getObject(QueryFilter.class .getName());

    (2)如果為空,則試圖從插件倉庫中得到該插件的擴展點:

    ExtensionPoint point = PluginRepository.get(conf)

                .getExtensionPoint(QueryFilter.X_POINT_ID);

    PluginRepository.get(conf) 這句話中,返回插件倉庫,如果倉庫為空,會初始化所有插件:

    初始化所有插件PluginRepository.<init>

         試圖從緩存內(nèi)獲得插件倉庫。

    PluginRepository result = (PluginRepository)CACHE.get(conf);

         如果未獲得,則初始化所有插件

    result = new PluginRepository(conf);

    l         初始化以活動插件和擴展點的集合

    fActivatedPlugins = new HashMap();

          fExtensionPoints = new HashMap();

          this.conf = conf;

    l         獲得插件存放位置

          String[] pluginFolders = conf.getStrings("plugin.folders");

    l         實例化PluginManifestParser:

      PluginManifestParser manifestParser = new PluginManifestParser(conf, this);

       PluginManifestParser 是一個封裝了PluginRepository的工具類,在構(gòu)造時,分析每個插件的文件夾,把每個plugin.xml文件的內(nèi)容進行分析,記錄了所有的插件接口和插件接口內(nèi)所包含的所有實現(xiàn)類的關(guān)系。

    l         放入緩存

       CACHE.put(conf, result);

     

    Plugin.xml 描述內(nèi)容見附錄一

    (3)獲得所有QueryFilter的子類描述。

    Extension[] extensions = point.getExtensions();

     

    (4)循環(huán)獲得每個插件的兩個參數(shù),fieldName和rawFieldNames,生成每個filter插件實例。

    for (int i = 0; i < extensions.length; i++) {

              Extension extension = extensions[i];

              ArrayList fieldNames = parseFieldNames(extension, "fields");

              ArrayList rawFieldNames = parseFieldNames(extension, "raw-fields");

              if (fieldNames.size() == 0 && rawFieldNames.size() == 0) {

                if (LOG.isWarnEnabled()) {

                  LOG.warn("QueryFilter: " + extension.getId()

                         + " names no fields.");

                }

                continue;

              }

              filters[i] = (QueryFilter) extension.getExtensionInstance();

              FIELD_NAMES.addAll(fieldNames);

              FIELD_NAMES.addAll(rawFieldNames);

              conf.setObject("FIELD_NAMES", FIELD_NAMES);

              RAW_FIELD_NAMES.addAll(rawFieldNames);

              conf.setObject("RAW_FIELD_NAMES", RAW_FIELD_NAMES);

            }

     

    <?xml version="1.0" encoding="UTF-8"?>

    <!— 插件的根元素,根元素的屬性表明了一個插件的基本身份-->

    <plugin id=” 唯一身份(被插件倉庫作為身份標示)” name=”名稱” version=”版本號”

    provider=” 作者”class=”類名(可選)”>

    <!-- 以下兩個內(nèi)容中引用的類庫,都是作為本類使用反射時生成實例所需要的類庫-->

    <runtime>

        <library name=" 運行時的類庫">

             <!— 如果存在此元素,則保存到fExportedLibs(輸出類庫集合),否則存放到

    fNotExportedLibs (非輸出類庫集合)-->

             <export name="*"/>

        </library>

    </runtime>

    <requires>

        <!— 需要注意,此處所需要的類庫,包括該類庫所需的類庫,都不得在此引用本插件-->

        <import plugin=" 所需類庫"/>

    </requires>

    <extension id=" 本類的包名(從代碼中看沒有被使用)"

                  name=" 類名(從代碼中看沒有被使用)"

                  point=" 擴展點類名(即接口名)">

          <implementation id=" 實現(xiàn)擴展的唯一標識(與類名相同,被parse-plugins.xml

    作為身份表示使用)"

               class=" 實現(xiàn)擴展的類的類名"/>

          <parameter name=" 參數(shù)名" value="參數(shù)值"/>

    </extension>

    <!— 僅在nutch-extensionpoints"plugin.xml中存在,一次性加載紀錄下所有的擴展點的名稱-->

    < extension-point id=” 擴展點唯一標識”name=”擴展點名”/>

    </plugin>

    轉(zhuǎn)自:Nutch插件加載分析

    主站蜘蛛池模板: 国产传媒在线观看视频免费观看 | 人妻无码中文字幕免费视频蜜桃| 国产曰批免费视频播放免费s| 亚洲bt加勒比一区二区| 国产成人AV免费观看| 亚洲日韩国产一区二区三区| 免费VA在线观看无码| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲sm另类一区二区三区| 日韩视频免费一区二区三区| 一区二区亚洲精品精华液| 波多野结衣久久高清免费 | 亚洲精品国产品国语在线| 精品视频在线免费观看| 亚洲综合精品香蕉久久网97| 亚洲高清视频免费| 亚洲人成www在线播放| 在线观看永久免费视频网站| 色多多A级毛片免费看| 亚洲精品成人网站在线观看| 日韩免费电影网址| 亚洲国产午夜精品理论片| 在线看片人成视频免费无遮挡| 国产成人 亚洲欧洲| 国产亚洲情侣一区二区无码AV| 日本一道本不卡免费| 亚洲人成网站18禁止久久影院| 免费看的一级毛片| 国产精品免费久久久久久久久 | 久久久久久久尹人综合网亚洲| 2015日韩永久免费视频播放| 亚洲国产精品无码久久| 亚洲午夜久久久影院伊人| 国产成人精品免费视频网页大全 | 久久亚洲一区二区| 成全视频在线观看免费高清动漫视频下载 | 免费看国产精品麻豆| 久久国产精品成人免费| 亚洲色偷偷综合亚洲av78| 亚洲中文字幕不卡无码| 最近最新中文字幕完整版免费高清 |