[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