You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2008/08/30 06:20:15 UTC

svn commit: r690454 - in /tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util: ObjectManager.java modeler/JmxObjectManager.java

Author: costin
Date: Fri Aug 29 21:20:14 2008
New Revision: 690454

URL: http://svn.apache.org/viewvc?rev=690454&view=rev
Log:
Abstract JMX out, allow other frameworks to be plugged in.

This is pretty early, will need to be reviewed/improved, but it gets the job done.
( JMX may not be available or needed for some embedded apps )


Added:
    tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java   (with props)
    tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java   (with props)

Added: tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java?rev=690454&view=auto
==============================================================================
--- tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java (added)
+++ tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java Fri Aug 29 21:20:14 2008
@@ -0,0 +1,67 @@
+/*
+ */
+package org.apache.tomcat.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tomcat is using JMX heavily - but other apps embedding tomcat may have 
+ * different preferences. 
+ * 
+ * This class removes the dependency on JMX - and allows other kinds of 
+ * frameworks ( like dependency injection - guice, etc ) to configure 
+ * different tomcat objects. 
+ * 
+ * Note that unlike the old Registry, which was only used for monitoring, this
+ * interface also allows configuration and injection, and may use other 
+ * methods to get what should be monitored/set ( besides bean properties ).
+ * 
+ * InstanceManager was considered - but the interface is pretty confusing and
+ * wrong package ( and didn't fit very well ). It should be possible to 
+ * adapt it. It is possible to use the InstanceManager as one of the providers.
+ * Sprint, Guice, JNDI, web.xml, CLI are other possible providers.
+ * 
+ * @author Costin Manolache
+ */
+public class ObjectManager {
+    
+    List<ObjectManagerProvider> managers = 
+        new ArrayList<ObjectManagerProvider>(); 
+    
+    static ObjectManager singleton = new ObjectManager();
+
+    /** 
+     * Ok, singletons can be bad - but it's so much easier, and this just 
+     * calls other managers. 
+     */
+    public static ObjectManager get() { 
+        return singleton;
+    }
+    
+    public void registerManager(ObjectManagerProvider om) {
+        managers.add(om);
+    }
+    
+
+    public void registerObject(Object o, String name, String type) {
+        for (ObjectManagerProvider p : managers) {
+            p.registerObject(o, name, type);
+        }
+    }
+    
+    public void unregisterObject(Object o) {
+        for (ObjectManagerProvider p : managers) {
+            p.unregisterObject(o);
+        }        
+    }
+
+    public static interface ObjectManagerProvider {
+        public Object registerObject(Object o, String name,
+                                     String category);
+        
+        public void unregisterObject(Object o);
+    }
+    
+    
+}

Propchange: tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/ObjectManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java
URL: http://svn.apache.org/viewvc/tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java?rev=690454&view=auto
==============================================================================
--- tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java (added)
+++ tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java Fri Aug 29 21:20:14 2008
@@ -0,0 +1,41 @@
+/*
+ */
+package org.apache.tomcat.util.modeler;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import org.apache.tomcat.util.ObjectManager;
+import org.apache.tomcat.util.ObjectManager.ObjectManagerProvider;
+
+public class JmxObjectManager implements ObjectManagerProvider {
+    Registry registry;
+    Logger log = Logger.getLogger("JmxObjectManager");
+    
+    public JmxObjectManager() {
+        registry = Registry.getRegistry();
+        ObjectManager.get().registerManager(this);
+    }
+    
+    Map<Object, String> reverseMap = new HashMap<Object, String>();
+    
+    public Object registerObject(Object o, String name, String category) {
+        try {
+            registry.registerComponent(o, ":name=" + name, category);
+            reverseMap.put(o, name);
+        } catch (Exception e) {
+            log.severe("Error registering" + e);
+        }
+        return o;
+    }
+
+    // TODO: should we unregister by name ? 
+    // InstanceManager is by instance - name is more registry/jndi centric,
+    // with object it would be easier to adapt to other frameworks
+    
+    public void unregisterObject(Object o) {
+        registry.unregisterComponent(reverseMap.get(o));
+    }
+
+}

Propchange: tomcat/sandbox/tomcat-lite/tomcat-coyote/org/apache/tomcat/util/modeler/JmxObjectManager.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org