摘要:
本文要分析的是Heritrix3.1.0的Frontier组件,先熟悉一下相关的UML类图通过浏览该图,我们可以清楚的看出Frontier组件的相关接口和类的继承和调用关系,不必我再文字描述了在分析BdbFrontier类的相关方法之前,有必要熟悉一下在系统环境中该对象的初始状态,以及状态的改变这部分内容需要回顾Heritrix 3.1.0 源码解析(六)一文,本人就不在这里重复了BdbFrontier类重要的有几个方法,分别是添加CrawlURI,获取CrawlURI,完成CrawlURIvoid schedule(CrawlURI curi)CrawlURI next()void fini 阅读全文
2013年4月19日 #
摘要:
Heritrix3.1.0系统里面Frontier组件管理链接队列,采用的是BDB数据库,利用BDB数据库来存储CrawlURI对象,首先我们来看Heritrix3.1.0是怎么实现BDB模块的我们知道,创建BDB数据库首先要构建数据库环境,Heritrix3.1.0的BDB模块里面EnhancedEnvironment类实现了对BDB数据库环境的封装(继承自je的Environment),如果你不熟悉BDB数据库,可以先google一下吧EnhancedEnvironment类的源码如下:/** * Version of BDB_JE Environment with additional 阅读全文
摘要:
本文接着分析存储CrawlURI curi的队列容器,最重要的是BdbWorkQueue类及BdbMultipleWorkQueues类BdbWorkQueue类继承自抽象类WorkQueue,抽象类WorkQueue最重要的方法是long enqueue(final WorkQueueFrontier frontier,CrawlURI curi)CrawlURI peek(final WorkQueueFrontier frontier)void dequeue(final WorkQueueFrontier frontier, CrawlURI expected)分别为添加CrawlUR 阅读全文
摘要:
本文接下来分析上文涉及到的ObjectIdentityCache接口及相关对象先熟悉一下继承和依赖关系,简要UML类图如下:我们先来了解一下ObjectIdentityCache接口的源码(泛型接口)/** * An object cache for create-once-by-name-and-then-reuse objects. * * Objects are added, but never removed. Subsequent get()s using the * same key will return the exact same object, UNLESS all ... 阅读全文
摘要:
本文分析BdbFrontier对象的相关状态和方法BdbFrontier类继承自WorkQueueFrontier类 WorkQueueFrontier类继承自AbstractFrontier类BdbFrontier类的void start()方法如下(在其父类WorkQueueFrontier里面):org.archive.crawler.frontier.BdbFrontier org.archive.crawler.frontier.WorkQueueFrontierpublic void start() { if(isRunning()) { ... 阅读全文
摘要:
我们从上文的CrawlController对象可以看到,爬虫任务是通过ToePool类建立线程ToeThread的线程池的我们在了解采集线程池的相关类之前,先有必要了解一下CrawlController类,因为我们的爬虫操作指令最终是通过调用CrawlController对象的方法的CrawlController类的成员和方法都是直接与采集任务相关的,好比控制中心// ApplicationContextAware implementation, for eventing AbstractApplicationContext appCtx; public void setAppli... 阅读全文
摘要:
如果孤立的发现某类的方法,不免使我们难以理解它的含义;当我们将对象的相互作用串起来的时候,更容易理解方法的意图在对象之间相互通信时,首先应该了解对象的状态;最基本的入手方式就是 了解它的构造函数或者初始化方法以及执行相关方法后状态的变化,其次是相应方法的输入参数(发送消息)当我们在后台建立一个爬行任务时,在Heritrix3.1.0系统里面对应一个爬行任务类,当前爬行任务的所有属性和行为都封装在这个爬行任务类里面这个类为CrawlJob(org.archive.crawler.framework),我们先来熟悉一下该类的相关成员和方法爬行任务CrawlJob类实现了两接口Comparable& 阅读全文