/*
* NOTE: This copyright does *not* cover user programs that use HQ
* program services by normal system calls through the application
* program interfaces provided as part of the Hyperic Plug-in Development
* Kit or the Hyperic Client Development Kit - this is merely considered
* normal use of the program, and does *not* fall under the heading of
* "derived work".
*
* Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
* This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify
* it under the terms version 2 of the GNU General Public License as
* published by the Free Software Foundation. This program is distributed
* in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*/
package org.hyperic.hq.plugin.weblogic.jmx;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.AttributeNotFoundException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.hq.plugin.weblogic.WeblogicMetric;
import org.hyperic.hq.plugin.weblogic.WeblogicProductPlugin;
public class ApplicationQuery extends ServiceQuery {
private static final Log log = LogFactory.getLog(ApplicationQuery.class);
public static final String MBEAN_TYPE = "ApplicationRuntime";
public static final String MBEAN_TYPE_61 = "ApplicationConfig";
private static final String ATTR_EAR = "EAR";
private static final String[] EAR_ATTRS = { ATTR_EAR };
private static final WeblogicQuery[] COMPONENTS = {
new EntityBeanQuery(),
new MessageDrivenBeanQuery(),
new StatelessBeanQuery(),
new StatefulBeanQuery(),
new WebAppComponentQuery(),
};
private String mbeanName;
public String[] getAttributeNames() {
return EAR_ATTRS;
}
public WeblogicQuery[] getChildQueries() {
return COMPONENTS;
}
public String getMBeanType() {
if (isServer61()) {
return MBEAN_TYPE_61;
}
else {
return MBEAN_TYPE;
}
}
public String getMBeanNameProperty() {
return this.mbeanName;
}
public String getResourceType() {
return WeblogicProductPlugin.APP_NAME;
}
public String getPropertyName() {
return WeblogicMetric.PROP_APP;
}
public boolean isEAR(){
return "true".equalsIgnoreCase(getAttribute(ATTR_EAR));
}
public boolean getAttributes(MBeanServer mServer,
ObjectName name) {
String appName = name.getKeyProperty("Name");
ServerQuery server = (ServerQuery)getParent();
String serverName = server.getName();
//for later use in getScope to find children
this.mbeanName = appName;
if ((appName.startsWith(serverName)) && (appName.length() > (serverName.length() + 1))) {
appName = appName.substring(serverName.length() + 1);
}
if ((appName.startsWith(serverName)) && (appName.length() > serverName.length())) {
appName = appName.substring(serverName.length());
}
log.debug("[getAttributes] mbeanName = '" + this.mbeanName + "' => '" + appName+"'");
if (server.getDiscover().isInternalApp(appName)) {
log.debug(appName+" is a internal Application");
return false;
}
setName(appName);
super.getAttributes(mServer, name);
return true;
}
}