2010-11-30 2 views
2

J'ai récemment déployé mon application sur une installation glassfish sous Unix et j'ai de sérieux problèmes de performance avec une section du code. Mon application doit communiquer avec un autre système via XML, et j'utilise Jaxb pour faire le marshalling/unmarshalling des messages échangés. Chaque communication nécessite une opération de maréchal et une opération non marée. Lorsque j'exécute l'application sur mon ordinateur (Windows XP), le montant total des deux opérations est inférieur à 2 secondes, mais lorsque j'exécute la même application, avec les mêmes données, sous Unix, le montant total est proche de 20 secondes, presque 10 fois plus. J'ai recherché à fond les journaux du serveur, à la recherche d'indices, mais je n'ai rien trouvé d'utile.Problème de performance avec le marshalling/unmarshalling dans Glassfish/Unix

Voici le code pour les appels:

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

quelqu'un peut me aider à ce problème?

Cordialement,

Carlos Ferreira

Répondre

1

Le JAXBContext est threadsafe et peut être partagée. Il n'a pas besoin d'être constamment créé. Cela permettra d'améliorer les performances.

+0

Salut Blaise, merci pour votre réponse. Je comprends que le code peut être amélioré, j'essaie de le faire, mais cela n'explique toujours pas la différence de comportement entre les deux machines, Unix et Windows. –

+0

Le système d'exploitation est-il la seule différence? Qu'en est-il du processeur, de la RAM, de la version JDK, de la charge du système, etc.? –

+0

Tout est différent, je ne connais pas la configuration de la machine Unix (sachez que c'est une machine HP avec 16 Go de RAM). –

Questions connexes