package org.etk.kernel.container.monitor.jvm;
import java.io.File;
import java.lang.management.ManagementFactory;
import java.lang.reflect.Method;
import java.net.URI;
import javax.management.MBeanServer;
public class J2EEServerInfo {
/**
* The logger
*/
//private static final Log log = ExoLogger.getLogger("exo.kernel.container.J2EEServerInfo");
/**
* The name of the JVM parameter that allows us to change the location of
* the configuration directory
*/
public static final String ETK_CONF_PARAM = "etk.conf.dir";
/**
* The name of the JVM parameter that allows us to change the default name
* of the configuration directory which is "exo-conf"
*/
public static final String ETK_CONF_DIR_NAME_PARAM = "etk.conf.dir.name";
private String serverName_;
private String serverHome_;
private String exoConfDir_;
protected String sharedLibDirecotry_;
protected String appDeployDirecotry_;
protected MBeanServer mbeanServer;
public J2EEServerInfo() {
String jonasHome = System.getProperty("jonas.base");
String jbossHome = System.getProperty("jboss.home.dir");
String jettyHome = System.getProperty("jetty.home");
String websphereHome = System.getProperty("was.install.root");
String weblogicHome = System.getProperty("wls.home");
String catalinaHome = System.getProperty("catalina.home");
String testHome = System.getProperty("maven.exoplatform.dir");
// The name of the configuration directory
final String confDirName = System.getProperty(ETK_CONF_DIR_NAME_PARAM, "etk-conf");
if (jonasHome != null) {
serverName_ = "jonas";
serverHome_ = jonasHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
} else if (jbossHome != null) {
serverName_ = "jboss";
serverHome_ = jbossHome;
// try find and use jboss.server.config.url
// based on http://www.jboss.org/community/docs/DOC-10730
String jbossConfigUrl = System.getProperty("jboss.server.config.url");
if (jbossConfigUrl != null) {
try {
exoConfDir_ = new File(new File(new URI(jbossConfigUrl)), confDirName).getAbsolutePath();
} catch (Throwable e) {
// don't care about it
exoConfDir_ = serverHome_ + "/" + confDirName;
}
} else
exoConfDir_ = serverHome_ + "/" + confDirName;
//
try {
Class clazz = Thread.currentThread().getContextClassLoader().loadClass("org.jboss.mx.util.MBeanServerLocator");
Method m = clazz.getMethod("locateJBoss");
mbeanServer = (MBeanServer) m.invoke(null);
} catch (Exception ignore) {
ignore.printStackTrace();
}
} else if (jettyHome != null) {
serverName_ = "jetty";
serverHome_ = jettyHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
} else if (websphereHome != null) {
serverName_ = "websphere";
serverHome_ = websphereHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
} else if (weblogicHome != null) {
serverName_ = "weblogic";
serverHome_ = weblogicHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
// Catalina has to be processed at the end as other servers may
// embed it
} else if (catalinaHome != null) {
serverName_ = "tomcat";
serverHome_ = catalinaHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
} else if (testHome != null) {
serverName_ = "test";
serverHome_ = testHome;
exoConfDir_ = serverHome_ + "/" + confDirName;
} else {
// throw new
// UnsupportedOperationException("unknown server platform") ;
serverName_ = "standalone";
serverHome_ = System.getProperty("user.dir");
exoConfDir_ = serverHome_ + "/" + confDirName;
}
if (mbeanServer == null) {
mbeanServer = ManagementFactory.getPlatformMBeanServer();
}
String exoConfHome = System.getProperty(ETK_CONF_PARAM);
if (exoConfHome != null && exoConfHome.length() > 0) {
//log.info("Override exo-conf directory '" + exoConfDir_ + "' with location '" + exoConfHome + "'");
exoConfDir_ = exoConfHome;
}
serverHome_ = serverHome_.replace('\\', '/');
exoConfDir_ = exoConfDir_.replace('\\', '/');
}
/**
* Returns an mbean server setup by the application server environment or
* null if none cannot be located.
*
* @return an mean server
*/
public MBeanServer getMBeanServer() {
return mbeanServer;
}
public String getServerName() {
return serverName_;
}
public String getServerHome() {
return serverHome_;
}
public String getExoConfigurationDirectory() {
return exoConfDir_;
}
public String getSharedLibDirectory() {
return sharedLibDirecotry_;
}
public String getApplicationDeployDirectory() {
return appDeployDirecotry_;
}
public boolean isJBoss() {
return "jboss".equals(serverName_);
}
}