axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sagara Gunathunga (Resolved) (JIRA)" <>
Subject [jira] [Resolved] (AXIS2-4974) Unnecesary JAXBContext creation during request processing
Date Thu, 01 Dec 2011 00:53:40 GMT


Sagara Gunathunga  resolved AXIS2-4974.

    Resolution: Fixed

According to SVN history this also fixed with AXIS2-3341. 
> Unnecesary JAXBContext creation during request processing
> ---------------------------------------------------------
>                 Key: AXIS2-4974
>                 URL:
>             Project: Axis2
>          Issue Type: Bug
>          Components: jaxws
>    Affects Versions: 1.5.2
>         Environment: Axis2-jaxws
>            Reporter: Victor Downs
>              Labels: bug, jaxb, performance
> Here at my job we've been using Axis2 since version 1.4.1
> During the design phase of our last project we decided to try JAXWS. The project is now
in production, but users reported slower performance overall compared to previous versions
of the same service. Another colleage reengineered the project to use ADB and tested it, obtaining
a performance increase of 10x (!!). Unfortunately we cannot revert to ADB since both ADB and
JAXWS generate the WSDL with slight (but incompatible) differences, which would require a
code re-write on the clients' side.
> Long story short, I profiled the application and noticed that a new JAXBContext was instantiated
about 4 times per client request, consuming about 60% of CPU time, so I downloaded and debugged
the axis2-jaxws module, finding what I think is a bug on the JAXBContext cache handling code.
> Around linke 272 of JAXBUtils class we find this (comments are mine):
> /*272*/                        softRef2 = jaxbMap.get(validPackagesKey); // Get validPackagesKey
from cache
> /*273*/                        if (softRef2 != null) { // Key found?
> /*274*/                            map2 = softRef.get();
> /*275*/                        }
> /*276*/                        if (map2 == null) { // Map not found?
> /*277*/                            map2 = new ConcurrentHashMap<ClassLoader, JAXBContextValue>();
> /*278*/                            softRef2 = 
> /*279*/                                new SoftReference<ConcurrentHashMap<ClassLoader,
> /*280*/                            jaxbMap.put(key, softRef2); // ERROR (I think) =>
New map inserted with key instead of validPackagesKey!!
> /*281*/                        }
> I recompiled the jar changing 'key' for 'validPackagesKey' on line 280, replaced the
original JAR and re-tested. New JAXBContext's are only created during the first invocation
and performance is now comparable to the ADB version (10 times better). We still have to make
regression tests on QA to ensure that this change doesn't affect anything else, but I though
I should let you know about this.
> The fully qualified name of the affected class is org.apache.axis2.jaxws.message.databinding.JAXBUtils,
and the version we're currently using is Axis2-1.5.2

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message