Mercurial > hg > blitz_condensed
diff src/org/dancres/blitz/oid/AllocatorFactory.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/dancres/blitz/oid/AllocatorFactory.java Sat Mar 21 11:00:06 2009 +0000 @@ -0,0 +1,82 @@ +package org.dancres.blitz.oid; + +import java.io.File; +import java.io.IOException; + +import java.util.Map; +import java.util.HashMap; + +import net.jini.config.ConfigurationException; + +import org.dancres.blitz.disk.DiskTxn; + +import org.dancres.blitz.config.ConfigurationFactory; + +import org.dancres.blitz.meta.RegistryFactory; +import org.dancres.blitz.meta.Registry; + +public class AllocatorFactory { + + private static int DEFAULT_MAX_ALLOCATORS; + + static { + try { + DEFAULT_MAX_ALLOCATORS = + ((Integer) + ConfigurationFactory.getEntry("maxOidAllocators", + int.class, + new Integer(4))).intValue(); + } catch (ConfigurationException aCE) { + } + } + + private static Map theAllocators = new HashMap(); + + public static Allocator get(String aName, boolean isFifo) + throws IOException { + return get(aName, DEFAULT_MAX_ALLOCATORS, isFifo); + } + + public static Allocator get(String aName, int anAllocSpaceSize, + boolean isFifo) + throws IOException { + return getImpl(aName, anAllocSpaceSize, isFifo); + } + + static Allocator getImpl(String aName, int anAllocSpaceSize, + boolean isFifo) + throws IOException { + + synchronized(theAllocators) { + Allocator myData = (Allocator) theAllocators.get(aName); + + if (myData == null) { + myData = newAllocator(aName, anAllocSpaceSize, isFifo); + theAllocators.put(aName, myData); + } + + return myData; + } + } + + public static void delete(String aName) throws IOException { + synchronized(theAllocators) { + AllocatorAdmin myData = + (AllocatorAdmin) theAllocators.remove(aName); + + if (myData != null) + myData.delete(); + } + } + + private static Allocator newAllocator(String aName, + int anAllocSpaceSize, + boolean isFifo) + throws IOException { + + if (isFifo) + return new FIFOAllocatorImpl(aName); + else + return new AllocatorImpl(aName, anAllocSpaceSize); + } +}