Frage

Was ist die Erfahrung in der Arbeit mit Openoffice im Server-Modus? Ich weiß, dass Openoffice nicht multithreaded und jetzt muss ich seine Dienste in unserem Server verwenden.
Was kann ich tun, um dieses Problem zu überwinden?

Ich bin mit Java.

War es hilfreich?

Lösung

Ja, ich bin mit Openoffice als Dokumentkonvertierungsserver.

Leider ist die Lösung für Ihr Problem, einen Pool von Openoffice-Prozessen, um zu laichen.

Der commons-pool Zweig der JODConverter (bevor es code.google.com bewegt) implementiert diese out-of-the-box für Sie.

Andere Tipps

Mit der aktuellen Version von JODConverter (3.0-SNAPSHOT), es ist ganz einfach zu handhaben mehrere Threads von OOo in headless-Modus, wie die Bibliothek unterstützen nun mehrere Instanzen starten und sie in einem Pool zu halten, um nur einige Portnummern oder Named Pipes zu liefern, wenn eine OfficeManager Instanz Konstruktion:

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

om.start();

Sie können uns dann die Bibliothek z.B. zum Konvertieren von Dokumenten, ohne sich mit dem Pool von OOo Instanzen im Hintergrund beschäftigen:

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

Danke Bastian . Ich fand einen anderen Weg, basierend auf Bastian Antwort. Öffnen mehrerer Ports es ermöglicht den Zugriff Multithreads zu erstellen. Aber ohne viele Ports (enought mehr) können wir performence durch Erhöhung task queue timeout verbessern hier ist eine Dokumentation . Und eine Sache, wieder haben wir beschlossen, nicht start und stop officeManager auf jeder convertion process.At das Ende, ich löste diese Aufgabe durch diesen Ansatz:

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();
    }

}

Ich nenne JODConverter des convertPDF wenn convertion Bedarf. Es wird nur gestoppt werden, wenn die Anwendung nach unten ist.

Open Office kann in kopflos Modus verwendet werden, aber es wurde nicht gebaut viele Anfragen in einer stressigen Produktionsumgebung zu behandeln.

Mit Openoffice in Headless Modus verfügt über mehrere Probleme:

  • Der Prozess könnte die / nicht mehr zur Verfügung.
  • Es gibt mehrere Speicherlecks Probleme.
  • Öffnen mehrere Openoffice „Arbeiter“ nicht wie erwartet Maßstab und einige Optimierungen muss wirklich haben verschiedene offene proccesses (mit mehreren Openoffice Kopien, mehrere Dienste unter verschiedenen Benutzern ausgeführt wird.)

Wie bereits angedeutet, kann JODConverter verwendet werden, um den Openoffice-Prozess zugreifen zu können.

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

Vlad ist richtig darüber, dass mehrere Instanzen von Openoffice auf verschiedene Ports ausgeführt werden.

Ich möchte nur hinzufügen, dass Openoffice nicht stabil zu sein scheint. Wir betreiben 10 Instanzen davon in einer Produktionsumgebung und stellen Sie den Code mit einem anderen Fall erneut versuchen, wenn der erste Versuch fehlschlägt. Auf diese Weise, wenn eine des Openoffice-Server abstürzt (oder nicht abstürzt, aber reagiert nicht entweder) Produktion nicht beeinträchtigt wird. Da es sich um ein auf einer täglichen Basis zu halten Schmerzen die Server neu zu starten, sind wir langsam konvertieren alle unsere Dokumente an Jasper (siehe iReport für Details). Ich bin nicht sicher, wie Sie den Openoffice-Server verwenden; Wir verwenden es für Mail-Zusammenführung (Formulare für Kunden ausfüllen). Wenn Sie die Dinge in PDF konvertieren müssen, würde ich empfehlen iText .

Sie können versuchen, diese:

http://www.jopendocument.org/

Es ist eine Open-Source-Java-basierte Bibliothek, die Sie mit offenen Office-Dokumenten ohne offenes Büro arbeiten kann, wodurch die Notwendigkeit für die OOserver zu entfernen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top