Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.4
-
None
-
Axis version: 1.4
Jre version: 1.5
windows server 2003 R2 Service pack 2
Websphere version : 6.1.0.25
Description
i am creating locators only once and storing those in HashMap. And at every service call (by multiple threads parallely) I am just retriving locators from HashMap and using those for creating methode call.
Code:
public class WsClientRetriever {
protected final Log log = LogFactory.getLog(getClass());
protected final HashMap<Class<? extends Service>,Object> servicesMapCache = new HashMap<Class<? extends Service>, Object>();
/**
- The url for the services
*/
private String rootUrl;
/**
- This generic method will return the WebService class using the given web service locator class
- @param serviceLocatorClass
- @return
- @throws ServiceRetrievalException if the service could not be retrieved in any ways
*/
public synchronized Object getWebService(Class<? extends Service> serviceLocatorClass) throws ServiceRetrievalException {
Object locator = servicesMapCache.get(serviceLocatorClass);
Object result = null;
// it's not in our cache, we have to get it using reflexion
try {
if (locator == null) { locator = serviceLocatorClass.newInstance(); servicesMapCache.put(serviceLocatorClass, locator); }Method[] methods = serviceLocatorClass.getMethods();
{ // we found it, we need to call it result = method.invoke(locator, getWSURL(serviceLocatorClass)); }
// we look for the method that needs an URL as parameter and starts with get
for (int i = 0; i < methods.length; i++) {
Method method = methods[i];
if (method.getName().startsWith("get") && (method.getParameterTypes().length == 1) && (method.getParameterTypes()[0] == URL.class))
}
} catch (Exception e)
// now we are sure to have it
return result;
}
/**
- Creates the URL to access the web service
- @param serviceLocatorClass service locator class name
- @return URL of the service where deployed
*/
private URL getWSURL(Class<? extends Service> serviceLocatorClass) {
String slClassName = serviceLocatorClass.getName();
String serviceClassName = slClassName.substring(slClassName.lastIndexOf('.') + 1, slClassName.lastIndexOf("ServiceLocator"));
String serviceURLString = rootUrl + serviceClassName;
URL serviceURL = null;
try
catch (MalformedURLException e)
{ log.debug("caught an exception", e); throw new WebServiceRetrievalException(serviceURLString, e); }}
/**
- @param rootUrl the rootUrl to set
*/
public void setRootUrl(String rootUrl)Unknown macro: { this.rootUrl = rootUrl; if (this.rootUrl != null && !this.rootUrl.endsWith("/")) { this.rootUrl += "/"; } }
}
*********************************************************************************************************************************
stack trace :
[8/13/09 16:55:21:077 IST] 00000026 ExceptionUtil E CNTR0020E: EJB threw an unexpected (non-declared) exception during invocation of method "onMessage" on bean "BeanId(ProPayEAR#ProPayEJB-1.2-ENGINE-SPR7-IT1-SNAPSHOT.jar#MessageProcessor, null)". Exception data: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at com.ibm.ejs.jms.listener.ServerSessionDispatcher.dispatch(ServerSessionDispatcher.java:37)
at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:96)
at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:132)
at com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:492)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: java.lang.RuntimeException: com.te.jpay.exception.EnvironmentalException: Failure trying to get the Call object; nested exception is:
java.util.ConcurrentModificationException: concurrent access to HashMap attempted by Thread[MessageListenerThreadPool : 0,5,main]
at com.te.jpay.ejb.messagesreceiver.MessagesProcessorBean.onMessage(MessagesProcessorBean.java:62)
at com.ibm.ejs.jms.listener.MDBWrapper$PriviledgedOnMessage.run(MDBWrapper.java:302)
at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:63)
at com.ibm.ejs.jms.listener.MDBWrapper.callOnMessage(MDBWrapper.java:271)
at com.ibm.ejs.jms.listener.MDBWrapper.onMessage(MDBWrapper.java:240)
at com.ibm.mq.jms.MQSession.run(MQSession.java:1691)
at com.ibm.ejs.jms.JMSSessionHandle.run(JMSSessionHandle.java:975)
at com.ibm.ejs.jms.listener.ServerSession.connectionConsumerOnMessage(ServerSession.java:957)
at com.ibm.ejs.jms.listener.ServerSession.onMessage(ServerSession.java:667)
at com.ibm.ejs.jms.listener.ServerSession.dispatch(ServerSession.java:634)
... 9 more
Caused by: com.te.jpay.exception.EnvironmentalException: Failure trying to get the Call object; nested exception is:
java.util.ConcurrentModificationException: concurrent access to HashMap attempted by Thread[MessageListenerThreadPool : 0,5,main]
at com.te.jpay.backendintegration.tietoapps.jdir.CreditMechanismHelperWsImpl.getCreditMechanism(CreditMechanismHelperWsImpl.java:75)
at com.te.jpay.backendintegration.tietoapps.jdir.CreditMechanismHelperWsImpl.assignCreditMechanism(CreditMechanismHelperWsImpl.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy73.assignCreditMechanism(Unknown Source)
at com.te.jpay.backendintegration.tietoapps.jdir.JDirectoryClientImpl.assignCreditMechanism(JDirectoryClientImpl.java:123)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy76.assignCreditMechanism(Unknown Source)
at com.te.jpay.processing.InwardDDCollectionReceiverImpl.performGroupLevelProcessing(InwardDDCollectionReceiverImpl.java:110)
at com.te.jpay.processing.InwardDDCollectionReceiverImpl.doBusinessLogic(InwardDDCollectionReceiverImpl.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy77.doBusinessLogic(Unknown Source)
at com.te.jpay.dispatch.DefaultPaymentDispatcher.dispatchMessageFromBulker(DefaultPaymentDispatcher.java:108)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:77)
at org.perf4j.aop.AbstractTimingAspect.doPerfLogging(AbstractTimingAspect.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:64)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:160)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy78.dispatchMessageFromBulker(Unknown Source)
at com.te.jpay.ejb.messagesreceiver.MessagesProcessorBean.onMessage(MessagesProcessorBean.java:49)
... 18 more
Caused by: Failure trying to get the Call object; nested exception is:
java.util.ConcurrentModificationException: concurrent access to HashMap attempted by Thread[MessageListenerThreadPool : 0,5,main]
at com.te.prodirectory.ws.client.mechanism.MechanismWSSoapBindingStub.createCall(MechanismWSSoapBindingStub.java:384)
at com.te.prodirectory.ws.client.mechanism.MechanismWSSoapBindingStub.getMechanismParameterByCodeword(MechanismWSSoapBindingStub.java:460)
at com.te.jpay.backendintegration.tietoapps.jdir.CreditMechanismHelperWsImpl.getCreditMechanism(CreditMechanismHelperWsImpl.java:73)
... 108 more
Caused by: java.util.ConcurrentModificationException: concurrent access to HashMap attempted by Thread[MessageListenerThreadPool : 0,5,main]
at java.util.HashMap.onExit(HashMap.java:226)
at java.util.HashMap.transfer(HashMap.java:690)
at java.util.HashMap.resize(HashMap.java:676)
at java.util.HashMap.addEntry(HashMap.java:1049)
at java.util.HashMap.put(HashMap.java:561)
at org.apache.axis.encoding.TypeMappingImpl.internalRegister(TypeMappingImpl.java:263)
at org.apache.axis.encoding.TypeMappingImpl.register(TypeMappingImpl.java:221)
at org.apache.axis.encoding.TypeMappingDelegate.register(TypeMappingDelegate.java:73)
at org.apache.axis.client.Call.registerTypeMapping(Call.java:2285)
at org.apache.axis.client.Call.registerTypeMapping(Call.java:2322)
at com.te.prodirectory.ws.client.mechanism.MechanismWSSoapBindingStub.createCall(MechanismWSSoapBindingStub.java:369)
... 110 more
Attachments
Issue Links
- duplicates
-
AXIS-2498 TypeMappingImpl is not thread safe
- Open