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");
  +     }
   }
  
  
  

Reply via email to