2010-11-30 8 views
2

Ich habe vor kurzem meine Anwendung auf einer Glassfish-Installation unter Unix ausgeführt und ich habe schwerwiegende Leistungsprobleme mit einem Abschnitt des Codes. Meine Anwendung muss über XML mit einem anderen System kommunizieren, und ich verwende Jaxb, um die ausgetauschten Nachrichten zu mapshaltieren. Jede Kommunikation erfordert eine Marshal- und eine Unmarshal-Operation. Wenn ich die Anwendung auf meinem Computer (Windows XP) ausführen, ist die Gesamtmenge beider Vorgänge weniger als 2 Sekunden, aber wenn ich die gleiche Anwendung mit den gleichen Daten in Unix ausführen, ist die Gesamtmenge in der Nähe von 20 Sekunden, fast 10x mehr. Ich habe gründlich die Server-Logs durchsucht, auf der Suche nach einem Hinweis, konnte aber nichts nützliches finden. HierLeistungsproblem mit Marshalling/Unmarshalling in Glassfish/Unix

ist der Code für beide Anrufe:

public static <T> String marshal(T transaction) throws JAXBException, IOException { 
     JAXBContext jc = JAXBContext.newInstance(transaction.getClass().getPackage().getName()); 
     Marshaller u = jc.createMarshaller(); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     u.setProperty("jaxb.encoding", "ISO-8859-1"); 
     u.marshal(transaction, baos); 

     String xml = new String(baos.toByteArray()); 

     baos.close(); 

     return xml; 
    } 

    public static <T> T unmarshal(Class<T> docClass, String xml) throws JAXBException, IOException { 
     String packageName = docClass.getPackage().getName(); 

     InputStream is = new ByteArrayInputStream(xml.getBytes()); 

     JAXBContext jc = JAXBContext.newInstance(packageName); 
     Unmarshaller u = jc.createUnmarshaller(); 
     Object o = u.unmarshal(is); 

     is.close(); 

     return (T) o; 
    } 

Kann mir jemand helfen mit diesem Problem?

Mit freundlichen Grüßen

Carlos Ferreira

Antwort

1

Die JAXBContext ist THREAD und kann geteilt werden. Es muss nicht ständig erstellt werden. Dies wird die Leistung verbessern.

+0

Hallo Blaise, danke für deine Antwort. Ich verstehe, dass der Code verbessert werden kann, ich versuche das zu tun, aber es erklärt immer noch nicht den Unterschied des Verhaltens in beiden Maschinen, Unix und Windows. –

+0

Ist das Betriebssystem der einzige Unterschied? Wie wäre es mit Prozessor, RAM, JDK-Version, Systemlast usw.? –

+0

Alles ist anders, ich kenne nicht die Konfiguration der Unix-Maschine (weiß nur, es ist eine HP-Maschine mit 16 GB RAM). –