Author: aadamchik
Date: Mon Nov  6 18:57:53 2006
New Revision: 471974

URL: http://svn.apache.org/viewvc?view=rev&rev=471974
Log:
CAY-703 Cache EntityResolver in the ClientChannel

Modified:
    
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/remote/ClientChannel.java

Modified: 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/remote/ClientChannel.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/remote/ClientChannel.java?view=diff&rev=471974&r1=471973&r2=471974
==============================================================================
--- 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/remote/ClientChannel.java
 (original)
+++ 
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/remote/ClientChannel.java
 Mon Nov  6 18:57:53 2006
@@ -52,6 +52,7 @@
 
     protected ClientConnection connection;
     protected EventManager eventManager;
+    protected EntityResolver entityResolver;
     protected boolean channelEventsEnabled;
 
     EventBridge remoteChannelListener;
@@ -95,7 +96,7 @@
                 setupRemoteChannelListener();
             }
             catch (CayenneRuntimeException e) {
-                
+
             }
         }
     }
@@ -115,8 +116,6 @@
 
         if (context != null) {
 
-            // **** notice using EntityResolver from the context, as this 
channel does not
-            // cache it...
             EntityResolver resolver = context.getEntityResolver();
             QueryMetadata info = query.getMetaData(resolver);
 
@@ -221,8 +220,23 @@
         return replyDiff;
     }
 
+    /**
+     * Returns EntityResolver obtained from the server. On first access, this 
method sends
+     * a message to the server to retrieve the EntityResolver. On subsequent 
calls locally
+     * cached resolver is used.
+     */
     public EntityResolver getEntityResolver() {
-        return (EntityResolver) send(new BootstrapMessage(), 
EntityResolver.class);
+        if (entityResolver == null) {
+            synchronized (this) {
+                if (entityResolver == null) {
+                    entityResolver = (EntityResolver) send(
+                            new BootstrapMessage(),
+                            EntityResolver.class);
+                }
+            }
+        }
+
+        return entityResolver;
     }
 
     /**


Reply via email to