Hi together,

I'm currently hunting down some timing bugs in the Print/Layout plug-in.
If WMS layers are used they are not always imported correctly into
the layout sheet.

On my trip down the rendering path I found out that WMS layers
do not cache the resulting images of there requests.

I've written a patch (see attachment) against WMSLayer [1] that stores
the result of the last request using a pair of java.net.URL and
java.lang.ref.SoftReference (java.awt.Image).
If the next WMS request URL equals the last one the stored
image is used and so expensive traffic is avoid.

This does not solve my timing problem but it improves it a bit.
IMHO this little tweak improves WMS performance in general
by removing redundant HTTP traffic.

Kind regards,
  Sascha

[1] com.vividsolutions.jump.workbench.model.WMSLayer
Index: src/com/vividsolutions/jump/workbench/model/WMSLayer.java
===================================================================
RCS file: 
/cvsroot/jump-pilot/openjump/src/com/vividsolutions/jump/workbench/model/WMSLayer.java,v
retrieving revision 1.2
diff -u -w -r1.2 WMSLayer.java
--- src/com/vividsolutions/jump/workbench/model/WMSLayer.java   24 Jun 2005 
09:01:57 -0000      1.2
+++ src/com/vividsolutions/jump/workbench/model/WMSLayer.java   22 May 2007 
16:16:43 -0000
@@ -51,6 +51,11 @@
 import com.vividsolutions.wms.MapRequest;
 import com.vividsolutions.wms.WMService;
 
+import java.net.URL;
+
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
+
 /**
  * A Layerable that retrieves images from a Web Map Server.
  */
@@ -66,6 +71,10 @@
        private WMService service;
 
        private String wmsVersion = WMService.WMS_1_0_0;
+
+       protected Reference oldImage;
+       protected URL       oldURL;
+
        /**
         * Called by Java2XML
         */
@@ -121,7 +130,20 @@
        }
 
        public Image createImage(LayerViewPanel panel) throws IOException {
-               Image image = createRequest(panel).getImage();
+
+               MapRequest request = createRequest(panel);
+               URL        newURL  = request.getURL();
+
+               Image image;
+
+               // look if last request equals new one.
+               // if it does take the image from the cache.
+               if (oldURL == null
+               || !newURL.equals(oldURL) 
+               || oldImage == null
+               || (image = (Image)oldImage.get()) == null
+               ) {
+                       image = request.getImage();
                MediaTracker mt = new MediaTracker(new JButton());
                mt.addImage(image, 0);
 
@@ -130,6 +152,9 @@
                } catch (InterruptedException e) {
                        Assert.shouldNeverReachHere();
                }
+                       oldImage = new SoftReference(image);
+                       oldURL   = newURL;
+               }
 
                return image;
        }
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to