1
22
23 package com.liferay.portal.kernel.util;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27
28
34 public class ServerDetector {
35
36 public static final String GERONIMO_ID = "geronimo";
37
38 public static final String GLASSFISH_ID = "glassfish";
39
40 public static final String JBOSS_ID = "jboss";
41
42 public static final String JETTY_ID = "jetty";
43
44 public static final String JONAS_ID = "jonas";
45
46 public static final String OC4J_ID = "oc4j";
47
48 public static final String RESIN_ID = "resin";
49
50 public static final String TOMCAT_ID = "tomcat";
51
52 public static final String WEBLOGIC_ID = "weblogic";
53
54 public static final String WEBSPHERE_ID = "websphere";
55
56 public static String getServerId() {
57 ServerDetector sd = _instance;
58
59 if (sd._serverId == null) {
60 if (isGeronimo()) {
61 sd._serverId = GERONIMO_ID;
62 }
63 else if (isGlassfish()) {
64 sd._serverId = GLASSFISH_ID;
65 }
66 else if (isJBoss()) {
67 sd._serverId = JBOSS_ID;
68 }
69 else if (isJOnAS()) {
70 sd._serverId = JONAS_ID;
71 }
72 else if (isOC4J()) {
73 sd._serverId = OC4J_ID;
74 }
75 else if (isResin()) {
76 sd._serverId = RESIN_ID;
77 }
78 else if (isWebLogic()) {
79 sd._serverId = WEBLOGIC_ID;
80 }
81 else if (isWebSphere()) {
82 sd._serverId = WEBSPHERE_ID;
83 }
84
85 if (isJetty()) {
86 if (sd._serverId == null) {
87 sd._serverId = JETTY_ID;
88 }
89 else {
90 sd._serverId += "-" + JETTY_ID;
91 }
92 }
93 else if (isTomcat()) {
94 if (sd._serverId == null) {
95 sd._serverId = TOMCAT_ID;
96 }
97 else {
98 sd._serverId += "-" + TOMCAT_ID;
99 }
100 }
101
102 if (_log.isInfoEnabled()) {
103 if (sd._serverId != null) {
104 _log.info("Detected server " + sd._serverId);
105 }
106 else {
107 _log.info("No server detected");
108 }
109 }
110
111 if (sd._serverId == null) {
112 throw new RuntimeException("Server is not supported");
113 }
114 }
115
116 return sd._serverId;
117 }
118
119 public static boolean isGeronimo() {
120 ServerDetector sd = _instance;
121
122 if (sd._geronimo == null) {
123 sd._geronimo = _detect(
124 "/org/apache/geronimo/system/main/Daemon.class");
125 }
126
127 return sd._geronimo.booleanValue();
128 }
129
130 public static boolean isGlassfish() {
131 ServerDetector sd = _instance;
132
133 if (sd._glassfish == null) {
134 String value = System.getProperty("com.sun.aas.instanceRoot");
135
136 if (value != null) {
137 sd._glassfish = Boolean.TRUE;
138 }
139 else {
140 sd._glassfish = Boolean.FALSE;
141 }
142 }
143
144 return sd._glassfish.booleanValue();
145 }
146
147 public static boolean isGlassfish2() {
148 ServerDetector sd = _instance;
149
150 if (sd._glassfish2 == null) {
151 if (isGlassfish() && !isGlassfish3()) {
152 sd._glassfish2 = Boolean.TRUE;
153 }
154 else {
155 sd._glassfish2 = Boolean.FALSE;
156 }
157 }
158
159 return sd._glassfish2.booleanValue();
160 }
161
162 public static boolean isGlassfish3() {
163 ServerDetector sd = _instance;
164
165 if (sd._glassfish3 == null) {
166 String value = StringPool.BLANK;
167
168 if (isGlassfish()) {
169 value = GetterUtil.getString(
170 System.getProperty("product.name"));
171 }
172
173 if (value.equals("GlassFish/v3")) {
174 sd._glassfish3 = Boolean.TRUE;
175 }
176 else {
177 sd._glassfish3 = Boolean.FALSE;
178 }
179 }
180
181 return sd._glassfish3.booleanValue();
182 }
183
184 public static boolean isJBoss() {
185 ServerDetector sd = _instance;
186
187 if (sd._jBoss == null) {
188 sd._jBoss = _detect("/org/jboss/Main.class");
189 }
190
191 return sd._jBoss.booleanValue();
192 }
193
194 public static boolean isJetty() {
195 ServerDetector sd = _instance;
196
197 if (sd._jetty == null) {
198 sd._jetty = _detect("/org/mortbay/jetty/Server.class");
199 }
200
201 return sd._jetty.booleanValue();
202 }
203
204 public static boolean isJOnAS() {
205 ServerDetector sd = _instance;
206
207 if (sd._jonas == null) {
208 sd._jonas = _detect("/org/objectweb/jonas/server/Server.class");
209 }
210
211 return sd._jonas.booleanValue();
212 }
213
214 public static boolean isOC4J() {
215 ServerDetector sd = _instance;
216
217 if (sd._oc4j == null) {
218 sd._oc4j = _detect("oracle.oc4j.util.ClassUtils");
219 }
220
221 return sd._oc4j.booleanValue();
222 }
223
224 public static boolean isResin() {
225 ServerDetector sd = _instance;
226
227 if (sd._resin == null) {
228 sd._resin = _detect("/com/caucho/server/resin/Resin.class");
229 }
230
231 return sd._resin.booleanValue();
232 }
233
234 public static boolean isSupportsComet() {
235 return false;
236 }
237
238 public static boolean isTomcat() {
239 ServerDetector sd = _instance;
240
241 if (sd._tomcat == null) {
242 sd._tomcat = _detect(
243 "/org/apache/catalina/startup/Bootstrap.class");
244 }
245
246 if (sd._tomcat == null) {
247 sd._tomcat = _detect("/org/apache/catalina/startup/Embedded.class");
248 }
249
250 return sd._tomcat.booleanValue();
251 }
252
253 public static boolean isWebLogic() {
254 ServerDetector sd = _instance;
255
256 if (sd._webLogic == null) {
257 sd._webLogic = _detect("/weblogic/Server.class");
258 }
259
260 return sd._webLogic.booleanValue();
261 }
262
263 public static boolean isWebSphere() {
264 ServerDetector sd = _instance;
265
266 if (sd._webSphere == null) {
267 sd._webSphere = _detect(
268 "/com/ibm/websphere/product/VersionInfo.class");
269 }
270
271 return sd._webSphere.booleanValue();
272 }
273
274 private static Boolean _detect(String className) {
275 try {
276 ClassLoader.getSystemClassLoader().loadClass(className);
277
278 return Boolean.TRUE;
279 }
280 catch (ClassNotFoundException cnfe) {
281 ServerDetector sd = _instance;
282
283 Class<?> c = sd.getClass();
284
285 if (c.getResource(className) != null) {
286 return Boolean.TRUE;
287 }
288 else {
289 return Boolean.FALSE;
290 }
291 }
292 }
293
294 private ServerDetector() {
295 }
296
297 private static Log _log = LogFactoryUtil.getLog(ServerDetector.class);
298
299 private static ServerDetector _instance = new ServerDetector();
300
301 private String _serverId;
302 private Boolean _geronimo;
303 private Boolean _glassfish;
304 private Boolean _glassfish2;
305 private Boolean _glassfish3;
306 private Boolean _jBoss;
307 private Boolean _jetty;
308 private Boolean _jonas;
309 private Boolean _oc4j;
310 private Boolean _resin;
311 private Boolean _tomcat;
312 private Boolean _webLogic;
313 private Boolean _webSphere;
314
315 }