본문 바로가기

java

ClassLoader를 이용한 서버 종류 알아내기

현재 프로젝트가 개발은 Tomcat으로, 서버는 JEUS를 사용하고 있습니다. 이런 환경을 제가 만든건 아니고 ㅡ.; EJB개발하는것도 아닌데 JEUS가 너무 무거우니 간단하게 그냥 tomcat가자는 다른분의 의견이 받아들여진 것이었죠.

 

Servlet spec 2.4를 기준으로 작업을 하니 웬만한건 양쪽다 먹는데 JNDI datasource를 가져오는 부분의 방법이 서로 틀리더군요.

 

Spring에서 datasource정의하는 부분도 JEUS, Tomcat용으로 따로 사용을 하곤 했죠.

이건 그냥 Spring 설정파일 바꾸는거니 그런대로 할만 했습니다.

 

그러다가 Spring+Ibatis조합을 안통하고 그냥 JDBC 코딩을 해야 될 상황이 생겼는데 이때는 무지하게 귀찮아지더군요. 컴파일을 새로해야 되니 너무 귀찮아서요.

 

Liferay라는 오픈소스를 보다 정답을 찾았죠. Server의 종류를 알아내는 방법이 있더군요.

ClassLoader.getSystemClassLoader().loadClass();을 이용하더군요.

허접한 개발자라 몰랐습니다. 이런방법이 있을줄..

 

다음은 그 클래스 소스입니다.

 

package com.test;

 

public class ServerDetector {

 

               public static final String JEUS_CLASS = "/jeus/server/JeusServer.class";

 

               public static final String JEUS_ID = "jeus";

 

               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_CLASS = "/com/sun/appserv/ClassLoaderUtil.class";

 

               public static final String GLASSFISH_ID = "glassfish";

 

               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 SUN7_CLASS = "/com/iplanet/ias/tools/cli/IasAdminMain.class";

 

               public static final String SUN7_ID = "sun7";

 

               public static final String SUN8_CLASS = "/com/sun/enterprise/cli/framework/CLIMain.class";

 

               public static final String SUN8_ID = "sun8";

 

               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";

              

 

               private static ServerDetector _instance = new ServerDetector();

 

               private String _serverId;

 

               private Boolean _jeus;

 

               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 _sun7;

 

               private Boolean _sun8;

 

               private Boolean _tomcat;

 

               private Boolean _webLogic;

 

               private Boolean _webSphere;   

              

               private ServerDetector() {

               }       

              

 

               public static String getServerId() {

                              ServerDetector sd = _instance;

 

                              if (sd._serverId == null) {

                                               if (ServerDetector.isJeus()) {

                                                              sd._serverId = JEUS_ID;

                                               }

                                               else if (ServerDetector.isGeronimo()) {

                                                              sd._serverId = GERONIMO_ID;

                                               }

                                               else if (ServerDetector.isGlassfish()) {

                                                              sd._serverId = GLASSFISH_ID;

                                               }

                                               else if (ServerDetector.isJBoss()) {

                                                              sd._serverId = JBOSS_ID;

                                               }

                                               else if (ServerDetector.isJOnAS()) {

                                                              sd._serverId = JONAS_ID;

                                               }

                                               else if (ServerDetector.isOC4J()) {

                                                              sd._serverId = OC4J_ID;

                                               }

                                               else if (ServerDetector.isOrion()) {

                                                              sd._serverId = ORION_ID;

                                               }

                                               else if (ServerDetector.isPramati()) {

                                                              sd._serverId = PRAMATI_ID;

                                               }

                                               else if (ServerDetector.isResin()) {

                                                              sd._serverId = RESIN_ID;

                                               }

                                               else if (ServerDetector.isRexIP()) {

                                                              sd._serverId = REXIP_ID;

                                               }

                                               else if (ServerDetector.isSun7()) {

                                                              sd._serverId = SUN7_ID;

                                               }

                                               else if (ServerDetector.isSun8()) {

                                                              sd._serverId = SUN8_ID;

                                               }

                                               else if (ServerDetector.isWebLogic()) {

                                                              sd._serverId = WEBLOGIC_ID;

                                               }

                                               else if (ServerDetector.isWebSphere()) {

                                                              sd._serverId = WEBSPHERE_ID;

                                               }

                                               else if (ServerDetector.isWebSphere()) {

                                                              sd._serverId = WEBSPHERE_ID;

                                               }

                                               if (ServerDetector.isJetty()) {

                                                              if (sd._serverId == null) {

                                                                              sd._serverId = JETTY_ID;

                                                              }

                                                              else {

                                                                              sd._serverId += "-" + JETTY_ID;

                                                              }

                                               }

                                               else if (ServerDetector.isTomcat()) {

                                                              if (sd._serverId == null) {

                                                                              sd._serverId = TOMCAT_ID;

                                                              }

                                                              else {

                                                                              sd._serverId += "-" + TOMCAT_ID;

                                                              }

                                               }

                                              

                                               System.out.println("Detected server ===========================> " + sd._serverId);

                                              

                                               if (sd._serverId == null) {

                                                              throw new RuntimeException("Server is not supported");

                                               }

                              }

 

                              return sd._serverId;

               }

 

               public static boolean isJeus() {

                              ServerDetector sd = _instance;

 

                              if (sd._jeus == null) {

                                               sd._jeus = _detect(JEUS_CLASS);

                              }

 

                              return sd._jeus.booleanValue();

               }       

              

               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) {

                                               sd._glassfish = _detect(GLASSFISH_CLASS);

                              }

 

                              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 isSun() {

                              if (isSun7() || isSun8()) {

                                               return true;

                              }

                              else {

                                               return false;

                              }

               }

 

               public static boolean isSun7() {

                              ServerDetector sd = _instance;

 

                              if (sd._sun7 == null) {

                                               sd._sun7 = _detect(SUN7_CLASS);

                              }

 

                              return sd._sun7.booleanValue();

               }

 

               public static boolean isSun8() {

                              ServerDetector sd = _instance;

 

                              if (sd._sun8 == null) {

                                               sd._sun8 = _detect(SUN8_CLASS);

                              }

 

                              return sd._sun8.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();

               }

 

               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;

                                               }

                              }

               }

 

}

'java' 카테고리의 다른 글

Custom Tags in JSP Pages  (0) 2008.12.31
Java -classpath 옵션  (1) 2008.04.29
Tomcat과 JEUS에서의 EL  (0) 2008.01.22
Jakarta String Tag Library  (4) 2007.12.13
현재 프로젝트의 자바 라이브러리 정리..  (0) 2007.09.14