[jbosscache-commits] JBoss Cache SVN: r5695 - core/trunk/src/main/java/org/jboss/cache/loader.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Fri Apr 25 11:04:34 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-04-25 11:04:34 -0400 (Fri, 25 Apr 2008)
New Revision: 5695

Modified:
   core/trunk/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoader.java
Log:
Fixed intermittent issue with TcpCacheLoader calls before proper startup

Modified: core/trunk/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoader.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoader.java	2008-04-25 13:54:37 UTC (rev 5694)
+++ core/trunk/src/main/java/org/jboss/cache/loader/TcpDelegatingCacheLoader.java	2008-04-25 15:04:34 UTC (rev 5695)
@@ -13,6 +13,7 @@
 import org.jboss.cache.Modification;
 import org.jboss.cache.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
 import org.jboss.cache.loader.tcp.TcpCacheOperations;
+import sun.plugin.dom.exception.InvalidStateException;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -48,7 +49,14 @@
    ObjectOutputStream out;
    private static final Log log = LogFactory.getLog(TcpDelegatingCacheLoader.class);
    private static Method GET_CHILDREN_METHOD, GET_METHOD, PUT_KEY_METHOD, PUT_DATA_METHOD, REMOVE_KEY_METHOD, REMOVE_METHOD, PUT_MODS_METHOD, EXISTS_METHOD, REMOVE_DATA_METHOD;
+   private State state = State.STOPPED;
 
+   private enum State
+   {
+      STOPPED, STARTING, STARTED
+   }
+
+
    static
    {
       try
@@ -101,6 +109,7 @@
     */
    protected Object invokeWithRetries(Method m, Object... params)
    {
+      assertValidState();
       long endTime = System.currentTimeMillis() + config.getTimeout();
       do
       {
@@ -369,15 +378,18 @@
    @Override
    public void start() throws IOException
    {
+      state = State.STARTING;
       sock = new Socket(config.getHost(), config.getPort());
       out = new ObjectOutputStream(new BufferedOutputStream(sock.getOutputStream()));
       out.flush();
       in = new ObjectInputStream(new BufferedInputStream(sock.getInputStream()));
+      state = State.STARTED;
    }
 
    @Override
    public void stop()
    {
+      state = State.STOPPED;
       try
       {
          if (in != null) in.close();
@@ -401,6 +413,22 @@
       }
    }
 
+   private void assertValidState()
+   {
+      while (state == State.STARTING)
+      {
+         try
+         {
+            Thread.sleep(100);
+         }
+         catch (InterruptedException e)
+         {
+            // do nothing
+         }
+      }
+      if (state != State.STARTED) throw new InvalidStateException("Not started!");
+   }
+
    protected void restart() throws IOException
    {
       stop();




More information about the jbosscache-commits mailing list