Jak Mogę używać OpenOffice w trybie serwera jako usługi wielowątkowej?

Jakie jest doświadczenie w pracy z OpenOffice w trybie serwera? Wiem, że OpenOffice nie jest wielowątkowy i teraz muszę korzystać z jego usług na naszym serwerze.
Co mogę zrobić, aby rozwiązać ten problem?

Używam Javy.

Author: Peter Mortensen, 2009-03-09

6 answers

Tak, używam OpenOffice jako serwera konwersji dokumentów.

Niestety, rozwiązaniem Twojego problemu jest wywołanie puli procesów OpenOffice.

W tym samym roku, w 1999 roku, w ramach programu JOD Converter, uruchomiony został program JOD Converter, który został uruchomiony w 1999 roku.
 5
Author: vladr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-09 21:14:02

Z aktualną wersją JODConverter (3.0-SNAPSHOT), jest to dość łatwe do obsługi wielu wątków OOo w trybie bezgłowym, ponieważ biblioteka obsługuje teraz uruchamianie kilku instancji i utrzymywanie ich w puli, po prostu podając kilka numerów portów lub nazwanych rur podczas konstruowania instancji OfficeManager:

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

om.start();

Możesz wtedy użyć biblioteki np. do konwersji dokumentów bez konieczności radzenia sobie z pulą instancji OOo w tle:

OfficeDocumentConverter converter = new OfficeDocumentConverter(om);
converter.convert(new File("src/test/resources/test.odt"), new File("target/test.pdf"));
 6
Author: Bastian Spanneberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-08 17:39:28

OpenOffice może być używany w trybie headless, ale nie został zbudowany do obsługi wielu żądań w stresującym środowisku produkcyjnym.

Używanie OpenOffice w trybie headless ma kilka problemów:

  • proces może umrzeć / stać się niedostępny.
  • jest kilka problemów z wyciekami pamięci.
  • otwarcie kilku "pracowników" OpenOffice nie skaluje się zgodnie z oczekiwaniami i wymaga pewnych poprawek, aby naprawdę mieć różne otwarte procesy (kilka kopii OpenOffice, kilka usług, działających pod różnymi użytkownikami.)

Zgodnie z sugestią, jodconverter może być użyty do uzyskania dostępu do procesu OpenOffice.

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

 2
Author: Mercer Traieste,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-06 19:31:08

Dzięki Bastian . Znalazłem inny sposób, bazując na odpowiedzi Bastiana. Otwarcie kilku portów zapewnia dostęp do tworzenia wielowątkowości. Ale bez wielu portów(wystarczy kilka) możemy poprawić wydajność poprzez zwiększenie task queue timeout Oto dokumentacja . I jeszcze jedno, postanowiliśmy nie [[2]] i stop officeManager przy każdym nawróceniu process.At koniec, rozwiązałem to zadanie dzięki takiemu podejściu:

public class JODConverter {

    private static volatile OfficeManager officeManager;
    private static volatile OfficeDocumentConverter converter;

    public static void startOfficeManager(){
        try {

            officeManager = new DefaultOfficeManagerConfiguration()
                    .setOfficeHome(new File('libre office home path'))
                    .setPortNumbers(8100, 8101, 8102, 8103, 8104 )  
                    .setTaskExecutionTimeout(600000L)    // for big files
                    .setTaskQueueTimeout(200000L)        // wait if all port were busy
                    .buildOfficeManager();
            officeManager.start();

            // 2) Create JODConverter converter
            converter = new OfficeDocumentConverter(officeManager);

        } catch (Throwable e){
            e.printStackTrace();
        }
    }

    public static void convertPDF(File inputFile, File outputFile) throws Throwable {

        converter.convert(inputFile, outputFile);
    }

    public static void stopOfficeManager(){
        officeManager.stop();
    }

}

Nazywam JODConverter ' s convertPDF, gdy konwersja jest potrzebna. Zostanie zatrzymany tylko wtedy, gdy wniosek został odrzucony.

 2
Author: Ulug'bek Ro'zimboyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 12:18:55

Vlad ma rację co do konieczności uruchamiania wielu instancji OpenOffice na różnych portach.

Chciałbym tylko dodać, że OpenOffice nie wydaje się być stabilny. Uruchamiamy 10 jego wystąpień w środowisku produkcyjnym i ustawiamy kod tak, aby ponownie spróbował z innym wystąpieniem, Jeśli pierwsza próba się nie powiedzie. W ten sposób, gdy jeden z serwerów OpenOffice ulega awarii (lub nie ulega awarii, ale nie odpowiada) produkcja nie jest naruszona. Ponieważ to ból, aby utrzymać restart serwerów na co dzień podstawa, powoli konwertujemy wszystkie nasze dokumenty do JasperReports (szczegóły w iReport). Nie jestem pewien, jak korzystasz z serwera OpenOffice; używamy go do łączenia poczty (wypełniania formularzy dla klientów). Jeśli chcesz przekonwertować rzeczy do formatu PDF, polecam iText.

 1
Author: user77978,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-06 19:38:00

Możesz spróbować tego:

Http://www.jopendocument.org/

Jest to biblioteka oparta na Javie opensource, która pozwala na pracę z dokumentami open office bez open office, eliminując w ten sposób potrzebę OOserver.

 1
Author: James Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-26 07:46:50