Skip to content

Commit

Permalink
Clean ups to the singleton SPI (and impl) and use them in the Manager…
Browse files Browse the repository at this point in the history
… singletons

git-svn-id: http://anonsvn.jboss.org/repos/weld/ri/trunk@3172 1c488680-804c-0410-94cd-c6b725194a0e
  • Loading branch information
pmuir committed Jul 23, 2009
1 parent 559c75e commit aae34e3
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 23 deletions.
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
Expand Up @@ -1131,7 +1131,7 @@ public void shutdown()
applicationContext.destroy();
applicationContext.setActive(false);
applicationContext.setBeanStore(null);
CurrentManager.cleanup();
CurrentManager.clear();
}

/**
Expand Down
7 changes: 4 additions & 3 deletions impl/src/main/java/org/jboss/webbeans/CurrentManager.java
Expand Up @@ -48,10 +48,11 @@ private static class IntegerMangerImplMap extends TypeLiteral<Map<Integer, BeanM

private final static Singleton<Map<Integer, BeanManagerImpl>> managers = SingletonProvider.instance().create(new IntegerMangerImplMap().getRawType());

public static void cleanup()
public static void clear()
{
rootManager.set(null);
managers.get().clear();
rootManager.clear();
managers.clear();
}

/**
Expand All @@ -72,7 +73,7 @@ public static BeanManagerImpl rootManager()
public static void setRootManager(BeanManagerImpl managerImpl)
{
rootManager.set(managerImpl);
if (managers.get() == null)
if (!managers.isSet())
{
managers.set(new ConcurrentHashMap<Integer, BeanManagerImpl>());
}
Expand Down
13 changes: 13 additions & 0 deletions spi/src/main/java/org/jboss/webbeans/bootstrap/api/Singleton.java
Expand Up @@ -45,13 +45,26 @@ public interface Singleton<T>
* Access the singleton
*
* @return a singleton object
* @throws IllegalStateException if the singleton is not set
*/
public T get();

/**
* Check if the singleton is set
*
* @return true if the singleton is set
*/
public boolean isSet();

/**
* Store a singleton
*
* @param object the object to store
*/
public void set(T object);

/**
* Clear the singleton
*/
public void clear();
}
Expand Up @@ -48,12 +48,26 @@ private static class IsolatedStaticSingleton<T> implements Singleton<T>

public T get()
{
if (object == null)
{
throw new IllegalStateException("Singleton is not set");
}
return object;
}

public void set(T object)
{
this.object = object;
}

public void clear()
{
this.object = null;
}

public boolean isSet()
{
return object != null;
}
}
}
Expand Up @@ -54,13 +54,30 @@ private static class TCCLSingleton<T> implements Singleton<T>

public T get()
{
return store.get(getClassLoader());
T instance = store.get(getClassLoader());
if (instance == null)
{
throw new IllegalStateException("Singleton not set for " + getClassLoader());
}
return instance;
}

public void set(T object)
{
// TODO remove this
System.out.println("Adding singleton for " + getClassLoader());
store.put(getClassLoader(), object);
}

public void clear()
{
store.remove(getClassLoader());
}

public boolean isSet()
{
return store.containsKey(getClassLoader());
}

private ClassLoader getClassLoader()
{
Expand Down
Expand Up @@ -25,17 +25,13 @@
import org.jboss.webbeans.mock.el.EL;
import org.jboss.webbeans.util.collections.EnumerationIterable;
import org.testng.ITestContext;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;

public abstract class AbstractWebBeansTest extends AbstractTest
{

protected static final int BUILT_IN_BEANS = 3;

private BeanManagerImpl manager;

public static boolean visited = false;

@Override
Expand All @@ -50,19 +46,6 @@ public void beforeSuite(ITestContext context) throws Exception
super.beforeSuite(context);
}

@BeforeMethod
public void before() throws Exception
{
this.manager = CurrentManager.rootManager();
}

@AfterMethod
public void after() throws Exception
{
this.manager = null;
}


/**
* Checks if all annotations are in a given set of annotations
*
Expand Down Expand Up @@ -135,7 +118,7 @@ protected Object deserialize(byte[] bytes) throws IOException, ClassNotFoundExce

protected BeanManagerImpl getCurrentManager()
{
return manager;
return CurrentManager.rootManager();
}

public boolean isExceptionInHierarchy(Throwable exception, Class<? extends Throwable> expectedException )
Expand Down

0 comments on commit aae34e3

Please sign in to comment.