001: /*
002: * $Id: UtilJ2eeCompat.java,v 1.1 2003/08/15 20:23:19 ajzeneski Exp $
003: *
004: * Copyright (c) 2001, 2002 The Open For Business Project - www.ofbiz.org
005: *
006: * Permission is hereby granted, free of charge, to any person obtaining a
007: * copy of this software and associated documentation files (the "Software"),
008: * to deal in the Software without restriction, including without limitation
009: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
010: * and/or sell copies of the Software, and to permit persons to whom the
011: * Software is furnished to do so, subject to the following conditions:
012: *
013: * The above copyright notice and this permission notice shall be included
014: * in all copies or substantial portions of the Software.
015: *
016: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
017: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
018: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
019: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
020: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
021: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
022: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
023: */
024: package org.ofbiz.base.util;
025:
026: import javax.servlet.ServletContext;
027:
028: /**
029: * Misc J2EE Compatibility Utility Functions
030: *
031: * @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
032: * @version $Revision: 1.1 $
033: * @since 2.0
034: */
035: public class UtilJ2eeCompat {
036:
037: public static final String module = UtilJ2eeCompat.class.getName();
038:
039: public static final String TOMCAT = "Apache Tomcat";
040: public static final String ORION = "Orion";
041: public static final String RESIN = "Resin";
042: public static final String REX_IP = "TradeCity";
043: public static final String OC4J = "Oracle";
044: public static final String JRUN = "JRun";
045: public static final String JETTY = "Jetty";
046:
047: protected static Boolean doFlushOnRenderValue = null;
048: protected static Boolean useOutputStreamNotWriterValue = null;
049: protected static Boolean useNestedJspException = null;
050:
051: public static boolean doFlushOnRender(ServletContext context) {
052: initCompatibilityOptions(context);
053: return doFlushOnRenderValue.booleanValue();
054: }
055:
056: public static boolean useOutputStreamNotWriter(
057: ServletContext context) {
058: initCompatibilityOptions(context);
059: return useOutputStreamNotWriterValue.booleanValue();
060: }
061:
062: public static boolean useNestedJspException(ServletContext context) {
063: initCompatibilityOptions(context);
064: return useNestedJspException.booleanValue();
065: }
066:
067: protected static void initCompatibilityOptions(
068: ServletContext context) {
069: // this check to see if we should flush is done because on most servers this
070: // will just slow things down and not solve any problems, but on Tomcat, Orion, etc it is necessary
071: if (useOutputStreamNotWriterValue == null
072: || doFlushOnRenderValue == null) {
073: boolean doflush = true;
074: boolean usestream = true;
075: boolean nestjspexception = true;
076: // if context is null use an empty string here which will cause the defaults to be used
077: String serverInfo = context == null ? "" : context
078: .getServerInfo();
079:
080: Debug.logInfo("serverInfo: " + serverInfo, module);
081:
082: if (serverInfo.indexOf(RESIN) >= 0) {
083: Debug
084: .logImportant(
085: "Resin detected, disabling the flush on the region render from PageContext for better performance",
086: module);
087: doflush = false;
088: } else if (serverInfo.indexOf(REX_IP) >= 0) {
089: Debug
090: .logImportant(
091: "Trade City RexIP detected, using response.getWriter to write text out instead of response.getOutputStream",
092: module);
093: usestream = false;
094: } else if (serverInfo.indexOf(TOMCAT) >= 0) {
095: Debug
096: .logImportant(
097: "Apache Tomcat detected, using response.getWriter to write text out instead of response.getOutputStream",
098: module);
099: usestream = false;
100: } else if (serverInfo.indexOf(JRUN) >= 0) {
101: Debug
102: .logImportant(
103: "JRun detected, using response.getWriter to write text out instead of response.getOutputStream",
104: module);
105: usestream = false;
106: } else if (serverInfo.indexOf(JETTY) >= 0) {
107: Debug
108: .logImportant(
109: "Jetty detected, using response.getWriter to write text out instead of response.getOutputStream",
110: module);
111: usestream = false;
112: } else if (serverInfo.indexOf(ORION) >= 0) {
113: Debug
114: .logImportant(
115: "Orion detected, using non-nested JspException",
116: module);
117: nestjspexception = false;
118: }
119:
120: doFlushOnRenderValue = new Boolean(doflush);
121: useOutputStreamNotWriterValue = new Boolean(usestream);
122: useNestedJspException = new Boolean(nestjspexception);
123:
124: }
125: }
126: }
|