Wiederverwendung von CXF-jaxb-Kontext zwischen mehreren Diensten

8

Ich habe mehrere Dienste, die Ergebnisse aus Tausenden von Klassen zurückgeben können.
Da jeder CXF-Service einen privaten, fast identischen JAXB-Kontext enthält, verursacht dies einen enormen Speicherverbrauch Gibt es eine Möglichkeit, den JAXB-Kontext selbst zu erstellen und zwischen den Diensten zu teilen?

    
Avner Levy 02.10.2012, 09:14
quelle

1 Antwort

3

Eine mögliche Lösung besteht darin, der Federkonfiguration Folgendes hinzuzufügen:

%Vor%

Wo der Wert nur eine Referenz auf eine Bean ist, die den globalen (einzigen) JAXBContext enthält und die folgende Methode hat:

%Vor%

Sie können weitere Details (einschließlich der CXF Guru Daniel Kulp Eingaben) im folgenden Thread sehen:
Reuse-JAXB-Kontext in Jaxws

Nach dem Testen habe ich festgestellt, dass das Setzen der aktuellen JAXBDataBinding als globale Instanz für mehrere Dienste nicht funktioniert, da es eine if-Anweisung in der initialize -Methode gibt, die zurückgibt, sobald der Kontext vom ersten Dienst gesetzt wurde.
Aus diesem Grund habe ich die Klasse erweitert und alle erforderlichen Serviceklassen und Modellklassen gesammelt. Nachdem die Initialisierung aller Dienste beendet ist, erstelle ich einen globalen Kontext mit allen erforderlichen Klassen und gebe ihn an alle Dienste zurück.
Sie können die folgende Klasse verwenden.
Nachdem alle Webdienste initialisiert wurden, rufen Sie die compileGlobalJAXBContext-Methode zum Erstellen des globalen Kontexts auf. Sie können dort andere Klassen hinzufügen, die die Anwendung benötigt und die init verpasst hat.
Vergessen Sie nicht, die Dienste für die Arbeit mit dieser Bean zu konfigurieren.

%Vor%

Aus irgendeinem seltsamen Grund ließ mich der Editor nicht das Gleichheitszeichen in der letzten Zeile von compileGlobalJAXBContext hinzufügen, also ersetzen Sie einfach das Gleichheitswort durch das entsprechende Zeichen.

    
Avner Levy 03.10.2012, 07:12
quelle

Tags und Links