]
Richard Opalka reopened JBWS-1857:
----------------------------------
Assignee: (was: Thomas Diesler)
JAXB context cache isn't properly scoped.
The JAXB context cache should be e.g. property of jaxws service
and not thread property as it is now.
JAXBContext created for every wrapper type
------------------------------------------
Key: JBWS-1857
URL:
http://jira.jboss.com/jira/browse/JBWS-1857
Project: JBoss Web Services
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: jbossws-native
Affects Versions: jbossws-1.2.1, jbossws-2.0.1
Reporter: Johann Gyger
Attachments: jbossws-src-1.2.1.GA-jaxb-context.patch,
jprobe_service_get_port.txt, StammdatenService.wsdl
service.getPort() may become an expensive operation (i.e., several seconds) when using a
non-trivial WSDL with complex types. We have been able to track down our performance
problems to an incorrect usage of JAXB-RI in JBOSS-JAXWS. According to
https://wsit.dev.java.net/servlets/ReadMsg?list=dev&msgNo=66 creating new instances of
JAXBContext is an expensive operation.
In our WSDL we counted 28 instance creations of JAXBContext. Most of them are created
through the following call hierarchy:
JAXBContext.newInstance(Class[], Map<String,?>) line: 570
JAXBContext.newInstance(Class...) line: 522
JAXBAccessor$1.create(Class) line: 67
JAXBAccessor$1.create(ParameterMetaData) line: 54
ParameterMetaData.eagerInitialize() line: 470
OperationMetaData.eagerInitialize(List<Method>) line: 469
ClientEndpointMetaData(EndpointMetaData).eagerInitializeOperations() line: 516
ClientEndpointMetaData(EndpointMetaData).initializeInternal() line: 502
ClientEndpointMetaData(EndpointMetaData).eagerInitialize() line: 490
JAXWSClientMetaDataBuilder.rebuildEndpointMetaData(EndpointMetaData, Class<?>)
line: 292
ServiceDelegateImpl.getPortInternal(EndpointMetaData, Class<T>) line: 274
ServiceDelegateImpl.getPort(QName, Class<T>) line: 200
A JProbe analysis (see attached file) revealed that actually most of the time (96.4%) of
service.getPort() is spent in JAXBContext.newInstance(). Please see attached JProbe
report.
Compared to JAX-WS RI (Metro) the performance of service.getPort() is extremely bad.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: