00001
00025
package org.objectweb.cjdbc.controller.jmx;
00026
00027
import java.util.Iterator;
00028
import java.util.List;
00029
00030
import javax.management.MBeanServer;
00031
import javax.management.MBeanServerFactory;
00032
import javax.management.ObjectInstance;
00033
import javax.management.ObjectName;
00034
00035
import org.objectweb.cjdbc.common.i18n.Translate;
00036
import org.objectweb.cjdbc.common.jmx.JmxException;
00037
import org.objectweb.cjdbc.common.log.Trace;
00038
00049 public class MBeanServerManager
00050 {
00051
00052 static Trace
logger = Trace
00053 .getLogger(
"org.objectweb.cjdbc.controller.jmx.MBeanServer");
00054
00055 private static MBeanServer
mbs;
00056 private static boolean isJmxEnabled =
true;
00057
00064 public static synchronized MBeanServer
getInstance()
00065 {
00066
00067
if (!
isJmxEnabled)
00068 {
00069
return null;
00070 }
00071
00072
if (
mbs != null)
00073 {
00074
return mbs;
00075 }
00076
00077 String defaultServerBuilder = System
00078 .getProperty(
"javax.management.builder.initial");
00079
00080
if (!
MBeanServerBuilder.class.getName().equals(defaultServerBuilder))
00081 {
00082
if (defaultServerBuilder != null)
00083
logger.error(
"property javax.management.builder.initial was "
00084 + defaultServerBuilder);
00085
00086
logger.debug(
"setting property javax.management.builder.initial");
00087 System
00088 .setProperty(
"javax.management.builder.initial",
00089 org.objectweb.cjdbc.controller.jmx.MBeanServerBuilder.class
00090 .getName());
00091
00092 }
00093
00094
mbs = MBeanServerFactory.createMBeanServer();
00095
return mbs;
00096 }
00097
00103 public static boolean isJmxEnabled()
00104 {
00105
return isJmxEnabled;
00106 }
00107
00114 public static void setJmxEnabled(
boolean isJmxEnabled)
throws JmxException
00115 {
00116
if (
MBeanServerManager.isJmxEnabled !=
isJmxEnabled && !
isJmxEnabled)
00117 {
00118
00119 List list =
RmiConnector.getRmiConnectors();
00120
for (Iterator it = list.iterator(); it.hasNext();)
00121 {
00122
RmiConnector rmi = (
RmiConnector) it.next();
00123 rmi.
stop();
00124 }
00125
00126
00127 list =
HttpAdaptor.getHttpAdaptors();
00128
for (Iterator it = list.iterator(); it.hasNext();)
00129 {
00130
HttpAdaptor http = (
HttpAdaptor) it.next();
00131 http.
stop();
00132 }
00133
00134 MBeanServerFactory.releaseMBeanServer(
mbs);
00135
mbs = null;
00136 }
00137
00138
MBeanServerManager.isJmxEnabled =
isJmxEnabled;
00139 }
00140
00163 public static ObjectInstance
registerMBean(Object object, ObjectName name)
00164
throws JmxException
00165 {
00166 MBeanServer server =
getInstance();
00167
try
00168 {
00169
00170
if (server != null)
00171 {
00172
logger.debug(
Translate.get(
"jmx.register.mbean",
new String[]{
00173 object.getClass().toString(), name.getCanonicalName()}));
00174
00175 ObjectInstance objInstance = null;
00176
if (!server.isRegistered(name))
00177 {
00178 objInstance = server.registerMBean(object, name);
00179 }
00180
else
00181 {
00182
logger.error(
Translate.get(
"jmx.register.mbean.already.exist",
00183
new String[]{name.getCanonicalName()}));
00184 objInstance = server.getObjectInstance(name);
00185 }
00186
00187
logger.debug(
Translate.get(
"jmx.server.mbean.count",
""
00188 + server.getMBeanCount()));
00189
return objInstance;
00190 }
00191
return null;
00192 }
00193
catch (Exception e)
00194 {
00195 logger.error(Translate.get(
"jmx.register.mbean.failed",
00196
new String[]{object.getClass().toString(), e.getMessage(),
00197 e.getClass().toString()}));
00198 e.printStackTrace();
00199 e.getCause().printStackTrace();
00200
throw new JmxException(e);
00201 }
00202 }
00203
00210 public static void unregister(ObjectName name)
throws JmxException
00211 {
00212 MBeanServer server = getInstance();
00213
if (server != null)
00214 {
00215
try
00216 {
00217
00218 server.unregisterMBean(name);
00219 logger.debug(
Translate.get(
"jmx.server.mbean.count",
""
00220 + server.getMBeanCount()));
00221
00222 }
00223
catch (Exception e)
00224 {
00225 logger.error(
Translate.get(
"jmx.register.mbean.failed",
new String[]{
00226 name.getCanonicalName(), e.getMessage()}));
00227
throw new JmxException(e);
00228 }
00229 }
00230 }
00231
00232 }