Hi Jeffrey thanks for resolving this issue, it's been a tricky one :-). It would be interesting to know which JVM parameter is 'to blame'...
cheers, Sergey On Fri, Apr 2, 2010 at 3:12 PM, Jeffrey Poore (JIRA) <j...@apache.org>wrote: > > [ > https://issues.apache.org/jira/browse/CXF-2741?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12852827#action_12852827] > > Jeffrey Poore commented on CXF-2741: > ------------------------------------ > > It appears that this is some kind of subtle JVM bug. I took a grass roots > JBoss and put the war on it containing a minimal hello world service and it > runs fine without hanging. Then put our normal war on it, still runs fine. > We have some JNDI's that we add and some database connections, and it still > worked after adding those. Then I added in the extra JVM parameters we pass > in, and it hangs. I'm working on figuring out which one it is, but this is > not a CXF issue, so I'm resolving. > > Thanks for your help gentlemen. > > > JAXB hang on JBoss 5.1.0 > > ------------------------ > > > > Key: CXF-2741 > > URL: https://issues.apache.org/jira/browse/CXF-2741 > > Project: CXF > > Issue Type: Bug > > Components: JAXB Databinding > > Affects Versions: 2.2.6 > > Environment: JBoss 5.1.0.GA, Spring 2.5.6, > javax.ws.rs.jsr311-api 1.1 > > Reporter: Jeffrey Poore > > > > We have been using CXF RESTFul services for a long time on jboss-4.2.3 > with no issues. When we switched to JBoss 5.1.0.GA, things worked fine at > first, but we noticed that after a short period of uptime, requests began to > hang and time out. Debugging this issue, we tracked it to the synchronized > block in AbstractJAXBProvider.java: > > {code} > > JAXBElementProvider(AbstractJAXBProvider).getPackageContext(Class<?>) > line: 377 > > JAXBElementProvider(AbstractJAXBProvider).getJAXBContext(Class<?>, Type) > line: 354 > > JAXBElementProvider(AbstractJAXBProvider).createMarshaller(Object, > Class<?>, Type, String) line: 453 > > JAXBElementProvider.marshal(Object, Class<?>, Type, String, OutputStream, > MediaType) line: 296 > > JAXBElementProvider.writeTo(Object, Class<?>, Type, Annotation[], > MediaType, MultivaluedMap<String,Object>, OutputStream) line: 219 > > JAXRSOutInterceptor.serializeMessage(Message, Response, > OperationResourceInfo, boolean) line: 241 > > JAXRSOutInterceptor.processResponse(Message) line: 138 > > JAXRSOutInterceptor.handleMessage(Message) line: 77 > > PhaseInterceptorChain.doIntercept(Message) line: 243 > > OutgoingChainInterceptor.handleMessage(Message) line: 76 > > PhaseInterceptorChain.doIntercept(Message) line: 243 > > ChainInitiationObserver.onMessage(Message) line: 109 > > ServletDestination.invoke(ServletConfig, ServletContext, > HttpServletRequest, HttpServletResponse) line: 98 > > ServletController.invokeDestination(HttpServletRequest, > HttpServletResponse, ServletDestination) line: 406 > > ServletController.invoke(HttpServletRequest, HttpServletResponse) line: > 139 > > CXFServlet(AbstractCXFServlet).invoke(HttpServletRequest, > HttpServletResponse) line: 142 > > CXFServlet(AbstractHTTPServlet).handleRequest(HttpServletRequest, > HttpServletResponse) line: 179 > > CXFServlet(AbstractHTTPServlet).doGet(HttpServletRequest, > HttpServletResponse) line: 108 > > CXFServlet(HttpServlet).service(HttpServletRequest, HttpServletResponse) > line: 617 > > CXFServlet(AbstractHTTPServlet).service(ServletRequest, ServletResponse) > line: 159 > > ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) > line: 290 > > ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: > 206 > > ReplyHeaderFilter.doFilter(ServletRequest, ServletResponse, FilterChain) > line: 96 > > ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) > line: 235 > > ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: > 206 > > StandardWrapperValve.invoke(Request, Response) line: 235 > > StandardContextValve.invoke(Request, Response) line: 191 > > SecurityAssociationValve.invoke(Request, Response) line: 190 > > JaccContextValve.invoke(Request, Response) line: 92 > > SecurityContextEstablishmentValve.process(Request, Response, HttpEvent) > line: 126 > > SecurityContextEstablishmentValve.invoke(Request, Response) line: 70 > > StandardHostValve.invoke(Request, Response) line: 127 > > ErrorReportValve.invoke(Request, Response) line: 102 > > CachedConnectionValve.invoke(Request, Response) line: 158 > > StandardEngineValve.invoke(Request, Response) line: 109 > > CoyoteAdapter.service(Request, Response) line: 330 > > Http11Processor.process(Socket) line: 829 > > Http11Protocol$Http11ConnectionHandler.process(Socket) line: 598 > > JIoEndpoint$Worker.run() line: 447 > > Thread.run() line: 619 > > {code} > > Specifically, this method: > > {code} > > public JAXBContext getPackageContext(Class<?> type) { > > if (type == null || type == JAXBElement.class) { > > return null; > > } > > synchronized (packageContexts) { > > String packageName = PackageUtils.getPackageName(type); > > JAXBContext context = packageContexts.get(packageName); > > if (context == null) { > > try { > > context = JAXBContext.newInstance(packageName, > type.getClassLoader(), cProperties); > > packageContexts.put(packageName, context); > > } catch (JAXBException ex) { > > LOG.fine("Error creating a JAXBContext using > ObjectFactory : " > > + ex.getMessage()); > > return null; > > } > > } > > return context; > > } > > } > > {code} > > It appears that something is holding on to the synchronized lock on > packageContexts and thus calls just block. Any help on this would be > appreciated. > > We are just trying to call a simple CXF service that uses JSR-311 > annotated methods and uses JAXB as the data binding. The class and method > being called look like this: > > {code} > > @Path("/LDAP/") > > public class LdapServicesImpl implements LdapServices { > > @GET > > @Path("/lookup/") > > @Produces("text/xml") > > @Override > > public SearchResult lookupUser(@Context UriInfo ui) { > > String userid = ui.getQueryParameters().getFirst("uid"); > > SearchResult result = getLDAPInfo(userid); > > ... > > return result; > > } > > {code} > > SearchResult is our JAXB annotated class: > > {code} > > @XmlAccessorType(XmlAccessType.FIELD) > > @XmlType(name = "SearchResult", namespace = "urn:ldap", propOrder = { > > "ldapUsers", > > "error" > > }) > > @XmlRootElement(name = "searchResult", namespace = "urn:ldap") > > public class SearchResult > > implements Serializable > > { > > private final static long serialVersionUID = 987654321L; > > @XmlElement(namespace = "urn:ldap") > > protected LdapUsers ldapUsers; > > @XmlElement(namespace = "urn:ldap") > > protected String error; > > ... getters and setters ... > > } > > LdapUsers: > > @XmlAccessorType(XmlAccessType.FIELD) > > @XmlType(name = "LdapUsers", namespace = "urn:ldap", propOrder = { > > "ldapUsers" > > }) > > public class LdapUsers > > implements Serializable > > { > > private final static long serialVersionUID = 987654321L; > > @XmlElement(name = "ldapUser", namespace = "urn:ldap") > > protected List<LdapUser> ldapUsers; > > ... getters and setters ... > > } > > LdapUser: > > @XmlAccessorType(XmlAccessType.FIELD) > > @XmlType(name = "LdapUser", namespace = "urn:ldap", propOrder = { > > "id", > > "fullName", > > "firstName", > > "middleName", > > "lastName", > > "address", > > "city", > > "state", > > "zip", > > "entityCode", > > "telephone", > > "title", > > "dn", > > "mail", > > "emsrowid", > > "community", > > "objectClasses", > > "groups" > > }) > > public class LdapUser > > implements Serializable > > { > > private final static long serialVersionUID = 987654321L; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String id; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String fullName; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String firstName; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String middleName; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String lastName; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String address; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String city; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String state; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String zip; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String entityCode; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String telephone; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String title; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String dn; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String mail; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String emsrowid; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected String community; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected ObjectClasses objectClasses; > > @XmlElement(namespace = "urn:ldap", required = true) > > protected Groups groups; > > ... getters and setters ... > > } > > {code} > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > >