Hi All,
 
I am using geotools to generate images based on a remote WMS, and a local WFS.
To increase throughput, I am attempted to make the software multithreaded (in a 
non application server environment).
However I think I am getting deadlock (well maybe not deadlock, but the threads 
seem to be stuck waiting for one of the threads waiting to download XML schemas 
over the internet).
 
On initial startup of WebMapServer object (each thread keeps it's own instance 
of a WebMapServer for performance - downloading XML schemas in particularly 
time consuming) it seems to download lots of XML schemas from the 
getCapabilities document for the WMS.
 
Ideally I would like to cache these on the file system, is this possible, if so 
how? This may alleviate the problem in terms of time (it seems to take a long 
time) taken to download the various XML schemas. But would be preferential 
anyway to reduce startup time.
 
Secondly each WebMapServer object seems to be waiting on a lock on 
org.geotools.xml.SchemaFactory.getInstance which is locked by one of the 
WebMapServer objects. 
Does this have to be the case, or can I remove this area as a bottle neck? Is 
this is a bug? I can see that SchemaFactory.getInstance seems to be intended to 
be thread safe.
 
I have pasted the stack of some of the example threads below, and any 
help/advice would be very much appreciated!!
 
Thanks
 
Norman
 
 
THREAD with LOCK
 
"Piper Processor 3" prio=1 tid=0x0966e9d0 nid=0x3b4f runnable 
[0xe7c8f000..0xe7c90130]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:256)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:313)
        - locked <0xeabe3e70> (a java.io.BufferedInputStream)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:606)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:554)
        at 
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:936)
        - locked <0xeabe2480> (a sun.net.www.protocol.http.HttpURLConnection)
        at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown 
Source)
        at 
org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown 
Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:255)
        at 
org.geotools.xml.SchemaFactory.getRealInstance(SchemaFactory.java:305)
        - locked <0xeb52acf0> (a org.geotools.xml.SchemaFactory)
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:265)
        - locked <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.xsi.SchemaHandler.compress(SchemaHandler.java:430)
        at 
org.geotools.xml.handlers.xsi.RootHandler.getSchema(RootHandler.java:117)
        at org.geotools.xml.XSISAXHandler.getSchema(XSISAXHandler.java:257)
        at 
org.geotools.xml.SchemaFactory.getRealInstance(SchemaFactory.java:310)
        - locked <0xeb52acf0> (a org.geotools.xml.SchemaFactory)
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:265)
        - locked <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.xsi.SchemaHandler.compress(SchemaHandler.java:385)
        at 
org.geotools.xml.handlers.xsi.RootHandler.getSchema(RootHandler.java:117)
        at org.geotools.xml.XSISAXHandler.getSchema(XSISAXHandler.java:257)
        at 
org.geotools.xml.SchemaFactory.getRealInstance(SchemaFactory.java:310)
        - locked <0xeb52acf0> (a org.geotools.xml.SchemaFactory)
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:265)
        - locked <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.xsi.SchemaHandler.compress(SchemaHandler.java:430)
        at 
org.geotools.xml.handlers.xsi.RootHandler.getSchema(RootHandler.java:117)
        at org.geotools.xml.XSISAXHandler.getSchema(XSISAXHandler.java:257)
        at 
org.geotools.xml.SchemaFactory.getRealInstance(SchemaFactory.java:310)
        - locked <0xeb52acf0> (a org.geotools.xml.SchemaFactory)
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:265)
        - locked <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.ElementHandlerFactory.startPrefixMapping(ElementHandlerFactory.java:87)
        at org.geotools.xml.XMLSAXHandler.startElement(XMLSAXHandler.java:370)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown 
Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown 
Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:176)
        at 
org.geotools.xml.DocumentFactory.getInstance(DocumentFactory.java:133)
        at 
org.geotools.data.wms.response.WMSGetCapabilitiesResponse.<init>(WMSGetCapabilitiesResponse.java:54)
        at 
org.geotools.data.wms.WMS1_0_0$GetCapsRequest.createResponse(WMS1_0_0.java:231)
        at 
org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:440)
        at 
org.geotools.data.wms.WebMapServer.issueRequest(WebMapServer.java:405)
        at 
org.geotools.data.ows.AbstractOpenWebService.negotiateVersion(AbstractOpenWebService.java:240)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:95)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:81)
        at org.geotools.data.wms.WebMapServer.<init>(WebMapServer.java:368)

 
THREADS without lock....
"Piper Processor 2" prio=1 tid=0x0964bf50 nid=0x3b4e waiting for monitor entry 
[0xe7d10000..0xe7d10fb0]
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:265)
        - waiting to lock <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.ElementHandlerFactory.startPrefixMapping(ElementHandlerFactory.java:87)
        at org.geotools.xml.XMLSAXHandler.startElement(XMLSAXHandler.java:370)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown 
Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown 
Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:176)
        at 
org.geotools.xml.DocumentFactory.getInstance(DocumentFactory.java:133)
        at 
org.geotools.data.wms.response.WMSGetCapabilitiesResponse.<init>(WMSGetCapabilitiesResponse.java:54)
        at 
org.geotools.data.wms.WMS1_0_0$GetCapsRequest.createResponse(WMS1_0_0.java:231)
        at 
org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:440)
        at 
org.geotools.data.wms.WebMapServer.issueRequest(WebMapServer.java:405)
        at 
org.geotools.data.ows.AbstractOpenWebService.negotiateVersion(AbstractOpenWebService.java:240)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:95)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:81)
        at org.geotools.data.wms.WebMapServer.<init>(WebMapServer.java:368)

"Piper Processor 1" prio=1 tid=0x0964bdc8 nid=0x3b4d waiting for monitor entry 
[0xe7d91000..0xe7d92030]
        at org.geotools.xml.SchemaFactory.getInstance(SchemaFactory.java:208)
        - waiting to lock <0xef884168> (a java.lang.Class)
        at 
org.geotools.xml.handlers.ElementHandlerFactory.startPrefixMapping(ElementHandlerFactory.java:115)
        at org.geotools.xml.XMLSAXHandler.startElement(XMLSAXHandler.java:383)
        at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown 
Source)
        at 
org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
 Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown 
Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown 
Source)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:176)
        at 
org.geotools.xml.DocumentFactory.getInstance(DocumentFactory.java:133)
        at 
org.geotools.data.wms.response.WMSGetCapabilitiesResponse.<init>(WMSGetCapabilitiesResponse.java:54)
        at 
org.geotools.data.wms.WMS1_0_0$GetCapsRequest.createResponse(WMS1_0_0.java:231)
        at 
org.geotools.data.ows.AbstractOpenWebService.internalIssueRequest(AbstractOpenWebService.java:440)
        at 
org.geotools.data.wms.WebMapServer.issueRequest(WebMapServer.java:405)
        at 
org.geotools.data.ows.AbstractOpenWebService.negotiateVersion(AbstractOpenWebService.java:240)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:95)
        at 
org.geotools.data.ows.AbstractOpenWebService.<init>(AbstractOpenWebService.java:81)
        at org.geotools.data.wms.WebMapServer.<init>(WebMapServer.java:368)
        at 
com.bt.mbe.processing.PIPERProcessor.getWMSLayer(PIPERProcessor.java:369)
        at 
com.bt.mbe.processing.PIPERProcessor.processItem(PIPERProcessor.java:269)
        at com.bt.mbe.processing.PIPERProcessor.run(PIPERProcessor.java:211)
        at java.lang.Thread.run(Thread.java:595)
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
GeoTools-GT2-Users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to