1. 程式人生 > >Nutch外掛載入分析

Nutch外掛載入分析

   當某個外掛需要被載入時, Nutch 會載入所有外掛的相關介面到快取,此後每個外掛需要例項的時候,根據相關介面和相關介面實現例項在快取內的記錄,使用反射實現一個例項並返回,下面以 QueryFilter 的所有外掛被載入例子進行說明。 具體程式碼參看org.apache.nutch.seacher.QueryFilters<init>

( 1 )當第一次需要得到 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>
試圖從快取內獲得外掛倉庫。 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的工具類,在構造時,分析每個外掛的資料夾,把每個plugin.xml檔案的內容進行分析,記錄了所有的外掛介面和外掛介面內所包含的所有實現類的關係。 l放入快取    CACHE.put(conf, result); Plugin.xml 描述內容見附錄一
3)獲得所有QueryFilter的子類描述。 Extension[] extensions = point.getExtensions(); 4)迴圈獲得每個外掛的兩個引數,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=”類名(可選)”> <!-- 以下兩個內容中引用的類庫,都是作為本類使用反射時生成例項所需要的類庫--> <runtime>     <library name=" 執行時的類庫">          <!— 如果存在此元素,則儲存到fExportedLibs(輸出類庫集合),否則存放到 fNotExportedLibs (非輸出類庫集合)-->          <export name="*"/>     </library> </runtime> <requires>     <!— 需要注意,此處所需要的類庫,包括該類庫所需的類庫,都不得在此引用本外掛-->     <import plugin=" 所需類庫"/> </requires> <extension id=" 本類的包名(從程式碼中看沒有被使用)"               name=" 類名(從程式碼中看沒有被使用)"               point=" 擴充套件點類名(即介面名)">       <implementation id=" 實現擴充套件的唯一標識(與類名相同,被parse-plugins.xml 作為身份表示使用)"            class=" 實現擴充套件的類的類名"/>       <parameter name=" 引數名" value="引數值"/> </extension> <!— 僅在nutch-extensionpoints/plugin.xml中存在,一次性載入紀錄下所有的擴充套件點的名稱--> < extension-point id=” 擴充套件點唯一標識”name=”擴充套件點名”/>  

相關推薦

Nutch外掛載入分析

   當某個外掛需要被載入時, Nutch 會載入所有外掛的相關介面到快取,此後每個外掛需要例項的時候,根據相關介面和相關介面實現例項在快取內的記錄,使用反射實現一個例項並返回,下面以 QueryFilter 的所有外掛被載入例子進行說明。 具體程式碼參看org.apa

外掛載入導致outlook崩潰

問描述: 載入外掛導致outlook崩潰(向outlook2016拖入檔案,之間顯示)            由於對外掛的程式設計幾乎不理解就有了上文,然後不知道為啥,心裡一個盡的想著,讓外掛自己重啟就ok了,看看外掛哪

Unity 使用AVProVideo外掛載入並下載視訊

找了很長時間,關於視訊的下載,總是出現各種問題,現在解決了。   方法一: 這種方法也可以下載視訊,但是有一個問題就是:在視訊播放且下載的時候,就會出現,這個視訊正在播放,但又因為下載,視訊先下載,再播放,這個中間就會出現視訊卡段在某一個畫面中。這樣就有點不太好了,可能這個方法

Android版xx助手之天天酷跑外掛詳細分析

轉載於:紅黑聯盟   Android版xx助手之天天酷跑外掛詳細分析 圖/文 莫灰灰 背景 近些年來,移動網際網路的大肆崛起,潛移默化中影響著人們的生活和工作習慣。當騰訊的微信平臺接入手機遊戲之後,移動端的遊戲也開始火了起來,這更是改變了人們長久以來的遊戲娛樂習慣。茶餘

ViewPager懶載入分析推薦

文章說明 本文修改自AnswerZhao_ SCDN:http://blog.csdn.net/baidu_26654149/ 開發者者公眾平臺Chian-dvlp 如果你有想學習的文章直接關注公眾號(開發者原始碼)回覆,我會整理徵稿。如果你有好的文章想和大家分享歡迎投稿,

PullToRefreshListView外掛 載入重新整理

public class fragment1 extends Fragment { private String apiurl = “http://172.17.8.100/movieApi/movie/v1/findHotMovieList?count=10&page=”; pri

VirtualAPK的使用及外掛載入

VirtualAPK的使用  VirtualAPK的使用還是蠻簡單的,根據提供的文件一步一步來就可以了,但是其中有一點需要注意,那就是plugin的打包。plugin是且必須是一個apk檔案,但是我們不能像正常打包流程那樣進行打包,否則會丟擲java.lang.IllegalStateE

Android 外掛分析(3)- Activity啟動流程

在真正分析外掛化技術前,我們必須瞭解一些必要的關於Android四大元件的相關知識。 以Activity為例,我們需要了解Activity啟動過程,才能有效的進行Hook實現外掛化。 以Android 8.1為例 我們啟動一個Activity通常會使用startActi

【SSH三大框架】Hibernate基礎第十二篇:load()懶載入分析以及一對一、一對多、多對一、多對多懶載入分析

一、懶載入的定義: 懶載入:在WEB應用程式中,經常會需要查詢資料庫,系統的響應速度在很大程度上是與資料庫互動的響應。因此,如果能夠優化與資料庫的互動速度,則能夠大大提高WEB應用的響應速度。 例如:當有一個Student類和一個Teacher類。當我們載入一個學生的所有資

Android的Setting的顯示載入分析

1、Setting.java的分析 在系統中目錄: /home/quan/code/MT6750-PRB/packages/apps/Settings/src/com/android/settings/Settings.java public clas

外掛載入帶有動態庫so的apk處理

     外掛載入帶有動態庫的apk時,會報UnsatisfiedLinkError找不到動態庫的錯誤。 解決方法是在DexClassLoader中 dalvik.system.DexClassLoader.DexClassLoader(String dexPath, S

APK外掛載入資源實現

前言 外掛化程式設計現在非常的火熱,通常用來解決65536問題,外掛通常被做成不同的apk模組,每個模組專門負責某種業務邏輯,主APK通過呼叫動態載入外掛裡的程式碼和資源實現宿主和外掛的互動。為了瞭解外掛APK檔案如何使用,這裡通過讀取APK外掛的資源來實現換

React-外掛-效能分析工具

通常情況下,React在沙箱中是非常快的。但是,在你應用的一些情景中,你需要仔細推敲每一個性能點。React提供了一個函式shouldComponentUpdate,通過這個函式,你能夠給React的差異檢查新增優化程式碼。 為了給你一個你的應用總體的效能概覽,ReactPerf是一個分析工具,告訴

nutch 外掛開發[資料整理]

plugin(外掛)為nutch提供了一些功能強大的部件,nutch中很多功能都是使用外掛實現的,而使用者也可以自行開發更多適合自已的外掛。nutch使用這樣的plugin系統有什麼好處: 1:可擴充套件性       通過plugin,nutch允許任何人擴充套件它的功能

Revit外掛載入,addin檔案的設定

問題描述:Revit二次開發使用addin載入時,出現如下錯誤。 “外部工具-不存在於附加模組對應的供應商ID節點” “無法初始化附加模組“helloworld.addin”,因為附加模組登錄檔中缺少所需的供應商ID節點值。可根據供應商ID節點識別附加模組應用程式的供應商。如

Android 外掛化原理解析——外掛載入機制

上文 Activity生命週期管理 中我們地完成了『啟動沒有在AndroidManifest.xml中顯式宣告的Activity』的任務;通過Hook AMS和攔截ActivityThread中H類對於元件排程我們成功地繞過了AndroidMAnifest.xml的限

StarUML: 外掛載入失敗的解決方法 (無法逆向工程)

某次在安裝並使用StarUML的時候,遇到了一個問題:在選單Tools下面死活都找不到Java的逆向工程的選單。 仔細的查看了一下,發現最下面的小視窗Output欄中有這樣的異常資訊:Failed to load the Add-in "JavaAddIn"。 一開始,先

bootstrap之 carousel.js輪播外掛原始碼分析

公司主要客戶是外國人,主要交流語言是英語,公司裡的人都使用一口流利的中國式英語進行對話,中國式英語在不正式場合沒什麼問題,大家都聽得懂即可。可惜,我不會,所以接下來得好好練習英語口語了。相信我能夠堅持下來,起碼把中國式英語學會。 以前都是jQuery或者zepto(移動端)

nutch外掛配置

1. 介紹 參考官方文件 參考楊尚川的部落格,我補充些可能遇到的問題 2. 外掛組成 2.1 java原始檔 根據楊尚川部落格修改,然後引入幾個包 import org.jsoup.Jsoup; import org.jsoup.nodes.Document

chromium網路資源載入分析(一) 主資源載入邏輯分析 ---chromium39

最近花了點時間看了看chromium載入網頁的邏輯。由於這段內容較為複雜,現在只看了一部分。現將主資源的載入記錄下來。 注:下面提到的檔案,如果沒有指明目錄,則在third_party/WebKit目錄下 1. ContentViewCore執行loadUrl之後,經過一