[ https://issues.apache.org/jira/browse/AXIS-2498?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12751158#action_12751158 ]
Gautam Singh commented on AXIS-2498: ------------------------------------ Has this been integrated or approved? Can this be used in production? I > TypeMappingImpl is not thread safe > ---------------------------------- > > Key: AXIS-2498 > URL: https://issues.apache.org/jira/browse/AXIS-2498 > Project: Axis > Issue Type: Bug > Components: Serialization/Deserialization > Affects Versions: 1.4 > Reporter: Manuel Mall > Attachments: AXIS-2498.patch, SynchronizedMap.java, > TypeMappingImpl.java > > > This issue originates from > http://marc.theaimsgroup.com/?l=axis-user&m=114993403032512&w=2. > Original report and Cyrille's initial response below: > ================================ > Hello Manuel, > My understanding is the Stub#createCall invokes methods on an > instance of TypeMapping that is shared by the AxisEngine via the > TypeMappingRegistry. Unfortunately, this TypeMappingImpl is not > threadsafe. > Here is a a draft patch that should fix it waiting for an official > patch. Note that I didn't succeed in reproducing the deadlock, I > patched according to my understanding of the problem. > Moreover, I preferred to send you this draft/emergency patch before > doing extensive testings. It works on my samples but I didn't look at > the impact on performances (it should be limited ). > HOW TO US THIS PATCH ? > Here is a draft patch to fix this issue. To use it, the easiest way > is to unzip axis-1.4-threadSafetyPatch.jar under /WEB-INF/classes > (classloader order). > PATCH DESCRIPTION > TypeMappingImpl.java is the only modified class. Modifications: > - use synchronized maps instead of plain HashMaps > - synchronize internalRegister() method to ensure atomicity of access > to maps in modification > - synchronize access to "namespaces" variable in setSupportedEncodings > to ensure atomicity of the clear-add sequence > Hope this helps, > Cyrille > -- > Cyrille Le Clerc > cyrille.lecl...@pobox.com > cyrille.lecl...@fr.ibm.com > +33 6.61.33.69.86 > On 6/10/06, Manuel Mall <man...@apache.org> wrote: > > I am aware that this topic has been discussed a number of times, e.g. > > http://marc.theaimsgroup.com/?l=axis-user&m=113771126214607&w=2. > > > > I followed the advice that the locator is thread safe but the stub is > > not and as I have only stateless calls I have therefore a single > > instance of the serviceLocator and a new instance of the stub for each > > call. > > > > However, when I have many simultaneous client calls I get > > random "lock-ups" of the system. The threads always end up stuck in the > > same state, that is in a call to HashMap.containsKey (see below). The > > trace snippet is taken from a 'kill -3' output. There were around 20 > > threads all with the identical trace. The only difference being the > > address in the '- locked <...> (a ...)' line, which is to be expected > > as I have separate instances of the stub. > > > > I had hoped that the fix to > > https://issues.apache.org/jira/browse/AXIS-2284 which is in Axis 1.4 > > had addressed this issue. But even after switching to Axis 1.4 the > > problem remains. So it seems to me that there is another concurrent > > HashMap modification problem left in the Axis code in the area of the > > Type Mapping Registry. > > > > Needless to say that the problem only occurs on a multi CPU system. > > > > As I am really not familiar enough with the Axis internals I am > > wondering if anyone with more insight has a suggestion how to avoid > > this. > > > > Thanks > > > > Manuel > > ----- > > "LandataWebPollRequestEventSlave:" prio=1 tid=0x8b48f0a0 nid=0x25cf > > runnable [0x8ac74000..0x8ac745f0] > > at java.util.HashMap.containsKey(HashMap.java:349) > > at java.util.HashMap$KeySet.contains(HashMap.java:873) > > at > > org.apache.axis.encoding.TypeMappingImpl.isRegistered(TypeMappingImpl.java:195) > > at > > org.apache.axis.encoding.TypeMappingDelegate.isRegistered(TypeMappingDelegate.java:136) > > at org.apache.axis.client.Call.registerTypeMapping(Call.java:2280) > > at org.apache.axis.client.Call.registerTypeMapping(Call.java:2322) > > at > > au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub.createCall(Portal_340Stub.java:2494) > > - locked <0x91cb2dc8> (a > > au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub) > > at > > au.com.anstat.oscar.landata.webservices.externalwsdl.Portal_340Stub.propertyCertificateList(Portal_340Stub.java:3979) > > at > > au.com.anstat.oscar.common.landata.Operation.doPropertyCertificateList(Operation.java:574) > > -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.