1. WAS 버전 : WAS v7.0 이상
2. OS : All
3. Error 발생 시점 : Web service 를 사용하는 중 최초 call 에 의한 로딩 시간(JAXB Initialization)이 오래 걸리는 경우 2
4. Error message :
Web Service Trace 를 걸었을 경우 : *=info:com.ibm.ws.webservices.*=all:org.apache.*=all:com.ibm.ws.websvcs.*=all:com.ibm.ws.metadata.*=all
하단과 같은 ClassNotFoundException 확인 가능
[9/2/14 18:43:13:670 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils forName Exception thrown from AccessController: java.security.PrivilegedActionException: java.lang.ClassNotFoundException: com.XXXXX.interfaces.superXXXX.ObjectFactory
[9/2/14 18:43:13:670 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils checkPackage ObjectFactory Class Not Found java.lang.ClassNotFoundException: com.XXXXX.interfaces.superXXXX.ObjectFactory
[9/2/14 18:43:13:671 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils forName Exception thrown from AccessController: java.security.PrivilegedActionException: java.lang.ClassNotFoundException: com.XXXXX.interfaces.superXXXX.package-info
[9/2/14 18:43:13:671 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils checkPackage package-info Class Not Found java.lang.ClassNotFoundException: com.XXXXX.interfaces.superXXXX.package-info
[9/2/14 18:43:13:672 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils checkPackage looking for com//interfaces/superXXXX/jaxb.index
[9/2/14 18:43:13:672 KST] 000000d3 JAXBUtils 1 org.apache.axis2.jaxws.message.databinding.JAXBUtils checkPackage jaxb.index file Not Found: com//interfaces/superXXXX/jaxb.index
5. 예상 이유 : JAXB 표준에 따라 Web service 가 호출되면 XML 데이터를 Java 로 만들기 위해 JAXBContext 인스턴스를 생성합니다. 이 때, namespace 나 연관된 class 등을 통해서 JAXBClass 를 search 하기 위한 package 를 찾고 이를 통해서 package 에 있는 ObjectFactory 나 jaxb.index 를 참고해서 JAXBClass 에 대한 search 를 수행합니다. 그런데 만약 해당 package 에 JAXB 표준에 정의되어 있는 ObjectFactory 나 jaxb.index 가 없을경우 Classloader 전체를 대상으로 full search 가 진행되고 이에따라 로딩 시간이 지연됩니다.
6. 조치 방안 : JAXB 표준에 맞추어서 필요한 JAXBClass 를 바로 search 할 수 있도록 반드시 ObjectFactory 나 jaxb.index 가 있어야 하며 이를 통해 full search 를 방지해야 합니다.
7. 참고 자료
Reducing the time required to create the JAXBContext
http://www-01.ibm.com/support/knowledgecenter/SSCKBL_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cwbs_tuning_jaxbcontext.html
IBM - old/WAS 문제&해결
댓글