/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*
* (C) 2009,
* @author Red Hat Middleware LLC.
*/
package com.arjuna.ats.arjuna.tools.osb.util;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.reflect.Constructor;
import java.util.List;
import java.util.Set;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.QueryExp;
import com.arjuna.ats.arjuna.logging.tsLogger;
import com.arjuna.ats.arjuna.tools.osb.mbean.ObjStoreItemMBean;
/**
* Simple wrapper for accessing the JMX server
*
* @deprecated as of 5.0.5.Final In a subsequent release we will change packages names in order to
* provide a better separation between public and internal classes.
*
* @author Mike Musgrove
*/
@Deprecated // in order to provide a better separation between public and internal classes.
public class JMXServer
{
public static String JTS_INITIALISER_CNAME = "com.arjuna.ats.internal.jta.tools.osb.mbean.jts.ToolsInitialiser";
public static String AJT_RECORD_TYPE = "CosTransactions/XAResourceRecord";
public static String AJT_WRAPPER_TYPE = "com.arjuna.ats.internal.jta.tools.osb.mbean.jts.ArjunaTransactionImpleWrapper";
public static String AJT_XAREC_TYPE = "com.arjuna.ats.internal.jta.tools.osb.mbean.jts.XAResourceRecordBean";
private static MBeanServer server;
private static JMXServer agent = new JMXServer();
public static JMXServer getAgent() { return agent; }
public static boolean isJTS() {return getAgent().isJTS;}
private boolean isJTS;
public JMXServer()
{
Class<?> c1;
Class<?> c2;
try {
Class cl = Class.forName(JTS_INITIALISER_CNAME);
Constructor constructor = cl.getConstructor();
constructor.newInstance();
isJTS = true;
} catch (Exception e) { // ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException
if (tsLogger.logger.isTraceEnabled())
tsLogger.logger.trace("JTS not available: " + e);
}
try {
c1 = Class.forName("com.arjuna.ats.internal.jta.Implementations");
c1.getMethod("initialise").invoke(null);
} catch (Exception e) {
}
try {
c2 = Class.forName("com.arjuna.ats.internal.jta.Implementationsx"); // needed for XAResourceRecord
c2.getMethod("initialise").invoke(null);
} catch (Exception e) {
}
}
public MBeanServer getServer()
{
if (server == null)
{
List<MBeanServer> servers = MBeanServerFactory.findMBeanServer(null);
if (servers != null && servers.size() > 0)
server = servers.get(0);
else
server = ManagementFactory.getPlatformMBeanServer();
if (server == null)
server = MBeanServerFactory.createMBeanServer();
}
return server;
}
public ObjectInstance registerMBean(String name, ObjStoreItemMBean bean)
{
try {
if (tsLogger.logger.isDebugEnabled())
tsLogger.logger.debug("registering bean " + name);
//tsLogger.i18NLogger.info_tools_osb_util_JMXServer_m_1(name);
return getServer().registerMBean(bean, new ObjectName(name));
} catch (InstanceAlreadyExistsException e) {
tsLogger.i18NLogger.info_tools_osb_util_JMXServer_m_2(name);
} catch (javax.management.JMException e) {
tsLogger.i18NLogger.warn_tools_osb_util_JMXServer_m_3(name, e);
}
return null;
}
public boolean unregisterMBean(String name)
{
try {
getServer().unregisterMBean(new ObjectName(name));
return true;
} catch (MalformedObjectNameException e) {
tsLogger.i18NLogger.warn_tools_osb_util_JMXServer_m_5(name, e);
} catch (InstanceNotFoundException e) {
if (tsLogger.logger.isTraceEnabled())
tsLogger.logger.tracef("registering bean %s", name);
// tsLogger.i18NLogger.warn_tools_osb_util_JMXServer_m_5(name, e);
} catch (MBeanRegistrationException e) {
// can't happen - none of our beans implement the MBeanRegistration interface
tsLogger.i18NLogger.warn_tools_osb_util_JMXServer_m_6(name, e);
}
return false;
}
public Set<ObjectName> queryNames(String name, QueryExp query) throws MalformedObjectNameException {
return getServer().queryNames(new ObjectName(name), query);
}
}