Adam, The following change was made to the code in CVS regarding this issue. Thanks again for providing the technique of locking the service class rather than the servlet context.
Scott Nichol ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, July 11, 2002 11:45 AM Subject: cvs commit: xml-soap/java/docs changes.html > snichol 2002/07/11 08:45:54 > > Modified: java/src/org/apache/soap/server/http ServerHTTPUtils.java > java/docs changes.html > Log: > Remove deadlock for a service that in the constructor invokes > another service when both services are at application scope. The > deadlock still occurs if both services are at session scope. > > Based on a technique submitted by Adam Moore ([EMAIL PROTECTED]). > > Revision Changes Path > 1.24 +18 -5 xml-soap/java/src/org/apache/soap/server/http/ServerHTTPUtils.java > > Index: ServerHTTPUtils.java > =================================================================== > RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/http/ServerHTTPUtils.java ,v > retrieving revision 1.23 > retrieving revision 1.24 > diff -u -r1.23 -r1.24 > --- ServerHTTPUtils.java 25 Jun 2002 05:16:27 -0000 1.23 > +++ ServerHTTPUtils.java 11 Jul 2002 15:45:53 -0000 1.24 > @@ -246,7 +246,20 @@ > } else if (scope == DeploymentDescriptor.SCOPE_SESSION) { > scopeLock = session; > } else if (scope == DeploymentDescriptor.SCOPE_APPLICATION) { > - scopeLock = context; > + try { > + scopeLock = ctxt.loadClass(className); > + } catch (ClassNotFoundException e) { > + String msg; > + if (providerType == DeploymentDescriptor.PROVIDER_JAVA || > + providerType == DeploymentDescriptor.PROVIDER_USER_DEFINED) { > + msg = "Unable to resolve target object at application scope: " + e.getMessage (); > + } else { > + msg = "Unable to load BSF at application scope: script services not available " + > + "without BSF: " + e.getMessage (); > + } > + throw new SOAPException ( > + Constants.FAULT_CODE_SERVER_BAD_TARGET_OBJECT_URI, msg, e); > + } > } else { > throw new SOAPException (Constants.FAULT_CODE_SERVER, > "Service uses deprecated object scope " + > @@ -264,10 +277,10 @@ > // locate (or create) the target object and invoke the method > if ( scopeLock == null ) scopeLock = className ; // Just pick something > synchronized (scopeLock) { > - if (scopeLock == session) { > + if (scope == DeploymentDescriptor.SCOPE_SESSION) { > // targetObject = session.getAttribute (targetID); > targetObject = session.getValue (targetID); > - } else if (scopeLock == context) { > + } else if (scope == DeploymentDescriptor.SCOPE_APPLICATION) { > targetObject = context.getAttribute (targetID); > } else { > targetObject = null; > @@ -295,10 +308,10 @@ > // remember the created instance if the scope is not REQUEST; > // in that case the object is to be thrown away after handling > // the request > - if (scopeLock == session) { > + if (scope == DeploymentDescriptor.SCOPE_SESSION) { > session.putValue (targetID, targetObject); > // session.setAttribute (targetID, targetObject); > - } else if (scopeLock == context) { > + } else if (scope == DeploymentDescriptor.SCOPE_APPLICATION) { > context.setAttribute (targetID, targetObject); > } > } catch (Exception e) { > > > > 1.32 +3 -0 xml-soap/java/docs/changes.html > > Index: changes.html > =================================================================== > RCS file: /home/cvs/xml-soap/java/docs/changes.html,v > retrieving revision 1.31 > retrieving revision 1.32 > diff -u -r1.31 -r1.32 > --- changes.html 28 Jun 2002 03:07:35 -0000 1.31 > +++ changes.html 11 Jul 2002 15:45:54 -0000 1.32 > @@ -46,6 +46,9 @@ > multi-reference serialization is supported. Added a sample to > demonstrate serialization and deserialization of a cyclic graph > of beans.</li> > + <li>Remove deadlock for a service that in the constructor invokes > + another service when both services are at application scope. The > + deadlock still occurs if both services are at session scope.</li> > </ul> > </li> > </ul> > > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>