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