dain 2004/02/25 00:03:53
Modified: modules/deployment/src/java/org/apache/geronimo/deployment
Bootstrap.java DeploymentContext.java
ModuleDeployer.java
modules/deployment/src/java/org/apache/geronimo/deployment/service
ServiceConfigBuilder.java
modules/kernel/src/java/org/apache/geronimo/kernel/config
Configuration.java
modules/system/src/java/org/apache/geronimo/system/repository
ReadOnlyRepository.java
Log:
Simplified Bootstrap construction of the deployer
The deployer.jar is built from the deployer-system-plan.xml file and the
j2ee deployer is built from the j2ee-deployer-plan.xml. This eliminates
all of the hard coded plans from Bootstrap.
Revision Changes Path
1.10 +61 -167
incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/Bootstrap.java
Index: Bootstrap.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/Bootstrap.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Bootstrap.java 24 Feb 2004 07:36:20 -0000 1.9
+++ Bootstrap.java 25 Feb 2004 08:03:53 -0000 1.10
@@ -58,34 +58,20 @@
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
-import java.io.ObjectOutputStream;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
import java.util.jar.Attributes;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
-import javax.management.ObjectName;
import org.apache.geronimo.deployment.service.ServiceConfigBuilder;
-import org.apache.geronimo.gbean.jmx.GBeanMBean;
-import org.apache.geronimo.kernel.Kernel;
-import org.apache.geronimo.kernel.config.Configuration;
-import org.apache.geronimo.kernel.config.ConfigurationManager;
-import org.apache.geronimo.kernel.jmx.JMXUtil;
+import org.apache.geronimo.deployment.xbeans.ConfigurationDocument;
+import org.apache.geronimo.deployment.xbeans.ConfigurationType;
import org.apache.geronimo.system.configuration.LocalConfigStore;
import org.apache.geronimo.system.main.CommandLine;
import org.apache.geronimo.system.repository.ReadOnlyRepository;
-import org.apache.geronimo.system.serverinfo.ServerInfo;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlObject;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* Helper class to bootstrap the Geronimo deployer.
@@ -93,212 +79,120 @@
* @version $Revision$ $Date$
*/
public class Bootstrap {
- public static final URI CONFIG_ID =
URI.create("org/apache/geronimo/DeployerSystem");
- private static final ObjectName REPOSITORY_NAME =
JMXUtil.getObjectName("geronimo.deployer:role=Repository,root=repository");
- private static final ObjectName SERVICE_BUILDER_NAME =
JMXUtil.getObjectName("geronimo.deployer:role=Builder,type=Service,id=" +
CONFIG_ID.toString());
+ private String deployerJar;
+ private String storeDir;
+ private String repositoryDir;
+ private String deployerSystemPlan;
+ private String j2eeDeployerPlan;
+ private String deployerClassPath;
+ private String deployerGBean;
- private String outputFile;
- private String baseDir;
- private String store;
- private String deploymentPlan;
- private String classPath;
- private String mainGBean;
- private String mainMethod;
- private String configurations;
-
- public String getOutputFile() {
- return outputFile;
- }
-
- public void setOutputFile(String outputFile) {
- this.outputFile = outputFile;
+ public String getDeployerJar() {
+ return deployerJar;
}
- public String getBaseDir() {
- return baseDir;
+ public void setDeployerJar(String deployerJar) {
+ this.deployerJar = deployerJar;
}
- public void setBaseDir(String baseDir) {
- this.baseDir = baseDir;
+ public String getStoreDir() {
+ return storeDir;
}
- public String getStore() {
- return store;
+ public void setStoreDir(String storeDir) {
+ this.storeDir = storeDir;
}
- public void setStore(String store) {
- this.store = store;
+ public String getRepositoryDir() {
+ return repositoryDir;
}
- public String getDeploymentPlan() {
- return deploymentPlan;
+ public void setRepositoryDir(String repositoryDir) {
+ this.repositoryDir = repositoryDir;
}
- public void setDeploymentPlan(String deploymentPlan) {
- this.deploymentPlan = deploymentPlan;
+ public String getDeployerSystemPlan() {
+ return deployerSystemPlan;
}
- public String getClassPath() {
- return classPath;
+ public void setDeployerSystemPlan(String deployerSystemPlan) {
+ this.deployerSystemPlan = deployerSystemPlan;
}
- public void setClassPath(String classPath) {
- this.classPath = classPath;
+ public String getJ2eeDeployerPlan() {
+ return j2eeDeployerPlan;
}
- public String getMainGBean() {
- return mainGBean;
+ public void setJ2eeDeployerPlan(String j2eeDeployerPlan) {
+ this.j2eeDeployerPlan = j2eeDeployerPlan;
}
- public void setMainGBean(String mainGBean) {
- this.mainGBean = mainGBean;
+ public String getDeployerClassPath() {
+ return deployerClassPath;
}
- public String getMainMethod() {
- return mainMethod;
+ public void setDeployerClassPath(String deployerClassPath) {
+ this.deployerClassPath = deployerClassPath;
}
- public void setMainMethod(String mainMethod) {
- this.mainMethod = mainMethod;
+ public String getDeployerGBean() {
+ return deployerGBean;
}
- public String getConfigurations() {
- return configurations;
+ public void setDeployerGBean(String deployerGBean) {
+ this.deployerGBean = deployerGBean;
}
- public void setConfigurations(String configurations) {
- this.configurations = configurations;
- }
-
- public void bootstrap() {
- File file = new File(outputFile);
- File storeDir = new File(baseDir, store);
-
+ public void bootstrap() throws Exception {
ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(Bootstrap.class.getClassLoader());
try {
- GBeanMBean deploymentSystemConfig =
getDeploymentSystemConfig(new URI(store));
+ // parse the deployment-system and j2ee-deployer plans
+ XmlObject deployerSystemXML =
XmlBeans.getContextTypeLoader().parse(new File(deployerSystemPlan), null, null);
+ XmlObject j2eeDeployerXML =
XmlBeans.getContextTypeLoader().parse(new File(j2eeDeployerPlan), null, null);
+ ConfigurationType j2eeDeployerConfig = ((ConfigurationDocument)
j2eeDeployerXML).getConfiguration();
+
+ // create the service builder, repository and config store
objects
+ LocalConfigStore configStore = new LocalConfigStore(new
File(storeDir));
+ ReadOnlyRepository repository = new ReadOnlyRepository(new
File(repositoryDir));
+ ServiceConfigBuilder builder = new
ServiceConfigBuilder(repository);
// create the manifext
Manifest manifest = new Manifest();
Attributes mainAttributes = manifest.getMainAttributes();
mainAttributes.putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0");
mainAttributes.putValue(Attributes.Name.MAIN_CLASS.toString(),
CommandLine.class.getName());
- mainAttributes.putValue(Attributes.Name.CLASS_PATH.toString(),
classPath);
- mainAttributes.putValue(CommandLine.MAIN_GBEAN.toString(),
mainGBean);
- mainAttributes.putValue(CommandLine.MAIN_METHOD.toString(),
mainMethod);
- mainAttributes.putValue(CommandLine.CONFIGURATIONS.toString(),
configurations);
+ mainAttributes.putValue(Attributes.Name.CLASS_PATH.toString(),
deployerClassPath);
+ mainAttributes.putValue(CommandLine.MAIN_GBEAN.toString(),
deployerGBean);
+ mainAttributes.putValue(CommandLine.MAIN_METHOD.toString(),
"deploy");
+ mainAttributes.putValue(CommandLine.CONFIGURATIONS.toString(),
j2eeDeployerConfig.getConfigId());
+ // build and install the deployer-system configuration
// write the deployer system out to a jar
- JarOutputStream jos = new JarOutputStream(new
BufferedOutputStream(new FileOutputStream(file)), manifest);
+ File outputFile = new File(deployerJar);
+ JarOutputStream jos = new JarOutputStream(new
BufferedOutputStream(new FileOutputStream(outputFile)), manifest);
try {
// add the startup jar entry which allows us to locat the
startup directory
jos.putNextEntry(new ZipEntry("META-INF/startup-jar"));
jos.closeEntry();
- // write the configuration to the jar
- jos.putNextEntry(new ZipEntry("META-INF/config.ser"));
- ObjectOutputStream ois = new ObjectOutputStream(jos);
- Configuration.storeGMBeanState(deploymentSystemConfig, ois);
- ois.flush();
- jos.closeEntry();
+ // add the deployment system configuration to the jar
+ builder.buildConfiguration(jos, deployerSystemXML);
} finally {
jos.close();
}
+ configStore.install(outputFile.toURL());
- // install the deployer systen in to the config store
- LocalConfigStore configStore = new LocalConfigStore(storeDir);
- configStore.install(file.toURL());
-
- System.setProperty("geronimo.base.dir", baseDir);
- Kernel kernel = new Kernel("geronimo.bootstrap");
- kernel.boot();
-
- ConfigurationManager configurationManager =
kernel.getConfigurationManager();
- ObjectName deploymentSystemName =
configurationManager.load(deploymentSystemConfig, file.toURL());
- kernel.startRecursiveGBean(deploymentSystemName);
-
- GBeanMBean serviceDeployerConfig = getServiceDeployerConfig();
- serviceDeployerConfig.setReferencePatterns("Parent",
Collections.singleton(deploymentSystemName));
- ObjectName serviceDeployerName =
configurationManager.load(serviceDeployerConfig, file.toURL());
- kernel.startRecursiveGBean(serviceDeployerName);
-
- File tempFile = File.createTempFile("deployer", ".car");
+ // build and install the j2ee-deployer configuration
+ File tempFile = File.createTempFile("j2ee-deployer", ".car");
try {
- URL planURL = new File(deploymentPlan).toURL();
- XmlObject plan =
XmlBeans.getContextTypeLoader().parse(planURL, null, null);
- kernel.getMBeanServer().invoke(
- SERVICE_BUILDER_NAME,
- "buildConfiguration",
- new Object[]{tempFile, null, plan},
- new String[]{File.class.getName(),
JarInputStream.class.getName(), XmlObject.class.getName()});
+ builder.buildConfiguration(tempFile, (JarInputStream)null,
j2eeDeployerXML);
configStore.install(tempFile.toURL());
} finally {
tempFile.delete();
}
-
- kernel.stopGBean(deploymentSystemName);
- kernel.shutdown();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(2);
- throw new AssertionError();
} finally {
Thread.currentThread().setContextClassLoader(oldCL);
}
- }
-
- private static GBeanMBean getDeploymentSystemConfig(URI storeDir) throws
Exception {
- Map gbeans = new HashMap();
-
- // Install ServerInfo GBean
- ObjectName serverInfoName = new
ObjectName("geronimo.deployer:role=ServerInfo");
- GBeanMBean serverInfo = new GBeanMBean(ServerInfo.getGBeanInfo());
- gbeans.put(serverInfoName, serverInfo);
-
- // Install LocalConfigStore
- GBeanMBean storeGBean = new
GBeanMBean(LocalConfigStore.getGBeanInfo());
- storeGBean.setAttribute("root", storeDir);
- storeGBean.setReferencePatterns("ServerInfo",
Collections.singleton(serverInfoName));
- gbeans.put(new ObjectName("geronimo.boot:role=ConfigurationStore"),
storeGBean);
-
- // Install default local Repository
- GBeanMBean localRepo = new GBeanMBean(ReadOnlyRepository.GBEAN_INFO);
- localRepo.setAttribute("Root", URI.create("repository/"));
- localRepo.setReferencePatterns("ServerInfo",
Collections.singleton(serverInfoName));
- gbeans.put(REPOSITORY_NAME, localRepo);
-
- // assemble the deployer system configuration
- GBeanMBean config = new GBeanMBean(Configuration.GBEAN_INFO);
- config.setAttribute("ID", CONFIG_ID);
- config.setReferencePatterns("Parent", null);
- config.setAttribute("ClassPath", new ArrayList());
- config.setAttribute("GBeanState", Configuration.storeGBeans(gbeans));
- config.setAttribute("Dependencies", Collections.EMPTY_LIST);
- return config;
- }
-
- private static GBeanMBean getServiceDeployerConfig() throws Exception {
- Map gbeans = new HashMap();
-
- // Install ServiceConfigBuilder
- GBeanMBean serviceBuilder = new
GBeanMBean(ServiceConfigBuilder.GBEAN_INFO);
- serviceBuilder.setReferencePatterns("Repository",
Collections.singleton(REPOSITORY_NAME));
- serviceBuilder.setReferencePatterns("Kernel",
Collections.singleton(Kernel.KERNEL));
- gbeans.put(SERVICE_BUILDER_NAME, serviceBuilder);
-
- // Install Deployer
- ObjectName deployerName = Deployer.getDeployerName(CONFIG_ID);
- GBeanMBean deployer = new GBeanMBean(Deployer.GBEAN_INFO);
- deployer.setReferencePatterns("Builders",
Collections.singleton(SERVICE_BUILDER_NAME));
- gbeans.put(deployerName, deployer);
-
- GBeanMBean config = new GBeanMBean(Configuration.GBEAN_INFO);
- config.setAttribute("ID", new
URI("temp/deployment/ServiceDeployer"));
- config.setAttribute("ClassPath", new ArrayList());
- config.setAttribute("GBeanState", Configuration.storeGBeans(gbeans));
- config.setAttribute("Dependencies", Collections.EMPTY_LIST);
-
- return config;
}
}
1.5 +10 -8
incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
Index: DeploymentContext.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DeploymentContext.java 24 Feb 2004 06:05:36 -0000 1.4
+++ DeploymentContext.java 25 Feb 2004 08:03:53 -0000 1.5
@@ -115,7 +115,7 @@
throw new AssertionError();
}
- if (parentID != null) {
+ if (kernel != null && parentID != null) {
ObjectName parentName =
ConfigurationManager.getConfigObjectName(parentID);
config.setReferencePatterns("Parent",
Collections.singleton(parentName));
try {
@@ -141,9 +141,11 @@
}
} else {
ancestors = null;
- parentCL = ClassLoader.getSystemClassLoader();
+ // no explicit parent set, so use the class loader of this class
as
+ // the parent... this class should be in the root geronimo
classloader,
+ // which is normally the system class loader but not always, so
be safe
+ parentCL = getClass().getClassLoader();
}
-
}
public URI getConfigID() {
@@ -228,12 +230,12 @@
jos.flush();
jos.close();
- try {
- if (ancestors != null && ancestors.size() > 0) {
+ if (kernel != null && ancestors != null && ancestors.size() > 0) {
+ try {
kernel.stopGBean((ObjectName) ancestors.get(0));
+ } catch (Exception e) {
+ throw new DeploymentException(e);
}
- } catch (Exception e) {
- throw new DeploymentException(e);
}
}
1.5 +7 -12
incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/ModuleDeployer.java
Index: ModuleDeployer.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/ModuleDeployer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ModuleDeployer.java 10 Feb 2004 22:34:04 -0000 1.4
+++ ModuleDeployer.java 25 Feb 2004 08:03:53 -0000 1.5
@@ -67,25 +67,22 @@
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Collections;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import javax.management.ObjectName;
-import javax.management.AttributeNotFoundException;
-import javax.management.InvalidAttributeValueException;
-import javax.management.MBeanException;
-import javax.management.ReflectionException;
import org.apache.geronimo.gbean.InvalidConfigurationException;
import org.apache.geronimo.gbean.jmx.GBeanMBean;
import org.apache.geronimo.kernel.config.Configuration;
import org.apache.geronimo.kernel.config.ConfigurationParent;
+import org.apache.geronimo.kernel.Kernel;
/**
*
@@ -161,12 +158,10 @@
}
ClassLoader cl;
if (parent == null) {
- //Use in maven plugin seems to require access to the
classloader used to load this class,
- //not just the SystemClassLoader. DeployCommand sets the
thread context classloader.
- // If I understand Maven correctly it will load using a
classloader including the
- //dependencies specified in the plugins project.xml file.
- //cl = new URLClassLoader(urls);
- cl = new URLClassLoader(urls,
Thread.currentThread().getContextClassLoader());
+ // no explicit parent set, so use the class loader of Kernel
as the
+ // parent... the Kernel class should be in the root geronimo
classloader,
+ // which is normally the system class loader but not always,
so be safe
+ cl = new URLClassLoader(urls, Kernel.class.getClassLoader());
} else {
cl = new URLClassLoader(urls, parent.getClassLoader());
}
1.8 +41 -31
incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
Index: ServiceConfigBuilder.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ServiceConfigBuilder.java 24 Feb 2004 06:05:37 -0000 1.7
+++ ServiceConfigBuilder.java 25 Feb 2004 08:03:53 -0000 1.8
@@ -103,6 +103,10 @@
private final Repository repository;
private final Kernel kernel;
+ public ServiceConfigBuilder(Repository repository) {
+ this(repository, null);
+ }
+
public ServiceConfigBuilder(Repository repository, Kernel kernel) {
this.repository = repository;
this.kernel = kernel;
@@ -125,30 +129,13 @@
}
public void buildConfiguration(File outfile, JarInputStream module,
XmlObject plan) throws IOException, DeploymentException {
- ConfigurationType configType = ((ConfigurationDocument)
plan).getConfiguration();
- URI configID;
- try {
- configID = new URI(configType.getConfigId());
- } catch (URISyntaxException e) {
- throw new DeploymentException("Invalid configId " +
configType.getConfigId(), e);
- }
- URI parentID;
- if (configType.isSetParentId()) {
- try {
- parentID = new URI(configType.getParentId());
- } catch (URISyntaxException e) {
- throw new DeploymentException("Invalid parentId " +
configType.getParentId(), e);
- }
- } else {
- parentID = null;
- }
-
// create the manifext
Manifest manifest = new Manifest();
Attributes mainAttributes = manifest.getMainAttributes();
mainAttributes.putValue(Attributes.Name.MANIFEST_VERSION.toString(),
"1.0");
// add the manifest entries to make the archive executable
+ ConfigurationType configType = ((ConfigurationDocument)
plan).getConfiguration();
ExecutableType executable = configType.getExecutable();
if(executable != null) {
mainAttributes.putValue(Attributes.Name.MAIN_CLASS.toString(),
executable.getMainClass());
@@ -167,22 +154,45 @@
os.closeEntry();
}
- DeploymentContext context = null;
- try {
- context = new DeploymentContext(os, configID, parentID,
kernel);
- } catch (MalformedObjectNameException e) {
- throw new DeploymentException(e);
- }
- addIncludes(context, configType);
- addDependencies(context, configType.getDependencyArray());
- ClassLoader cl = context.getClassLoader(repository);
- addGBeans(context, configType.getGbeanArray(), cl);
- context.close();
- os.flush();
+ buildConfiguration(os, plan);
+
} finally {
fos.close();
}
+ }
+
+ public void buildConfiguration(JarOutputStream os, XmlObject plan)
throws DeploymentException, IOException {
+ ConfigurationType configType = ((ConfigurationDocument)
plan).getConfiguration();
+ URI configID;
+ try {
+ configID = new URI(configType.getConfigId());
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Invalid configId " +
configType.getConfigId(), e);
+ }
+ URI parentID;
+ if (configType.isSetParentId()) {
+ try {
+ parentID = new URI(configType.getParentId());
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Invalid parentId " +
configType.getParentId(), e);
+ }
+ } else {
+ parentID = null;
+ }
+
+ DeploymentContext context = null;
+ try {
+ context = new DeploymentContext(os, configID, parentID, kernel);
+ } catch (MalformedObjectNameException e) {
+ throw new DeploymentException(e);
+ }
+ addIncludes(context, configType);
+ addDependencies(context, configType.getDependencyArray());
+ ClassLoader cl = context.getClassLoader(repository);
+ addGBeans(context, configType.getGbeanArray(), cl);
+ context.close();
+ os.flush();
}
private void addIncludes(DeploymentContext context, ConfigurationType
configType) throws DeploymentException {
1.15 +5 -2
incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java
Index: Configuration.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/config/Configuration.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Configuration.java 24 Feb 2004 18:41:45 -0000 1.14
+++ Configuration.java 25 Feb 2004 08:03:53 -0000 1.15
@@ -193,7 +193,10 @@
log.debug("ClassPath for " + id + " resolved to " +
Arrays.asList(urls));
if (parent == null) {
- classLoader = new URLClassLoader(urls,
Thread.currentThread().getContextClassLoader());
+ // no explicit parent set, so use the class loader of this class
as
+ // the parent... this class should be in the root geronimo
classloader,
+ // which is normally the system class loader but not always, so
be safe
+ classLoader = new URLClassLoader(urls,
getClass().getClassLoader());
} else {
classLoader = new URLClassLoader(urls, parent.getClassLoader());
}
1.3 +14 -4
incubator-geronimo/modules/system/src/java/org/apache/geronimo/system/repository/ReadOnlyRepository.java
Index: ReadOnlyRepository.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/system/src/java/org/apache/geronimo/system/repository/ReadOnlyRepository.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ReadOnlyRepository.java 13 Feb 2004 07:22:22 -0000 1.2
+++ ReadOnlyRepository.java 25 Feb 2004 08:03:53 -0000 1.3
@@ -85,6 +85,16 @@
private final ServerInfo serverInfo;
private URI rootURI;
+ public ReadOnlyRepository(File root) {
+ this(root.toURI());
+ }
+
+ public ReadOnlyRepository(URI rootURI) {
+ this.root = null;
+ this.serverInfo = null;
+ this.rootURI = rootURI;
+ }
+
public ReadOnlyRepository(URI root, ServerInfo serverInfo) {
this.root = root;
this.serverInfo = serverInfo;
@@ -113,16 +123,16 @@
}
public void doStart() throws WaitingException, Exception {
- rootURI = serverInfo.resolve(root);
+ if(rootURI == null) {
+ rootURI = serverInfo.resolve(root);
+ }
log.info("Repository root is "+rootURI);
}
public void doStop() throws WaitingException, Exception {
- rootURI = null;
}
public void doFail() {
- rootURI = null;
}
public static final GBeanInfo GBEAN_INFO;