You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2008/02/15 19:37:16 UTC
svn commit: r628142 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/reference/ iapi/services/jmx/ impl/services/jmx/
impl/services/jmxnone/ impl/services/monitor/ jdbc/ mbeans/
Author: djd
Date: Fri Feb 15 10:37:15 2008
New Revision: 628142
URL: http://svn.apache.org/viewvc?rev=628142&view=rev
Log:
DERBY-3424 (partial) Add initial apis and bean implementations for a management
mbean to control Derby's JMX behaviour. Start and stop the management are
present as operations but currently do nothing. Also fix a bug in DERBY-1387
where shutting down Derby would fail with jmx when multiple mbeans were registered.
Added:
db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java (with props)
db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java (with props)
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/Module.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/jmx/ManagementService.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmx/JMXManagementService.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmxnone/NoManagementService.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java
db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/Module.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/Module.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/Module.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/reference/Module.java Fri Feb 15 10:37:15 2008
@@ -31,5 +31,7 @@
String LockFactory = "org.apache.derby.iapi.services.locks.LockFactory";
String PropertyFactory = "org.apache.derby.iapi.services.property.PropertyFactory";
String ResourceAdapter = "org.apache.derby.iapi.jdbc.ResourceAdapter";
+
+ String JMX = "org.apache.derby.iapi.services.jmx.ManagementService";
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/jmx/ManagementService.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/jmx/ManagementService.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/jmx/ManagementService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/services/jmx/ManagementService.java Fri Feb 15 10:37:15 2008
@@ -18,6 +18,8 @@
package org.apache.derby.iapi.services.jmx;
import org.apache.derby.iapi.error.StandardException;
+import org.apache.derby.iapi.reference.Module;
+import org.apache.derby.mbeans.ManagementMBean;
/**
@@ -32,16 +34,12 @@
* The following code can be used to locate an instance of this service
* if running.
*
-* ManagementService ms = (ManagementService)Monitor.getSystemModule
-* ("org.apache.derby.iapi.services.mbeans.ManagementService");
+* ManagementService ms = (ManagementService)
+* Monitor.getSystemModule(Module.JMX);
*
*/
-public interface ManagementService {
-
- /* Class name of this interface */
- public static final String MODULE =
- "org.apache.derby.iapi.services.jmx.ManagementService";
-
+public interface ManagementService extends ManagementMBean {
+
/**
* The domain for all of derby's mbeans: org.apache.derby
*/
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmx/JMXManagementService.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmx/JMXManagementService.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmx/JMXManagementService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmx/JMXManagementService.java Fri Feb 15 10:37:15 2008
@@ -22,6 +22,7 @@
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
@@ -39,6 +40,8 @@
import org.apache.derby.iapi.services.monitor.ModuleControl;
import org.apache.derby.iapi.services.monitor.Monitor;
import org.apache.derby.iapi.services.property.PropertyUtil;
+import org.apache.derby.mbeans.Management;
+import org.apache.derby.mbeans.ManagementMBean;
import org.apache.derby.mbeans.VersionMBean;
/**
@@ -53,7 +56,7 @@
* Platfrom MBean server, from ManagementFactory.getPlatformMBeanServer().
*/
private MBeanServer mbeanServer;
-
+
/**
* The set of mbeans registered by this service.
*/
@@ -82,9 +85,14 @@
public synchronized void stop() {
if (mbeanServer == null)
return;
-
- for (ObjectName mbeanName : registeredMbeans)
+
+ // Need a copy of registeredMbeans since unregisterMBean will remove
+ // items from registeredMbeans and thus invalidate any iterator
+ // on it directly.
+ for (ObjectName mbeanName : new HashSet<ObjectName>(registeredMbeans))
unregisterMBean(mbeanName);
+
+ mbeanServer = null;
}
/**
@@ -110,6 +118,10 @@
VersionMBean.class,
"type=Version,jar=derby.jar");
+ registerMBean(this,
+ ManagementMBean.class,
+ "type=Management");
+
} catch (SecurityException se) {
// TODO: just ignoring inability to create the mbean server.
// or should an error or warning be raised?
@@ -209,5 +221,17 @@
//if (!(jme instanceof InstanceNotFoundException))
// throw StandardException.plainWrapException(jme);
}
+ }
+
+ public synchronized boolean isManagementActive() {
+ return mbeanServer != null;
+ }
+
+ public synchronized void startManagement() {
+ // TODO:
+ }
+
+ public synchronized void stopManagement() {
+ // TODO:
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmxnone/NoManagementService.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmxnone/NoManagementService.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmxnone/NoManagementService.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/jmxnone/NoManagementService.java Fri Feb 15 10:37:15 2008
@@ -34,4 +34,11 @@
}
public void unregisterMBean(Object mbeanIdentifier) {
}
+ public boolean isManagementActive() {
+ return false;
+ }
+ public void startManagement() {
+ }
+ public void stopManagement() {
+ }
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/services/monitor/BaseMonitor.java Fri Feb 15 10:37:15 2008
@@ -44,6 +44,7 @@
import org.apache.derby.iapi.error.StandardException;
import org.apache.derby.iapi.services.uuid.UUIDFactory;
import org.apache.derby.iapi.services.timer.TimerFactory;
+import org.apache.derby.iapi.reference.Module;
import org.apache.derby.iapi.reference.Property;
import org.apache.derby.iapi.reference.SQLState;
import org.apache.derby.iapi.reference.Attribute;
@@ -374,7 +375,7 @@
timerFactory = (TimerFactory)Monitor.startSystemModule("org.apache.derby.iapi.services.timer.TimerFactory");
- Monitor.startSystemModule(ManagementService.MODULE);
+ Monitor.startSystemModule(Module.JMX);
} catch (StandardException se) {
Modified: db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java?rev=628142&r1=628141&r2=628142&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/jdbc/InternalDriver.java Fri Feb 15 10:37:15 2008
@@ -23,6 +23,7 @@
package org.apache.derby.jdbc;
import org.apache.derby.iapi.reference.Attribute;
+import org.apache.derby.iapi.reference.Module;
import org.apache.derby.iapi.reference.SQLState;
import org.apache.derby.iapi.reference.MessageId;
import org.apache.derby.iapi.services.io.FormatableProperties;
@@ -92,7 +93,7 @@
active = true;
mbean = ((ManagementService)
- Monitor.getSystemModule(ManagementService.MODULE)).registerMBean(
+ Monitor.getSystemModule(Module.JMX)).registerMBean(
new JDBC(this),
JDBCMBean.class,
"type=JDBC");
@@ -106,7 +107,7 @@
}
((ManagementService)
- Monitor.getSystemModule(ManagementService.MODULE)).unregisterMBean(
+ Monitor.getSystemModule(Module.JMX)).unregisterMBean(
mbean);
active = false;
Added: db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java?rev=628142&view=auto
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java (added)
+++ db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java Fri Feb 15 10:37:15 2008
@@ -0,0 +1,68 @@
+/*
+
+ Derby - Class org.apache.derby.mbeans.Management
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/
+
+package org.apache.derby.mbeans;
+
+import org.apache.derby.iapi.reference.Module;
+import org.apache.derby.iapi.services.monitor.Monitor;
+
+/**
+ * Management and information for the embedded JDBC driver.
+*/
+public class Management implements ManagementMBean {
+
+ private ManagementMBean getManagementService() {
+ return (ManagementMBean)
+ Monitor.getSystemModule(Module.JMX);
+ }
+
+ /**
+ * Start Derby's MBeans.
+ * @see ManagementMBean#startManagement()
+ */
+ public void startManagement() {
+
+ ManagementMBean mgmtService = getManagementService();
+ if (mgmtService != null)
+ mgmtService.startManagement();
+ }
+
+ /**
+ * Stop Derby's MBeans.
+ * @see ManagementMBean#stopManagement()
+ */
+ public void stopManagement() {
+ ManagementMBean mgmtService = getManagementService();
+ if (mgmtService != null)
+ mgmtService.stopManagement();
+ }
+
+ /**
+ * Return state of Derby's JMX management.
+ * @see ManagementMBean#isManagementActive()
+ */
+ public boolean isManagementActive() {
+ ManagementMBean mgmtService = getManagementService();
+ if (mgmtService == null)
+ return false;
+ return mgmtService.isManagementActive();
+ }
+}
Propchange: db/derby/code/trunk/java/engine/org/apache/derby/mbeans/Management.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java?rev=628142&view=auto
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java (added)
+++ db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java Fri Feb 15 10:37:15 2008
@@ -0,0 +1,49 @@
+/*
+
+ Derby - Class org.apache.derby.mbeans.ManagementMBean
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+*/
+
+package org.apache.derby.mbeans;
+
+/**
+ * JMX MBean inteface to control visibility of Derby's MBeans.
+ */
+public interface ManagementMBean {
+
+ /**
+ * Is Derby's JMX management active. If active then Derby
+ * has registered MBeans relevant to its current state.
+ * @return true Derby has registered beans, false Derby has not
+ * registered any beans.
+ */
+ public boolean isManagementActive();
+
+ /**
+ * Inform Derby to start its JMX management by registering
+ * MBeans relevant to its current state. If Derby is not
+ * booted then no action is taken.
+ */
+ public void startManagement();
+
+ /**
+ * Inform Derby to stop its JMX management by unregistering
+ * its MBeans. If Derby is not booted then no action is taken.
+ */
+ public void stopManagement();
+}
Propchange: db/derby/code/trunk/java/engine/org/apache/derby/mbeans/ManagementMBean.java
------------------------------------------------------------------------------
svn:eol-style = native