/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.liferay.portal.kernel.util; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import java.lang.reflect.Field; /** * @author Brian Wing Shun Chan */ public class ServerDetector { public static final String GLASSFISH_ID = "glassfish"; public static final String JBOSS_ID = "jboss"; public static final String JETTY_ID = "jetty"; public static final String JONAS_ID = "jonas"; public static final String OC4J_ID = "oc4j"; public static final String RESIN_ID = "resin"; public static final String SYSTEM_PROPERTY_KEY_SERVER_DETECTOR_SERVER_ID = "server.detector.server.id"; public static final String TOMCAT_ID = "tomcat"; public static final String WEBLOGIC_ID = "weblogic"; public static final String WEBSPHERE_ID = "websphere"; public static final String WILDFLY_ID = "wildfly"; /** * @deprecated As of 7.0.0, with no direct replacement */ @Deprecated public static ServerDetector getInstance() { return new ServerDetector(); } public static String getServerId() { return StringUtil.toLowerCase(_serverType.toString()); } /** * @deprecated As of 7.0.0, with no direct replacement */ @Deprecated public static void init(String serverId) { ServerType serverType = null; try { serverType = ServerType.valueOf(StringUtil.toUpperCase(serverId)); } catch (IllegalArgumentException iae) { serverType = _detectServerType(); } try { Field field = ReflectionUtil.getDeclaredField( ServerDetector.class, "_serverType"); field.set(null, serverType); } catch (Exception e) { ReflectionUtil.throwException(e); } } public static boolean isGlassfish() { if (_serverType == ServerType.GLASSFISH) { return true; } return false; } public static boolean isJBoss() { if (_serverType == ServerType.JBOSS) { return true; } return false; } public static boolean isJetty() { if (_serverType == ServerType.JETTY) { return true; } return false; } public static boolean isJOnAS() { if (_serverType == ServerType.JONAS) { return true; } return false; } public static boolean isOC4J() { if (_serverType == ServerType.OC4J) { return true; } return false; } public static boolean isResin() { if (_serverType == ServerType.RESIN) { return true; } return false; } public static boolean isSupported(String serverType) { if (serverType.equals(ServerDetector.GLASSFISH_ID) || serverType.equals(ServerDetector.JBOSS_ID) || serverType.equals(ServerDetector.JONAS_ID) || serverType.equals(ServerDetector.JETTY_ID) || serverType.equals(ServerDetector.OC4J_ID) || serverType.equals(ServerDetector.RESIN_ID) || serverType.equals(ServerDetector.TOMCAT_ID) || serverType.equals(ServerDetector.WEBLOGIC_ID) || serverType.equals(ServerDetector.WEBSPHERE_ID) || serverType.equals(ServerDetector.WILDFLY_ID)) { return true; } return false; } public static boolean isSupportsComet() { return _SUPPORTS_COMET; } /** * @deprecated As of 7.0.0, with no direct replacement */ @Deprecated public static boolean isSupportsHotDeploy() { return true; } public static boolean isTomcat() { if (_serverType == ServerType.TOMCAT) { return true; } return false; } public static boolean isWebLogic() { if (_serverType == ServerType.WEBLOGIC) { return true; } return false; } public static boolean isWebSphere() { if (_serverType == ServerType.WEBSPHERE) { return true; } return false; } public static boolean isWildfly() { if (_serverType == ServerType.WILDFLY) { return true; } return false; } /** * @deprecated As of 7.0.0, with no direct replacement */ @Deprecated public static void setSupportsHotDeploy(boolean supportsHotDeploy) { } private static boolean _detect(String className) { try { ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); systemClassLoader.loadClass(className); return true; } catch (ClassNotFoundException cnfe) { if (ServerDetector.class.getResource(className) != null) { return true; } else { return false; } } } private static ServerType _detectServerType() { String serverId = System.getProperty( SYSTEM_PROPERTY_KEY_SERVER_DETECTOR_SERVER_ID); if (serverId != null) { return ServerType.valueOf(StringUtil.toUpperCase(serverId)); } if (_hasSystemProperty("com.sun.aas.instanceRoot")) { return ServerType.GLASSFISH; } if (_hasSystemProperty("jboss.home.dir")) { return ServerType.JBOSS; } if (_hasSystemProperty("jonas.base")) { return ServerType.JONAS; } if (_detect("oracle.oc4j.util.ClassUtils")) { return ServerType.OC4J; } if (_hasSystemProperty("resin.home")) { return ServerType.RESIN; } if (_detect("/weblogic/Server.class")) { return ServerType.WEBLOGIC; } if (_detect("/com/ibm/websphere/product/VersionInfo.class")) { return ServerType.WEBSPHERE; } if (_hasSystemProperty("jboss.home.dir")) { return ServerType.WILDFLY; } if (_hasSystemProperty("jetty.home")) { return ServerType.JETTY; } if (_hasSystemProperty("catalina.base")) { return ServerType.TOMCAT; } return ServerType.UNKNOWN; } private static boolean _hasSystemProperty(String key) { String value = System.getProperty(key); if (value != null) { return true; } else { return false; } } private static final boolean _SUPPORTS_COMET = false; private static final Log _log = LogFactoryUtil.getLog(ServerDetector.class); private static final ServerType _serverType; static { _serverType = _detectServerType(); if (System.getProperty("external-properties") == null) { if (_log.isInfoEnabled()) { _log.info( "Detected server " + StringUtil.toLowerCase(_serverType.toString())); } } } private enum ServerType { GLASSFISH, JBOSS, JETTY, JONAS, OC4J, RESIN, TOMCAT, UNKNOWN, WEBLOGIC, WEBSPHERE, WILDFLY; } }