| NullCallbackStore.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.remoting;
import org.jboss.logging.Logger;
import java.io.IOException;
import java.io.Serializable;
import java.util.Map;
/**
* This implementation does nothing other than throw away persisted objects and throw exceptions.
* This is to be use when don't have a proper store or don't care about throwing away callbacks when
* starting to run out of memory.
*
* @author <a href="mailto:telrod@e2technologies.net">Tom Elrod</a>
*/
public class NullCallbackStore implements SerializableStore, Serializable
{
static final long serialVersionUID = -8182007953992756845L;
private boolean isCallbackLost = false;
private static final Logger log = Logger.getLogger(NullCallbackStore.class);
/**
* Getst the number of objects stored and available.
*
* @return
*/
public int size()
{
return isCallbackLost ? 1 : 0;
}
/**
* Will look through the files in the store directory for the oldest object serialized to disk, load it,
* delete the file, and return the deserialized object.
* Important to note that once this object is returned from this method, it is gone forever from this
* store and will not be able to retrieve it again without adding it back.
*
* @return
* @throws java.io.IOException
*/
public Object getNext() throws IOException
{
if(isCallbackLost)
{
isCallbackLost = false;
return new FailedCallback("This is an invalid callback. The server ran out of memory, so callbacks were lost.");
}
else
{
return null;
}
}
/**
* Persists the serializable object passed to the directory specified. The file name will be the current time
* in milliseconds (vis System.currentTimeMillis()) with the specified suffix. This object can later be
* retrieved using the getNext() method, but objects will be returned in the order that they were added (FIFO).
*
* @param object
* @throws java.io.IOException
*/
public void add(Serializable object) throws IOException
{
isCallbackLost = true;
log.error("Lost callback because not enough free memory available. Callback lost was " + object);
throw new IOException("Callback has been lost because not enough free memory to hold object.");
}
/**
* No op
*
* @param config
*/
public void setConfig(Map config)
{
}
/**
* No op
*
* @throws Exception
*/
public void start() throws Exception
{
}
/**
* No op
*/
public void stop()
{
}
/**
* This is a no op method, but needed in order to be used as a service within JBoss AS.
*
* @throws Exception
*/
public void create() throws Exception
{
}
/**
* This is a no op method, but needed in order to be used as a service within JBoss AS.
*/
public void destroy()
{
}
/**
* Sets if store should clean up persisted files when shutdown (destroy()).
*
* @param purgeOnShutdown
*/
public void setPurgeOnShutdown(boolean purgeOnShutdown)
{
}
/**
* Returns if store will clean up persisted files when shutdown (destroy()).
*
* @return
*/
public boolean getPurgeOnShutdown()
{
return false;
}
public void purgeFiles()
{
}
public class FailedCallback extends Callback
{
public FailedCallback(Object callbackPayload)
{
super(callbackPayload);
}
public Object getCallbackObject()
{
throw new RuntimeException("This is an invalid callback. The server ran out of memory, so callbacks were lost.");
}
}
}
| NullCallbackStore.java |