深入浅出 jackrabbit 六 文本提取(上)
2009-09-17 00:00:00 来源:WEB开发网需要注意的是getSwappedOutReader这个方法,该方法用临时文件的方式来节约内存。但不是说什么地方都可以使用这种方法的,因为提取之后的问题可能在后面才能被用到,所以暂时存放在临时文件中是可行的,这种方式在下载工具中非常常见,一般下载工具下载文件时会创建临时文件也是同样的道理。
接着,我们再来看看第二中方式触发(事实上,最开始触发这个方法的地方才是真正的第二种触发,它在什么地方呢,请参考AbstractIndex#getFinishedDocument(xx),再文本提取的第二篇文章中也有比较详细的说明):
Java代码
public boolean isExtractorFinished() {
if (!jobStarted) {
try {
/*如果任务还没有开始,那么则把job放到线程池中执行,并且将jobStarted设置为true, */
executor.execute(job);
jobStarted = true;
} catch (InterruptedException e) {
// this thread is in interrupted state
return false;
}
/*然后开始提取的操作,同时,提取的时候有一个超时时间,代表超过多长时间就直接返回,默认时间是100毫秒,在repository.xml中的 SearchIndex节点中可以配置,一旦超时之后,reader就会被写入到临时文件中,下次读取就从临时文件中读取*/
extractedText = job.getReader(timeout);
} else {
// job is already running, check for immediate result
/*如果任务已经在上次检查中被触发过了,那么就直接获取提取之后的结果,如果还没有提取完,0表示没有提取完则抛出TimeoutException,但是getReader会捕获这个异常,并返回一个null*/
extractedText = job.getReader(0);
}
/*如果extractedText并且提取的时候出现异常,超时等,那么就置其为空*/
if (extractedText == null && job.getException() != null) {
// exception occurred
extractedText = new StringReader("");
}
return extractedText != null;
}
Tags:深入浅出 jackrabbit 文本
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接