Very sorry, last minute change bug. Please find updated patch
> -----Original Message----- > From: Pavel Ausianik > Sent: Wednesday, November 06, 2002 6:17 PM > To: '[EMAIL PROTECTED]' > Subject: RE: Performance reserve > > > Hello, > > Thinking further, there is a possibility in the > SOAPMappingRegistry create a registry without parent, there > are just no sample how to use it. > So I have updated the sample, ComplexRequest. Maybe there > are some performance FAQ which could be updated? > > Also I modified SOAPMappingRegistry , so it only creates > necessary instances of the base registries. > > And finally I modified DeploymentDescriptor, so for > Application Scope services, it creates a registry without parent. > Please find patch attached > > Thanks, > Pavel > > > > > -----Original Message----- > > From: Pavel Ausianik > > Sent: Tuesday, November 05, 2002 8:37 PM > > To: '[EMAIL PROTECTED]' > > Subject: Performance reserve > > > > > > Hello, > > > > I have found another good source of the performance reserve, > > which could be further 5-6% to current state, however I'm not > > sure how to implement this. > > > > The problem: XMLJavaMappingRegistry.getKey takes up to 6-10% > > of all time (it also includes QNAme.toString(), etc.) > > > > Simple println inserted into this function shows that a > > request for every key comes twice apart, on any call, both in > > the client & server, always going to the parent registry as > > in following example: > > > > protected Deserializer queryDeserializer_(QName elementType, > > String encodingStyleURI) > > { > > Deserializer ds = super.queryDeserializer_(elementType, > > encodingStyleURI); > > if (ds != null) { > > return ds; > > } > > if (parent != null) { > > ds = parent.queryDeserializer_(elementType, encodingStyleURI); > > if (ds != null) { > > return ds; > > } > > } > > return null; > > } > > > > the same occurs in the querySerializer_, and queryJavaType_ > > calls. First call fails since registry created does not have > > entries for > > At least this happens in the sample addressbook. Since this > > occurs both on the server and client, that mean that registry > > is not organized well in library itself. Maybe sample just > > does not show how better the SOAPMappingRegistry should be > > organized. Maybe for those users who have found that > > SOAPMappingRegistry should be shared between all Calls we > > should create not Registry with custom mapping + parent > > Registry, but copy of standard registry , without parent at > > all (for users who creates registry every time it is not > > acceptable). ANother solution could make registry "learn" > > from parent all mapping. > > > > Here is a output of printlns inserted in both getKey > > functions (with Class and Qname), made for a single call of > getAddress > > > > CKEY org.apache.soap.rpc.Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > CKEY org.apache.soap.rpc.Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > CKEY java.lang.String + http://schemas.xmlsoap.org/soap/encoding/ > > CKEY java.lang.String + http://schemas.xmlsoap.org/soap/encoding/ > > CKEY java.lang.String + http://schemas.xmlsoap.org/soap/encoding/ > > CKEY java.lang.String + http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY urn:xml-soap-address-demo:address + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY urn:xml-soap-address-demo:address + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY urn:xml-soap-address-demo:phone + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY urn:xml-soap-address-demo:phone + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:int + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://schemas.xmlsoap.org/soap/envelope/:Parameter + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > QKEY http://www.w3.org/2001/XMLSchema:string + > > http://schemas.xmlsoap.org/soap/encoding/ > > > > Best regards, > > Pavel > > > > > > > > >
Index: ComplexRequest.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/samples/addressbook/ComplexRequest.java,v retrieving revision 1.1 diff -u -r1.1 ComplexRequest.java --- ComplexRequest.java 4 Nov 2002 19:05:53 -0000 1.1 +++ ComplexRequest.java 6 Nov 2002 16:03:12 -0000 @@ -92,7 +92,8 @@ // Number of running threads public static int numberRequests; - static SOAPMappingRegistry smr = new SOAPMappingRegistry(); + + static SOAPMappingRegistry smr = null; static String encodingStyleURI; static URL url; @@ -240,8 +241,8 @@ maxIterations = Integer.parseInt(args[2 - offset]); int numThreads = Integer.parseInt(args[3 - offset]); - - smr = new SOAPMappingRegistry(); + // Create registry, without parent, to improve performance + smr = new SOAPMappingRegistry(null, Constants.NS_URI_2001_SCHEMA_XSD); BeanSerializer beanSer = new BeanSerializer(); // Map the types. @@ -278,4 +279,3 @@ System.out.println("Time to run " + maxIterations + " requests is " + ((time2-time)/1000.0d) + " sec "); } } - Index: SOAPMappingRegistry.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/encoding/SOAPMappingRegistry.java,v retrieving revision 1.33 diff -u -r1.33 SOAPMappingRegistry.java --- SOAPMappingRegistry.java 6 Nov 2002 15:11:08 -0000 1.33 +++ SOAPMappingRegistry.java 6 Nov 2002 16:06:55 -0000 @@ -420,24 +420,37 @@ * 2001 base registry is returned. */ public static SOAPMappingRegistry getBaseRegistry (String schemaURI) { - synchronized (SOAPMappingRegistry.class) { - if (baseReg1999 == null) { - baseReg1999 = - new SOAPMappingRegistry (null, Constants.NS_URI_1999_SCHEMA_XSD); - baseReg2000 = - new SOAPMappingRegistry (null, Constants.NS_URI_2000_SCHEMA_XSD); - baseReg2001 = - new SOAPMappingRegistry (null, Constants.NS_URI_2001_SCHEMA_XSD); + if (schemaURI.equals(Constants.NS_URI_1999_SCHEMA_XSD)) { + if (baseReg1999 == null) { + synchronized (SOAPMappingRegistry.class) { + if (baseReg1999 == null) { + baseReg1999 = + new SOAPMappingRegistry (null, +Constants.NS_URI_1999_SCHEMA_XSD); + } + } + } + return baseReg1999; + } + if (schemaURI.equals( Constants.NS_URI_2000_SCHEMA_XSD)) { + if (baseReg2000 == null) { + synchronized (SOAPMappingRegistry.class) { + if (baseReg2000 == null) { + baseReg2000 = + new SOAPMappingRegistry (null, +Constants.NS_URI_2000_SCHEMA_XSD); + } + } + } + return baseReg2000; + } + if (baseReg2001 == null) { + synchronized (SOAPMappingRegistry.class) { + if (baseReg2001 == null) { + baseReg2001 = + new SOAPMappingRegistry (null, +Constants.NS_URI_2001_SCHEMA_XSD); + } + } } - } - - if (schemaURI.equals(Constants.NS_URI_1999_SCHEMA_XSD)) { - return baseReg1999; - } else if (schemaURI.equals(Constants.NS_URI_2000_SCHEMA_XSD)) { - return baseReg2000; - } else { return baseReg2001; - } } /** Set the default encoding style. If the query*() calls D:\>if patch == "" goto end D:\>type patch Index: DeploymentDescriptor.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java,v retrieving revision 1.35 diff -u -r1.35 DeploymentDescriptor.java --- DeploymentDescriptor.java 30 Aug 2002 03:22:54 -0000 1.35 +++ DeploymentDescriptor.java 6 Nov 2002 16:35:12 -0000 @@ -140,12 +140,12 @@ { return checkMustUnderstands; } - + public void setCheckMustUnderstands(boolean doIt) { checkMustUnderstands = doIt; } - + /** * Type of the service: message or procedural service. Defaults to being * a procedural service. The difference is that if its procedural then @@ -487,7 +487,7 @@ "missing in deployment descriptor"); } dd.setID (id); - + // If we've been marked as checking mustUnderstands, do it. String checkMustUnderstands = DOMUtils.getAttribute(root, "checkMustUnderstands"); if (checkMustUnderstands != null) { @@ -657,7 +657,7 @@ methods[i] = st.nextToken (); } dd.setMethods (methods); - + //read the fault listeners nl = root.getElementsByTagNameNS (Constants.NS_URI_XML_SOAP_DEPLOYMENT, "faultListener"); @@ -746,7 +746,7 @@ lis.append("]"); StringBuffer opts = new StringBuffer(); - if (props != null) + if (props != null) opts.append( props.toString() ); return header + body + "methods='" + methodsStrbuf + "', " + @@ -798,14 +798,21 @@ } if (smr == null) { - SOAPMappingRegistry baseReg = SOAPMappingRegistry.getBaseRegistry ( - Constants.NS_URI_CURRENT_SCHEMA_XSD); if (maps == null) { - dd.setCachedSMR (baseReg); + SOAPMappingRegistry baseReg = SOAPMappingRegistry.getBaseRegistry ( + Constants.NS_URI_CURRENT_SCHEMA_XSD); + dd.setCachedSMR (baseReg); return baseReg; } else { - smr = new SOAPMappingRegistry (baseReg); - } + if (dd.getScope() == SCOPE_APPLICATION) { + // If scope is application, use full registry + smr = new SOAPMappingRegistry (null, + Constants.NS_URI_CURRENT_SCHEMA_XSD); + } else { + // Otherwise use registry with parent + smr = new SOAPMappingRegistry (); + } + } } } @@ -816,7 +823,7 @@ try { step = 0; Class javaType = null; - if (tm.javaType != null) + if (tm.javaType != null) javaType = ctx.loadClass( tm.javaType ); step = 1; Serializer s = null; Index: DeploymentDescriptor.java =================================================================== RCS file: /home/cvspublic/xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java,v retrieving revision 1.35 diff -u -r1.35 DeploymentDescriptor.java --- DeploymentDescriptor.java 30 Aug 2002 03:22:54 -0000 1.35 +++ DeploymentDescriptor.java 6 Nov 2002 16:35:12 -0000 @@ -140,12 +140,12 @@ { return checkMustUnderstands; } - + public void setCheckMustUnderstands(boolean doIt) { checkMustUnderstands = doIt; } - + /** * Type of the service: message or procedural service. Defaults to being * a procedural service. The difference is that if its procedural then @@ -487,7 +487,7 @@ "missing in deployment descriptor"); } dd.setID (id); - + // If we've been marked as checking mustUnderstands, do it. String checkMustUnderstands = DOMUtils.getAttribute(root, "checkMustUnderstands"); if (checkMustUnderstands != null) { @@ -657,7 +657,7 @@ methods[i] = st.nextToken (); } dd.setMethods (methods); - + //read the fault listeners nl = root.getElementsByTagNameNS (Constants.NS_URI_XML_SOAP_DEPLOYMENT, "faultListener"); @@ -746,7 +746,7 @@ lis.append("]"); StringBuffer opts = new StringBuffer(); - if (props != null) + if (props != null) opts.append( props.toString() ); return header + body + "methods='" + methodsStrbuf + "', " + @@ -798,14 +798,21 @@ } if (smr == null) { - SOAPMappingRegistry baseReg = SOAPMappingRegistry.getBaseRegistry ( - Constants.NS_URI_CURRENT_SCHEMA_XSD); if (maps == null) { - dd.setCachedSMR (baseReg); + SOAPMappingRegistry baseReg = SOAPMappingRegistry.getBaseRegistry ( + Constants.NS_URI_CURRENT_SCHEMA_XSD); + dd.setCachedSMR (baseReg); return baseReg; } else { - smr = new SOAPMappingRegistry (baseReg); - } + if (dd.getScope() == SCOPE_APPLICATION) { + // If scope is application, use full registry + smr = new SOAPMappingRegistry (null, + Constants.NS_URI_CURRENT_SCHEMA_XSD); + } else { + // Otherwise use registry with parent + smr = new SOAPMappingRegistry (); + } + } } } @@ -816,7 +823,7 @@ try { step = 0; Class javaType = null; - if (tm.javaType != null) + if (tm.javaType != null) javaType = ctx.loadClass( tm.javaType ); step = 1; Serializer s = null;
-- To unsubscribe, e-mail: <mailto:soap-dev-unsubscribe@;xml.apache.org> For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org>