/**
* Copyright (c) 2000-2008 Liferay, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package de.tudarmstadt.ukp.clarin.webanno.support.standalone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* <a href="ServerDetector.java.html"><b><i>View Source</i></b></a>
*
* @author Brian Wing Shun Chan
*
*/
public class ServerDetector
{
public static final String GERONIMO_CLASS = "/org/apache/geronimo/system/main/Daemon.class";
public static final String GERONIMO_ID = "geronimo";
public static final String GLASSFISH_ID = "glassfish";
public static final String GLASSFISH_SYSTEM_PROPERTY = "com.sun.aas.instanceRoot";
public static final String JBOSS_CLASS = "/org/jboss/Main.class";
public static final String JBOSS_ID = "jboss";
public static final String JETTY_CLASS = "/org/mortbay/jetty/Server.class";
public static final String JETTY_ID = "jetty";
public static final String JONAS_CLASS = "/org/objectweb/jonas/server/Server.class";
public static final String JONAS_ID = "jonas";
public static final String OC4J_CLASS = "oracle.oc4j.util.ClassUtils";
public static final String OC4J_ID = "oc4j";
public static final String ORION_CLASS = "/com/evermind/server/ApplicationServer.class";
public static final String ORION_ID = "orion";
public static final String PRAMATI_CLASS = "/com/pramati/Server.class";
public static final String PRAMATI_ID = "pramati";
public static final String RESIN_CLASS = "/com/caucho/server/resin/Resin.class";
public static final String RESIN_ID = "resin";
public static final String REXIP_CLASS = "/com/tcc/Main.class";
public static final String REXIP_ID = "rexip";
public static final String TOMCAT_BOOTSTRAP_CLASS = "/org/apache/catalina/startup/Bootstrap.class";
public static final String TOMCAT_EMBEDDED_CLASS = "/org/apache/catalina/startup/Embedded.class";
public static final String TOMCAT_ID = "tomcat";
public static final String WEBLOGIC_CLASS = "/weblogic/Server.class";
public static final String WEBLOGIC_ID = "weblogic";
public static final String WEBSPHERE_CLASS = "/com/ibm/websphere/product/VersionInfo.class";
public static final String WEBSPHERE_ID = "websphere";
public static final String WINSTONE_CLASS = "/winstone/Launcher.class";
public static final String WINSTONE_ID = "winstone";
public static String getServerId()
{
ServerDetector sd = _instance;
if (sd._serverId == null) {
if (isGeronimo()) {
sd._serverId = GERONIMO_ID;
}
else if (isGlassfish()) {
sd._serverId = GLASSFISH_ID;
}
else if (isJBoss()) {
sd._serverId = JBOSS_ID;
}
else if (isJOnAS()) {
sd._serverId = JONAS_ID;
}
else if (isOC4J()) {
sd._serverId = OC4J_ID;
}
else if (isOrion()) {
sd._serverId = ORION_ID;
}
else if (isPramati()) {
sd._serverId = PRAMATI_ID;
}
else if (isResin()) {
sd._serverId = RESIN_ID;
}
else if (isRexIP()) {
sd._serverId = REXIP_ID;
}
else if (isWebLogic()) {
sd._serverId = WEBLOGIC_ID;
}
else if (isWebSphere()) {
sd._serverId = WEBSPHERE_ID;
}
else if (isWinstone()) {
sd._serverId = WINSTONE_ID;
}
if (isJetty()) {
if (sd._serverId == null) {
sd._serverId = JETTY_ID;
}
else {
sd._serverId += "-" + JETTY_ID;
}
}
else if (isTomcat()) {
if (sd._serverId == null) {
sd._serverId = TOMCAT_ID;
}
else {
sd._serverId += "-" + TOMCAT_ID;
}
}
// if (LOG.isInfoEnabled()) {
// LOG.info("Detected server " + sd._serverId);
// }
// "null" is just fine for us ;)
// if (sd._serverId == null) {
// throw new RuntimeException("Server is not supported");
// }
}
return sd._serverId;
}
public static boolean isGeronimo()
{
ServerDetector sd = _instance;
if (sd._geronimo == null) {
sd._geronimo = _detect(GERONIMO_CLASS);
}
return sd._geronimo.booleanValue();
}
public static boolean isGlassfish()
{
ServerDetector sd = _instance;
if (sd._glassfish == null) {
String value = System.getProperty(GLASSFISH_SYSTEM_PROPERTY);
if (value != null) {
sd._glassfish = Boolean.TRUE;
}
else {
sd._glassfish = Boolean.FALSE;
}
}
return sd._glassfish.booleanValue();
}
public static boolean isJBoss()
{
ServerDetector sd = _instance;
if (sd._jBoss == null) {
sd._jBoss = _detect(JBOSS_CLASS);
}
return sd._jBoss.booleanValue();
}
public static boolean isJetty()
{
ServerDetector sd = _instance;
if (sd._jetty == null) {
sd._jetty = _detect(JETTY_CLASS);
}
return sd._jetty.booleanValue();
}
public static boolean isJOnAS()
{
ServerDetector sd = _instance;
if (sd._jonas == null) {
sd._jonas = _detect(JONAS_CLASS);
}
return sd._jonas.booleanValue();
}
public static boolean isOC4J()
{
ServerDetector sd = _instance;
if (sd._oc4j == null) {
sd._oc4j = _detect(OC4J_CLASS);
}
return sd._oc4j.booleanValue();
}
public static boolean isOrion()
{
ServerDetector sd = _instance;
if (sd._orion == null) {
sd._orion = _detect(ORION_CLASS);
}
return sd._orion.booleanValue();
}
public static boolean isPramati()
{
ServerDetector sd = _instance;
if (sd._pramati == null) {
sd._pramati = _detect(PRAMATI_CLASS);
}
return sd._pramati.booleanValue();
}
public static boolean isResin()
{
ServerDetector sd = _instance;
if (sd._resin == null) {
sd._resin = _detect(RESIN_CLASS);
}
return sd._resin.booleanValue();
}
public static boolean isRexIP()
{
ServerDetector sd = _instance;
if (sd._rexIP == null) {
sd._rexIP = _detect(REXIP_CLASS);
}
return sd._rexIP.booleanValue();
}
public static boolean isTomcat()
{
ServerDetector sd = _instance;
if (sd._tomcat == null) {
sd._tomcat = _detect(TOMCAT_BOOTSTRAP_CLASS);
}
if (sd._tomcat == null) {
sd._tomcat = _detect(TOMCAT_EMBEDDED_CLASS);
}
return sd._tomcat.booleanValue();
}
public static boolean isWebLogic()
{
ServerDetector sd = _instance;
if (sd._webLogic == null) {
sd._webLogic = _detect(WEBLOGIC_CLASS);
}
return sd._webLogic.booleanValue();
}
public static boolean isWebSphere()
{
ServerDetector sd = _instance;
if (sd._webSphere == null) {
sd._webSphere = _detect(WEBSPHERE_CLASS);
}
return sd._webSphere.booleanValue();
}
public static boolean isWinstone()
{
ServerDetector sd = _instance;
if (sd._winstone == null) {
sd._winstone = _detect(WINSTONE_CLASS);
}
return sd._winstone.booleanValue();
}
private static Boolean _detect(String className)
{
try {
ClassLoader.getSystemClassLoader().loadClass(className);
return Boolean.TRUE;
}
catch (ClassNotFoundException cnfe) {
ServerDetector sd = _instance;
Class<?> c = sd.getClass();
if (c.getResource(className) != null) {
return Boolean.TRUE;
}
else {
return Boolean.FALSE;
}
}
}
private ServerDetector()
{
}
private static Logger LOG = LoggerFactory.getLogger(ServerDetector.class);
private static ServerDetector _instance = new ServerDetector();
private String _serverId;
private Boolean _geronimo;
private Boolean _glassfish;
private Boolean _jBoss;
private Boolean _jetty;
private Boolean _jonas;
private Boolean _oc4j;
private Boolean _orion;
private Boolean _pramati;
private Boolean _resin;
private Boolean _rexIP;
private Boolean _tomcat;
private Boolean _webLogic;
private Boolean _webSphere;
private Boolean _winstone;
}