User: oberg
Date: 00/06/16 06:10:19
Modified: src/main/org/jboss Main.java
Log:
Added configuration service
Changed interceptors to be messagebased
Added mini webserver
Changed server bootstrap process
Revision Changes Path
1.5 +169 -154 jboss/src/main/org/jboss/Main.java
Index: Main.java
===================================================================
RCS file: /products/cvs/ejboss/jboss/src/main/org/jboss/Main.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Main.java 2000/05/24 06:57:18 1.4
+++ Main.java 2000/06/16 13:10:18 1.5
@@ -13,6 +13,8 @@
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.FileWriter;
import java.net.URL;
import java.security.*;
import java.util.*;
@@ -24,19 +26,16 @@
*
* @see <related>
* @author Rickard �berg ([EMAIL PROTECTED])
- * @version $Revision: 1.4 $
+ * @version $Revision: 1.5 $
*/
public class Main
- implements Runnable
{
// Constants -----------------------------------------------------
// Attributes ----------------------------------------------------
- MBeanServer server;
- String confName;
// Static --------------------------------------------------------
- public static void main(String[] args)
+ public static void main(final String[] args)
throws Exception
{
// Add shutdown hook
@@ -62,173 +61,183 @@
}
System.setProperty("java.security.policy", serverPolicy);
- System.setSecurityManager(new SecurityManager());
+// System.setSecurityManager(new SecurityManager());
- // Create server
- final Main main = new Main();
-
- if (args.length > 0)
- {
- main.confName = args[0];
- System.out.println("Configuration:"+main.confName);
- }
-
// Start server - Main does not have the proper permissions
AccessController.doPrivileged(new PrivilegedAction()
{
public Object run()
{
- main.run();
+ if (args.length > 0)
+ {
+ new Main(args);
+ } else
+ {
+ new Main();
+ }
return null;
}
});
}
// Constructors --------------------------------------------------
-
- // Public --------------------------------------------------------
- public void run()
- {
+ public Main()
+ {
+ this(new String[] { "jboss" });
+ }
+
+ public Main(String[] configurations)
+ {
try
{
- PrintStream err = System.err;
+ final PrintStream err = System.err;
com.sun.management.Trace.parseTraceProperties();
- server = new MBeanServer();
-
- // Create MLet
- MLet mlet = new MLet();
- server.registerMBean(mlet, new ObjectName(server.getDefaultDomain(),
"service", "MLet"));
-
- // Set MLet as classloader for this app
- Thread.currentThread().setContextClassLoader(mlet);
-
- // Read default configuration
- URL mletConf = getClass().getClassLoader().getResource("jboss.conf");
- Set beans = (Set)mlet.getMBeansFromURL(mletConf);
- Iterator enum = beans.iterator();
- while (enum.hasNext())
- {
- Object obj = enum.next();
- if (obj instanceof RuntimeOperationsException)
-
((RuntimeOperationsException)obj).getTargetException().printStackTrace(err);
- else if (obj instanceof RuntimeErrorException)
- ((RuntimeErrorException)obj).getTargetError().printStackTrace(err);
- else if (obj instanceof MBeanException)
- ((MBeanException)obj).getTargetException().printStackTrace(err);
- else if (obj instanceof RuntimeMBeanException)
-
((RuntimeMBeanException)obj).getTargetException().printStackTrace(err);
- }
-
- // Read additional configuration
- if (confName != null)
- {
- System.out.println("Load configuration:"+confName);
+ // Load all configurations - one MBeanServer for each
configuration
+ for (int i = 0; i < configurations.length; i++)
+ {
+ final MBeanServer server = new MBeanServer();
+
+ // Create MLet
+ MLet mlet = new MLet();
+ server.registerMBean(mlet, new ObjectName(server.getDefaultDomain(),
"service", "MLet"));
+
+ // Set MLet as classloader for this app
+ Thread.currentThread().setContextClassLoader(mlet);
+
+ // Read configuration
+ URL mletConf =
getClass().getClassLoader().getResource(configurations[i]+".conf");
+ Set beans = (Set)mlet.getMBeansFromURL(mletConf);
+ Iterator enum = beans.iterator();
+ while (enum.hasNext())
+ {
+ Object obj = enum.next();
+ if (obj instanceof RuntimeOperationsException)
+
((RuntimeOperationsException)obj).getTargetException().printStackTrace(err);
+ else if (obj instanceof RuntimeErrorException)
+
((RuntimeErrorException)obj).getTargetError().printStackTrace(err);
+ else if (obj instanceof MBeanException)
+ ((MBeanException)obj).getTargetException().printStackTrace(err);
+ else if (obj instanceof RuntimeMBeanException)
+
((RuntimeMBeanException)obj).getTargetException().printStackTrace(err);
+ else if (obj instanceof Throwable)
+ ((Throwable)obj).printStackTrace(err);
+ }
+
+ // Load settings from XML
+ InputStream conf =
getClass().getClassLoader().getResourceAsStream(configurations[i]+".jcml");
+ byte[] arr = new byte[conf.available()];
+ conf.read(arr);
+ String cfg = new String(arr);
- mletConf = getClass().getClassLoader().getResource(confName);
-
- if (mletConf == null)
- {
- mletConf = new File(confName).toURL();
- }
-
- beans = (Set)mlet.getMBeansFromURL(mletConf);
- enum = beans.iterator();
- while (enum.hasNext())
- {
- Object obj = enum.next();
- if (obj instanceof RuntimeOperationsException)
-
((RuntimeOperationsException)obj).getTargetException().printStackTrace(err);
- else if (obj instanceof RuntimeErrorException)
-
((RuntimeErrorException)obj).getTargetError().printStackTrace(err);
- else if (obj instanceof MBeanException)
- ((MBeanException)obj).getTargetException().printStackTrace(err);
- }
- }
-
- // Start adaptor
- server.invoke(new ObjectName("Adaptor:name=html,port=8082"), "start", new
Object[0], new String[0]);
-
- // Add shutdown hook
- try
- {
- Runtime.getRuntime().addShutdownHook(new Thread()
- {
- public void run()
- {
- System.out.println("Shutdown");
- Set mBeans = server.queryNames(null, null);
- Iterator names = mBeans.iterator();
- System.out.println("Shutting down "+mBeans.size() +" MBeans");
- while (names.hasNext())
- {
- ObjectName name = (ObjectName)names.next();
- try
- {
- System.out.println(server.invoke(name, "toString", new
Object[0], new String[0]));
- } catch (Throwable e)
- {
- // Ignore
- }
- }
-
- }
- });
- } catch (Throwable e)
- {
- System.out.println("Could not add shutdown hook");
- // JDK 1.2.. ignore!
- }
- // Done
- System.out.println("jBoss 2.0 Started");
+ // Invoke configuration loader
+ server.invoke(new ObjectName(":service=Configuration"), "load", new
Object[] { cfg }, new String[] { "java.lang.String" });
+
+ // Get configuration from service
+ cfg = (String)server.invoke(new ObjectName(":service=Configuration"),
"save", new Object[0] , new String[0]);
+
+ // Store config
+ // This way, the config will always contain a complete
mirror of what's in the server
+ URL confUrl =
getClass().getClassLoader().getResource(configurations[i]+".jcml");
+ PrintWriter out = new PrintWriter(new
FileWriter(confUrl.getFile()));
+ out.println(cfg);
+ out.close();
+
+ // Start MBeans
+// Iterator mbeans = server.queryNames(null,
null).iterator();
+ Iterator mbeans = beans.iterator();
+ while (mbeans.hasNext())
+ {
+ ObjectName name =
((ObjectInstance)mbeans.next()).getObjectName();
+ try
+ {
+ server.invoke(name, "start", new
Object[0], new String[0]);
+ } catch (Exception e)
+ {
+ // Ignore
+ }
+ }
+
+ // Add shutdown hook
+ try
+ {
+ Runtime.getRuntime().addShutdownHook(new Thread()
+ {
+ public void run()
+ {
+ err.println("Shutdown");
+ Set mBeans = server.queryNames(null, null);
+ Iterator names = mBeans.iterator();
+ err.println("Shutting down "+mBeans.size() +" MBeans");
+ while (names.hasNext())
+ {
+ ObjectName name = (ObjectName)names.next();
+ try
+ {
+ server.invoke(name, "destroy", new Object[0], new
String[0]);
+ } catch (Throwable e)
+ {
+// err.println(e);
+ }
+ }
+ err.println("Shutting done");
+ }
+ });
+ System.out.println("Shutdown hook added");
+ } catch (Throwable e)
+ {
+ System.out.println("Could not add shutdown hook");
+ // JDK 1.2.. ignore!
+ }
-/*
- // Command tool
- // Should be replaced with a MBean?
-
- BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
- String line;
- while (true)
- {
- // Get command
- line = reader.readLine();
-
- if (line.equals("shutdown"))
- {
- Set mBeans = server.queryNames(null, null);
- Iterator names = mBeans.iterator();
- while (names.hasNext())
- {
- ObjectName name = (ObjectName)names.next();
- try
- {
- server.invoke(name, "stop", new Object[0], new String[0]);
- } catch (Throwable e)
- {
- // Ignore
- }
- }
-
- System.exit(0);
- } else
- {
- Set mBeans = server.queryNames(null, null);
- Iterator names = mBeans.iterator();
- while (names.hasNext())
- {
- ObjectName name = (ObjectName)names.next();
- try
- {
- server.invoke(name, line, new Object[0], new String[0]);
- } catch (Throwable e)
- {
- // Ignore
- }
- }
- }
- }
-*/
+ /*
+ // Command tool
+ // Should be replaced with a MBean?
+
+ BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
+ String line;
+ while (true)
+ {
+ // Get command
+ line = reader.readLine();
+
+ if (line.equals("shutdown"))
+ {
+ Set mBeans = server.queryNames(null, null);
+ Iterator names = mBeans.iterator();
+ while (names.hasNext())
+ {
+ ObjectName name = (ObjectName)names.next();
+ try
+ {
+ server.invoke(name, "stop", new Object[0], new String[0]);
+ } catch (Throwable e)
+ {
+ // Ignore
+ }
+ }
+
+ System.exit(0);
+ } else
+ {
+ Set mBeans = server.queryNames(null, null);
+ Iterator names = mBeans.iterator();
+ while (names.hasNext())
+ {
+ ObjectName name = (ObjectName)names.next();
+ try
+ {
+ server.invoke(name, line, new Object[0], new String[0]);
+ } catch (Throwable e)
+ {
+ // Ignore
+ }
+ }
+ }
+ }
+ */
+ }
} catch (RuntimeOperationsException e)
{
System.out.println("Runtime error");
@@ -236,9 +245,15 @@
} catch (MBeanException e)
{
e.getTargetException().printStackTrace();
+ } catch (RuntimeMBeanException e)
+ {
+ e.getTargetException().printStackTrace();
} catch (Exception e)
{
e.printStackTrace();
}
- }
+
+ // Done
+ System.out.println("jBoss 2.0 Started");
+ }
}