Added some JMX support.
[jsvc.git] / src / dolda / jsvc / scgi / DirServer.java
index 1ac452c..5d82739 100644 (file)
@@ -7,10 +7,12 @@ import java.util.logging.*;
 import dolda.jsvc.*;
 import dolda.jsvc.util.*;
 import dolda.jsvc.j2ee.PosixArgs;
+import java.lang.management.ManagementFactory;
+import javax.management.*;
 
 public class DirServer extends Server {
     private final Map<File, DSContext> contexts = new HashMap<File, DSContext>();
-    private final Environment env;
+    public final Environment env;
     private final Logger logger = Logger.getLogger("dolda.jsvc.scgi.dirserver");
     private Thread sdhook = null, main = null;
     
@@ -26,6 +28,11 @@ public class DirServer extends Server {
            if(ctx != null) {
                if(ctx.mtime < file.lastModified()) {
                    ctx.tg.shutdown();
+                   try {
+                       ManagementFactory.getPlatformMBeanServer().unregisterMBean(ctx.mbean.name);
+                   } catch(InstanceNotFoundException e) {
+                   } catch(MBeanRegistrationException e) {
+                   }
                    contexts.remove(file);
                    ctx = null;
                    act = "reloaded %s as %s";
@@ -33,6 +40,12 @@ public class DirServer extends Server {
            }
            if(ctx == null) {
                ctx = new DSContext(file, env);
+               try {
+                   ManagementFactory.getPlatformMBeanServer().registerMBean(ctx.mbean, ctx.mbean.name);
+               } catch(InstanceAlreadyExistsException e) {
+               } catch(MBeanRegistrationException e) {
+               } catch(NotCompliantMBeanException e) {
+               }
                contexts.put(file, ctx);
                logger.config(String.format(act, file, ctx.name()));
            }
@@ -77,6 +90,11 @@ public class DirServer extends Server {
            }
        }
        super.shutdown();
+       try {
+           ManagementFactory.getPlatformMBeanServer().unregisterMBean(dolda.jsvc.scgi.jmx.Server.name);
+       } catch(InstanceNotFoundException e) {
+       } catch(MBeanRegistrationException e) {
+       }
     }
 
     private static void usage(PrintStream out) {
@@ -124,6 +142,12 @@ public class DirServer extends Server {
            return; /* Because javac is stupid. :-/ */
        }
        DirServer s = new DirServer(sk, env);
+       try {
+           ManagementFactory.getPlatformMBeanServer().registerMBean(new dolda.jsvc.scgi.jmx.Server(s), dolda.jsvc.scgi.jmx.Server.name);
+       } catch(InstanceAlreadyExistsException e) {
+       } catch(MBeanRegistrationException e) {
+       } catch(NotCompliantMBeanException e) {
+       }
        if(charset != null)
            s.headcs = charset;