package org.jboss.varia.autonumber;
import javax.naming.InitialContext;
import org.jboss.logging.Logger;
public class AutoNumberFactory
{
private static final Logger log = Logger.getLogger(AutoNumberFactory.class);
private static AutoNumberHome autoNumberHome;
public static synchronized Integer getNextInteger(String collectionName)
throws ArrayIndexOutOfBoundsException
{
Integer value = null;
AutoNumber autoNumber = null;
if (autoNumberHome == null)
{
try
{
autoNumberHome = (AutoNumberHome) new InitialContext().lookup("JBossUtilAutoNumber");
}
catch (javax.naming.NamingException e)
{
log.error("operation failed", e);
}
}
try
{
autoNumber = autoNumberHome.findByPrimaryKey(collectionName);
}
catch (javax.ejb.FinderException e)
{
try
{
autoNumber = autoNumberHome.create(collectionName);
}
catch (javax.ejb.CreateException x)
{
log.error("operation failed", x);
}
catch (java.rmi.RemoteException x)
{
log.error("operation failed", x);
}
try
{
autoNumber.setValue(new Integer(0));
}
catch (java.rmi.RemoteException x)
{
log.error("operation failed", x);
}
}
catch (java.rmi.RemoteException e)
{
log.error("operation failed", e);
}
try
{
value = autoNumber.getValue();
autoNumber.setValue(new Integer(value.intValue() + 1));
}
catch (java.rmi.RemoteException e)
{
log.error("operation failed", e);
}
return value;
}
public static synchronized void resetAutoNumber(String collectionName)
{
setAutoNumber(collectionName, new Integer(0));
}
public static synchronized void setAutoNumber(String collectionName, Integer value)
{
AutoNumber autoNumber = null;
if (autoNumberHome == null)
{
try
{
autoNumberHome = (AutoNumberHome)
new InitialContext().lookup("JBossUtilAutoNumber");
}
catch (javax.naming.NamingException e)
{
log.error("operation failed", e);
}
}
try
{
autoNumber = autoNumberHome.findByPrimaryKey(collectionName);
}
catch (javax.ejb.FinderException e)
{
try
{
autoNumber = autoNumberHome.create(collectionName);
}
catch (javax.ejb.CreateException x)
{
log.error("operation failed", x);
}
catch (java.rmi.RemoteException x)
{
log.error("operation failed", x);
}
}
catch (java.rmi.RemoteException e)
{
log.error("operation failed", e);
}
try
{
autoNumber.setValue(value);
}
catch (java.rmi.RemoteException e)
{
log.error("operation failed", e);
}
}
}