Author: manik.surtani(a)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();
Show replies by date