Author: manik.surtani(a)jboss.com
Date: 2008-01-08 19:45:11 -0500 (Tue, 08 Jan 2008)
New Revision: 5102
Modified:
core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java
Log:
Fixed proper bootstrapping after a reset
Modified: core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java 2008-01-08
22:57:05 UTC (rev 5101)
+++ core/trunk/src/main/java/org/jboss/cache/factories/ComponentRegistry.java 2008-01-09
00:45:11 UTC (rev 5102)
@@ -75,6 +75,7 @@
Map<Class, Class<? extends ComponentFactory>> defaultFactories = null;
private static Log log = LogFactory.getLog(ComponentRegistry.class);
+ private Bootstrap bootstrap;
/**
* Creates an instance of the component registry. The configuration passed in is
automatically registered.
@@ -560,13 +561,8 @@
conf.changeState(CONSTRUCTED);
cr.changeState(CONSTRUCTED);
- componentLookup.put(Configuration.class.getName(), conf);
- componentLookup.put(ComponentRegistry.class.getName(), cr);
- componentLookup.put(CacheImpl.class.getName(), impl);
- componentLookup.put(CacheSPI.class.getName(), spi);
+ bootstrap = new Bootstrap((CacheImpl) impl.instance, (CacheSPI) spi.instance,
(ComponentRegistry) cr.instance, (Configuration) conf.instance);
- spi.changeState(WIRED);
-
overallState = null;
}
@@ -591,15 +587,20 @@
*/
public void wire()
{
+ if (bootstrap != null && !bootstrap.isBootstrapped())
+ {
+ bootstrap.bootstrap();
+ }
+
moveComponentsToState(WIRED);
}
void moveComponentsToState(State state)
{
- if (overallState == null)
+ if (overallState == null && bootstrap != null &&
!bootstrap.isBootstrapped())
{
// we have been destroyed! Need to bootstrap again.
- bootstrap();
+ bootstrap.bootstrap();
}
for (Component c : componentLookup.values())
@@ -610,22 +611,6 @@
}
/**
- * Always assumes that the 4 core bootstrap components are in the registry. Will now
attempt to make sure their dependencies are built.
- */
- void bootstrap()
- {
- // the bootstrap classes
- Component spi = componentLookup.get(CacheSPI.class.getName());
- Component impl = componentLookup.get(CacheImpl.class.getName());
- Component conf = componentLookup.get(Configuration.class.getName());
- Component cr = componentLookup.get(ComponentRegistry.class.getName());
- addComponentDependencies(spi, true);
- addComponentDependencies(impl, true);
- addComponentDependencies(conf, true);
- addComponentDependencies(cr, true);
- }
-
- /**
* Represents the state of a component
*/
enum State
@@ -797,10 +782,6 @@
// of we are "moving up" - only do this if the component
is lower than what is needed.
if ((increase && newState.isGreaterThan(c.state)) ||
(!increase && newState.isLessThan(c.state)))
{
- if (c.name.endsWith("CacheLoaderManager"))
- {
- boolean itrue = true;
- }
c.changeState(newState);
}
@@ -911,4 +892,37 @@
return "Component (name = " + name + ", state = " + state +
")";
}
}
+
+ class Bootstrap
+ {
+ CacheImpl cacheImpl;
+ CacheSPI cacheSPI;
+ ComponentRegistry componentRegistry;
+ Configuration configuration;
+
+ Bootstrap(CacheImpl cacheImpl, CacheSPI cacheSPI, ComponentRegistry
componentRegistry, Configuration configuration)
+ {
+ this.cacheImpl = cacheImpl;
+ this.cacheSPI = cacheSPI;
+ this.componentRegistry = componentRegistry;
+ this.configuration = configuration;
+ }
+
+ boolean isBootstrapped()
+ {
+ return componentLookup.containsKey(Configuration.class.getName()) &&
+ componentLookup.containsKey(CacheImpl.class.getName()) &&
+ componentLookup.containsKey(CacheSPI.class.getName()) &&
+ componentLookup.containsKey(ComponentRegistry.class.getName());
+ }
+
+ void bootstrap()
+ {
+ overallState = CONSTRUCTED;
+ registerComponent(Configuration.class.getName(), configuration,
Configuration.class);
+ registerComponent(ComponentRegistry.class.getName(), componentRegistry,
ComponentRegistry.class);
+ registerComponent(CacheImpl.class.getName(), cacheImpl, CacheImpl.class);
+ registerComponent(CacheSPI.class.getName(), cacheSPI, CacheSPI.class);
+ }
+ }
}
\ No newline at end of file
Show replies by date