/*
* 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;
import java.io.IOException;
import java.io.File;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.hq.plugin.weblogic.jmx.AttributeGetter;
import org.hyperic.hq.product.ProductPlugin;
import org.hyperic.hq.product.ProductPluginManager;
public class WeblogicProductPlugin extends ProductPlugin {
private static boolean useJAAS = true;
private static boolean autoRT = false;
public static boolean NEW_DISCOVERY=false;
public static boolean usePlatformName=false;
private static boolean ssl2ways = false;
private static String ssl2ways_cert;
private static String ssl2ways_key;
private static String ssl2ways_key_pass;
public static final String NAME = "weblogic";
public static final String SERVER_NAME = "Weblogic";
public static final String ADMIN_NAME = "Weblogic Admin";
public static final String NODEMGR_NAME = "Weblogic NodeManager";
public static final String VERSION_61 = "6.1";
public static final String APP_NAME = "Application";
public static final String EXQ_NAME = "Execute Queue";
public static final String JDBC_CONN_NAME = "JDBC Connection Pool";
public static final String JMS_SRV_NAME = "JMS Server";
public static final String JMS_DEST_NAME = "JMS Destination";
public static final String JTA_RES_NAME = "JTA Resource";
public static final String WEBAPP_NAME = "Webapp";
public static final String ENTITY_EJB_NAME = "Entity EJB";
public static final String MDB_EJB_NAME = "Message Driven EJB";
public static final String STATELESS_EJB_NAME = "Stateless EJB";
public static final String STATEFUL_EJB_NAME = "Stateful EJB";
public static final String PROP_INSTALLPATH =
"weblogic." + ProductPlugin.PROP_INSTALLPATH;
private static Log log = LogFactory.getLog(WeblogicProductPlugin.class);
public static boolean useJAAS() {
return useJAAS;
}
public static boolean useSSL2Ways() {
return ssl2ways;
}
public static String getSSL2WaysKey(){
return ssl2ways_key;
}
public static String getSSL2WaysCert(){
return ssl2ways_cert;
}
public static String getSSL2WaysKeyPass(){
return ssl2ways_key_pass;
}
public static boolean autoRT() {
return autoRT;
}
public String[] getClassPath(ProductPluginManager manager) {
Properties props = manager.getProperties();
String installpath = props.getProperty(PROP_INSTALLPATH);
//jaas is the default, provide a way to use jndi instead
//just in case.
String auth =
props.getProperty("weblogic.auth.method", "jaas").toLowerCase();
NEW_DISCOVERY = props.getProperty("weblogic.discovery.new", "false").equalsIgnoreCase("true");
log.debug("[getClassPath] weblogic.discovery.new=" + NEW_DISCOVERY);
usePlatformName = props.getProperty("weblogic.discover.pname","false").equalsIgnoreCase("true");
log.debug("[getClassPath] usePlatformName=" + usePlatformName);
// SSL2WAYS CERTs
ssl2ways_key=props.getProperty("weblogic.ssl2ways.key");
ssl2ways_key_pass=props.getProperty("weblogic.ssl2ways.key.pass","");
ssl2ways_cert=props.getProperty("weblogic.ssl2ways.cert");
//can't do jaas w/o login config
final String loginConfig =
"java.security.auth.login.config";
if (System.getProperty(loginConfig) == null) { //cmdline PluginDumper
String pdk =
System.getProperty(ProductPluginManager.PROP_PDK_DIR);
String config;
String configFile = "jaas.config";
if (pdk != null) {
config = pdk + "/../" + configFile;
}
else {
config = configFile;
}
if (new File(config).exists()) {
log.debug("-D" + loginConfig + "=" + config);
System.setProperty(loginConfig, config);
}
}
if ("jndi".equals(auth) ||
System.getProperty(loginConfig) == null)
{
useJAAS = false;
}else if ("ssl2ways".equals(auth)){
useJAAS = false;
ssl2ways = true;
}else if (! "jaas".equals(auth)) {
String msg = "Unsupported authentication method: " + auth;
throw new IllegalArgumentException(msg);
}
//e.g. DB has SP2 and SP4 instances managed by 1 agent,
//weblogic.servlet.internal.dd.ContainerDescriptor
//serial UID is incompatible
//XXX not working w/ 9.1, not sure why yet.
//disabled by default for now.
if ("true".equals(props.getProperty("weblogic.autort"))) {
autoRT = true;
}
//XXX tmp ssl support solution
for (Iterator it=props.entrySet().iterator();
it.hasNext();)
{
Map.Entry entry = (Map.Entry)it.next();
String key = (String)entry.getKey();
if (!key.startsWith("weblogic.security.")) {
continue;
}
System.setProperty(key, (String)entry.getValue());
}
String expire = props.getProperty(AttributeGetter.PROP_ATTR_EXPIRE);
if (expire != null) {
System.setProperty(AttributeGetter.PROP_ATTR_EXPIRE, expire);
}
//the jars relative to installpath
String[] classpath = super.getClassPath(manager);
if (installpath == null) {
File path = null;
//try the process table first
if (path == null) {
String dir =
WeblogicDetector.getRunningInstallPath();
if (dir != null) {
path = new File(dir);
}
}
//fallback to registry on win32 only
if ((path == null) && isWin32()) {
path = WeblogicFinder.getServiceInstallPath();
}
if (path == null) {
return classpath; //can be adjusted later
}
else {
installpath = path.getAbsolutePath();
log.info(PROP_INSTALLPATH +
" not set, defaulting to: " +
installpath);
}
}
//XXX ugh. required for ssl to find license file.
//weblogic tries to figure this stuff out based on classpath
//which does not work with our plugin classloader.
String wlHome =
props.getProperty("weblogic.home",
new File(installpath, "server").toString());
System.setProperty("weblogic.home", wlHome);
String beaHome =
props.getProperty("bea.home",
new File(installpath).getParentFile().toString());
System.setProperty("bea.home", beaHome);
File weblogicJar = new File(installpath, "lib/weblogic.jar");
try {
if (weblogicJar.getCanonicalFile().exists()) {
//configured to use 6.1, jaas is not supported.
useJAAS = false;
}
} catch (IOException e) { }
for (int i=0; i<classpath.length; i++) {
File jar = new File(installpath, classpath[i]);
if (jar.exists()) {
classpath[i] = jar.getPath();
}
}
return classpath;
}
}