pooledtextextractor.java

来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 133 行

JAVA
133
字号
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jackrabbit.core.query.lucene;import org.apache.jackrabbit.extractor.TextExtractor;import org.slf4j.LoggerFactory;import org.slf4j.Logger;import java.io.Reader;import java.io.InputStream;import java.io.IOException;import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;import EDU.oswego.cs.dl.util.concurrent.Channel;import EDU.oswego.cs.dl.util.concurrent.SynchronousChannel;import EDU.oswego.cs.dl.util.concurrent.BoundedLinkedQueue;/** * <code>PooledTextExtractor</code> implements a text extractor that extracts * the text using a pool of background threads. */public class PooledTextExtractor implements TextExtractor {    /**     * The logger instance for this class.     */    private static final Logger log = LoggerFactory.getLogger(PooledTextExtractor.class);    /**     * The actual text extractor.     */    private final TextExtractor extractor;    /**     * The pooled executor.     */    private final PooledExecutor executor;    /**     * The timeout for the {@link TextExtractorReader}.     */    private final long timout;    /**     * Returns a pooled text extractor based on <code>extractor</code>.     *     * @param extractor the actual text extractor.     * @param poolSize  the pool size.     * @param backLog   size of the back log queue.     * @param timeout   the timeout in milliseconds until text extraction is put     *                  into the indexing queue and the fulltext index for the     *                  node is later updated when the text extractor finished     *                  its work.     */    public PooledTextExtractor(TextExtractor extractor,                               int poolSize,                               int backLog,                               long timeout) {        this.extractor = extractor;        this.timout = timeout;        Channel c;        if (backLog <= 0) {            c = new SynchronousChannel();        } else {            c = new BoundedLinkedQueue(backLog);        }        this.executor = new PooledExecutor(c, poolSize);        this.executor.setMinimumPoolSize(poolSize);        this.executor.setBlockedExecutionHandler(                new PooledExecutor.BlockedExecutionHandler() {            public boolean blockedAction(Runnable command) {                // execute with current thread and log message                log.info("Extractor pool busy, running command with " +                        "current thread: {}", command.toString());                command.run();                return true;            }        });    }    /**     * {@inheritDoc}     */    public String[] getContentTypes() {        return extractor.getContentTypes();    }    /**     * {@inheritDoc}     * <p/>     * This implementation returns an instance of {@link TextExtractorReader}.     */    public Reader extractText(InputStream stream,                              String type,                              String encoding) throws IOException {        TextExtractorJob job = new TextExtractorJob(extractor, stream, type, encoding);        return new TextExtractorReader(job, executor, timout);    }    /**     * Shuts down this pooled text extractor. This methods stops all currently     * running text extractor tasks and cleans up the pending queue (back log).     */    public void shutdown() {        executor.shutdownNow();        boolean interrupted;        do {            try {                executor.awaitTerminationAfterShutdown();                interrupted = false;            } catch (InterruptedException e) {                interrupted = true;            }        } while (interrupted);        executor.drain();    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?