Как использовать OpenOffice в режиме сервера как многопоточную службу?

Каков опыт работы с OpenOffice в режиме сервера? Я знаю, что OpenOffice не многопоточен, и теперь мне нужно использовать его услуги на нашем сервере.
Что я могу сделать, чтобы преодолеть эту проблему?

Я использую Java.

Ответы

Ответ 1

Да, я использую OpenOffice в качестве сервера преобразования документов.

К сожалению, решение вашей проблемы состоит в том, чтобы создать пул процессов OpenOffice.

Разветкитель commons-pool JODConverter (до того, как он переместился на code.google.com), реализовал этот готовый для вас вариант.

Ответ 2

В текущей версии JODConverter (3.0-SNAPSHOT) довольно легко обрабатывать несколько потоков OOo в режиме безглавых, поскольку библиотека теперь поддерживает запуск нескольких экземпляров и сохранение их в пуле, просто предоставляя несколько номеров портов или именованных каналов при создании экземпляра OfficeManager:

final OfficeManager om = new DefaultOfficeManagerConfiguration()
  .setOfficeHome("/usr/lib/openoffice")
  .setPortNumbers(8100, 8101, 8102, 8103)
  .buildOfficeManager();

om.start();

Вы можете тогда использовать библиотеку, например. для преобразования документов без необходимости иметь дело с пулом экземпляров OOo в фоновом режиме:

OfficeDocumentConverter converter = new OfficeDocumentConverter(om);
converter.convert(new File("src/test/resources/test.odt"), new File("target/test.pdf"));

Ответ 3

OpenOffice можно использовать в режиме безглавых, но он не был создан для обработки множества запросов в стрессовой рабочей среде.

Использование OpenOffice в режиме безглавых имеет несколько проблем:

  • Процесс может умереть/стать недоступным.
  • Существует несколько проблем с утечками памяти.
  • Открытие нескольких "рабочих" OpenOffice не масштабируется, как ожидалось, и требует некоторой настройки, чтобы действительно иметь разные открытые транзакции (с несколькими экземплярами OpenOffice, несколькими службами, работающих под разными пользователями.)

Как и было предложено, jodconverter может использоваться для доступа к процессу OpenOffice.

http://code.google.com/p/jodconverter/wiki/GettingStarted

Ответ 4

Влад правильно говорит о необходимости запуска нескольких экземпляров OpenOffice для разных портов.

Я хотел бы добавить, что OpenOffice не кажется стабильным. Мы запускаем 10 экземпляров в производственной среде и устанавливаем код для повторного использования с другим экземпляром, если первая попытка не удалась. Таким образом, когда один из серверов OpenOffice падает (или не падает, но не отвечает), производство не влияет. Поскольку нам не следует постоянно перезапускать серверы, мы медленно конвертируем все наши документы в JasperReports (см. IReport для Детали). Я не уверен, как вы используете сервер OpenOffice; мы используем его для слияния почты (заполнение форм для клиентов). Если вам нужно преобразовать вещи в PDF, я бы рекомендовал iText.

Ответ 5

вы можете попробовать следующее:

http://www.jopendocument.org/

его открытая Java-библиотека, которая позволяет работать с открытыми офисными документами без открытого офиса, тем самым устраняя необходимость OOserver.