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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]