0

基本上,我们有一个名为 OfficeManger 的类,它充当连接到 openoffice 软件的驱动程序,它需要一直连接,以便我们可以使用转换器来转换文档。我们在 Web 应用程序启动期间启动 OpenOfficeProcess,它可以正常启动。但看起来在 init() 中运行的执行程序在不同的线程上,我们无法获取 OfficeManager 的运行实例。如何在自己的线程中运行,以便我可以从不同的类调用此实例以使用转换器方法?

    OfficeDocumentConverter converter = OpenOfficeProcessor.getInstance().getDocumentConverter();

    converter.convert(inputFile, outputFile, pdf);

开放式办公处理器

public class OpenOfficeProcessor  {

    private static final OpenOfficeProcessor INSTANCE = new OpenOfficeProcessor();
    static ExecutorService executor = Executors.newSingleThreadExecutor();
    private final OfficeManager officeManager;
    private final OfficeDocumentConverter documentConverter;

    public OpenOfficeProcessor(){
        DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
        String homePath = ConfigurationManager.getApplicationProperty(ConfigurationManager.OPENOFFICE_HOME_PATH);
        if(homePath != null){
            configuration.setOfficeHome(homePath);
        } else {
            LOG.error("OpenOffice.home.path is not set in the properties file");
            new Throwable("Please set OPENOFFICE.HOME.PATH parameter in the properties file");
        }
        String port = ConfigurationManager.getApplicationProperty(ConfigurationManager.OPENOFFICE_LISTENER_PORT);
        if( port != null){
            configuration.setPortNumber(Integer.parseInt(port));
        }else {
            LOG.error("openoffice.listener.port is not set in the properties file");
        }
        String executionTimeout = ConfigurationManager.getApplicationProperty(ConfigurationManager.OPENOFFICE_EXECUTION_TIMEOUT);
        if(executionTimeout != null){
            configuration.setTaskExecutionTimeout(Long.parseLong(executionTimeout));
        }
        String pipeNames = ConfigurationManager.getApplicationProperty(ConfigurationManager.OPENOFFICE_PIPES_NAMES);
        if(ConfigurationManager.getApplicationProperty(ConfigurationManager.OPENOFFICE_PIPES_NAMES)!= null){
            configuration.setPipeNames(pipeNames);
        }

        officeManager = configuration.buildOfficeManager();
        documentConverter = new OfficeDocumentConverter(officeManager);
    }
    public static OpenOfficeProcessor getInstance()
    {
        return INSTANCE;
    }


    protected static void init() {
        LOG.debug("Starting the open office listener...");
        executor.submit(new Callable(){

            @Override
            public Object call() throws Exception {
                OpenOfficeProcessor.getInstance().officeManager.start();
                return null;
            }
        });

    }

    protected static void destroy() {
        LOG.debug("Stopping the open office listener...");
        OpenOfficeProcessor.getInstance().officeManager.stop();
    }

    public OfficeManager getOfficeManager() {
        return officeManager;
    }

    public OfficeDocumentConverter getDocumentConverter() {
        return documentConverter;
    }

}

办公室主管

public interface OfficeManager {

    void execute(OfficeTask task) throws OfficeException;

    void start() throws OfficeException;

    void stop() throws OfficeException;

    boolean isRunning();
}
4

0 回答 0