You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2005/04/04 16:12:41 UTC
svn commit: r160046 - in cocoon/trunk/src:
core/java/org/apache/cocoon/core/Core.java
core/java/org/apache/cocoon/core/CoreUtil.java
core/java/org/apache/cocoon/util/log/LoggingHelper.java
java/org/apache/cocoon/servlet/CocoonServlet.java
Author: cziegeler
Date: Mon Apr 4 07:12:40 2005
New Revision: 160046
URL: http://svn.apache.org/viewcvs?view=rev&rev=160046
Log:
Fix bugs in init code
Modified:
cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java
cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java
cocoon/trunk/src/core/java/org/apache/cocoon/util/log/LoggingHelper.java
cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java?view=diff&r1=160045&r2=160046
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/Core.java Mon Apr 4 07:12:40 2005
@@ -17,15 +17,12 @@
package org.apache.cocoon.core;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import org.apache.avalon.framework.CascadingRuntimeException;
import org.apache.avalon.framework.context.Context;
@@ -71,8 +68,9 @@
this.settings = null;
}
- public Core(Settings s) {
+ public Core(Settings s, Context c) {
this.settings = s;
+ this.context = c;
}
/* (non-Javadoc)
@@ -185,53 +183,6 @@
} catch (ContextException ce) {
throw new CascadingRuntimeException("Unable to get the settings object from the context.", ce);
}
- }
-
- /**
- * Get the settings for Cocoon
- * @param env This provides access to various parts of the used environment.
- */
- public static Settings createSettings(BootstrapEnvironment env) {
- // create an empty settings objects
- final Settings s = new Settings();
-
- String additionalPropertyFile = System.getProperty(Settings.PROPERTY_USER_SETTINGS);
-
- // read cocoon-settings.properties - if available
- InputStream propsIS = env.getInputStream("cocoon-settings.properties");
- if ( propsIS != null ) {
- env.log("Reading settings from 'cocoon-settings.properties'");
- final Properties p = new Properties();
- try {
- p.load(propsIS);
- propsIS.close();
- s.fill(p);
- additionalPropertyFile = p.getProperty(Settings.PROPERTY_USER_SETTINGS, additionalPropertyFile);
- } catch (IOException ignore) {
- env.log("Unable to read 'cocoon-settings.properties'.", ignore);
- env.log("Continuing initialization.");
- }
- }
- // fill from the environment configuration, like web.xml etc.
- env.configure(s);
-
- // read additional properties file
- if ( additionalPropertyFile != null ) {
- env.log("Reading user settings from '" + additionalPropertyFile + "'");
- final Properties p = new Properties();
- try {
- FileInputStream fis = new FileInputStream(additionalPropertyFile);
- p.load(fis);
- fis.close();
- } catch (IOException ignore) {
- env.log("Unable to read '" + additionalPropertyFile + "'.", ignore);
- env.log("Continuing initialization.");
- }
- }
- // now overwrite with system properties
- s.fill(System.getProperties());
-
- return s;
}
public static interface BootstrapEnvironment {
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java?view=diff&r1=160045&r2=160046
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/core/CoreUtil.java Mon Apr 4 07:12:40 2005
@@ -17,13 +17,16 @@
package org.apache.cocoon.core;
import java.io.File;
+import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
+import java.util.Properties;
import org.apache.avalon.excalibur.logger.Log4JLoggerManager;
import org.apache.avalon.excalibur.logger.LogKitLoggerManager;
@@ -44,6 +47,7 @@
import org.apache.cocoon.components.ContextHelper;
import org.apache.cocoon.configuration.ConfigurationBuilder;
import org.apache.cocoon.configuration.Settings;
+import org.apache.cocoon.core.Core.BootstrapEnvironment;
import org.apache.cocoon.core.source.SimpleSourceResolver;
import org.apache.cocoon.matching.helpers.WildcardHelper;
import org.apache.cocoon.util.ClassUtils;
@@ -66,6 +70,8 @@
/** Parameter map for the context protocol */
protected static final Map CONTEXT_PARAMETERS = Collections.singletonMap("force-traversable", Boolean.TRUE);
+ protected final static String CORE_KEY = Core.class.getName();
+
/** The callback to the real environment */
protected final Core.BootstrapEnvironment env;
@@ -75,26 +81,22 @@
/** The settings */
protected final Settings settings;
- private Logger log;
- private LoggerManager loggerManager;
+ /** The parent service manager TODO This will be made protected*/
+ public final ServiceManager parentManager;
+
+ /** TODO This will be made protected */
+ public Logger log;
+ /** TODO This will be made protected */
+ public LoggerManager loggerManager;
- public CoreUtil(Core.BootstrapEnvironment e)
+ public CoreUtil(Core.BootstrapEnvironment environment)
throws Exception {
- this.env = e;
+ this.env = environment;
// create settings
- this.settings = Core.createSettings(this.env);
+ this.settings = createSettings(this.env);
this.appContext.put(Core.CONTEXT_SETTINGS, this.settings);
- this.createRootServiceManager();
- }
-
- /**
- * Bootstrap Cocoon Service Manager.
- */
- public ServiceManager createRootServiceManager()
- throws Exception {
-
if (this.settings.isInitClassloader()) {
// Force context classloader so that JAXP can work correctly
// (see javax.xml.parsers.FactoryFinder.findClassLoader())
@@ -108,7 +110,7 @@
// add root url
try {
appContext.put(ContextHelper.CONTEXT_ROOT_URL,
- new URL(env.getContextURL()));
+ new URL(this.env.getContextURL()));
} catch (MalformedURLException ignore) {
// we simply ignore this
}
@@ -151,8 +153,8 @@
// Output some debug info
if (this.log.isDebugEnabled()) {
- this.log.debug("Context URL: " + env.getContextURL());
- this.log.debug("Writeable Context: " + env.getContextForWriting());
+ this.log.debug("Context URL: " + this.env.getContextURL());
+ this.log.debug("Writeable Context: " + this.env.getContextForWriting());
if (workDirParam != null) {
this.log.debug("Using work-directory " + workDir);
} else {
@@ -163,7 +165,7 @@
final String uploadDirParam = this.settings.getUploadDirectory();
File uploadDir;
if (uploadDirParam != null) {
- if (env.getContextForWriting() == null) {
+ if (this.env.getContextForWriting() == null) {
uploadDir = new File(uploadDirParam);
} else {
// Context path exists : is upload-directory absolute ?
@@ -173,7 +175,7 @@
uploadDir = uploadDirParamFile;
} else {
// No : consider it relative to context path
- uploadDir = new File(env.getContextForWriting(), uploadDirParam);
+ uploadDir = new File(this.env.getContextForWriting(), uploadDirParam);
}
}
if (this.log.isDebugEnabled()) {
@@ -192,7 +194,7 @@
String cacheDirParam = this.settings.getCacheDirectory();
File cacheDir;
if (cacheDirParam != null) {
- if (env.getContextForWriting() == null) {
+ if (this.env.getContextForWriting() == null) {
cacheDir = new File(cacheDirParam);
} else {
// Context path exists : is cache-directory absolute ?
@@ -202,7 +204,7 @@
cacheDir = cacheDirParamFile;
} else {
// No : consider it relative to context path
- cacheDir = new File(env.getContextForWriting(), cacheDirParam);
+ cacheDir = new File(this.env.getContextForWriting(), cacheDirParam);
}
}
if (this.log.isDebugEnabled()) {
@@ -227,18 +229,30 @@
this.settings.setConfiguration(u.toExternalForm());
this.appContext.put(Constants.CONTEXT_CONFIG_URL, u);
+ // set encoding
+ this.appContext.put(Constants.CONTEXT_DEFAULT_ENCODING, settings.getFormEncoding());
+
// create parent service manager
final ServiceManager parent = this.getParentServiceManager();
- // set encoding
- this.appContext.put(Constants.CONTEXT_DEFAULT_ENCODING, settings.getFormEncoding());
+ // create a service manager
+ this.parentManager = new RootServiceManager(parent, this.createCore());
+ }
- // create new Core
- final Core cocoon = new Core(this.settings);
+ public Core getCore() {
+ try {
+ return (Core)this.parentManager.lookup(CORE_KEY);
+ } catch (ServiceException ignore) {
+ // this can never happen!
+ throw new RuntimeException("Fatal error: no Cocoon core available.");
+ }
+ }
- return new RootServiceManager(parent, cocoon);
+ protected Core createCore() {
+ final Core c = new Core(this.settings, this.appContext);
+ return c;
}
-
+
/**
* Instatiates the parent service manager, as specified in the
* parent-service-manager init parameter.
@@ -277,15 +291,67 @@
return parentServiceManager;
}
+ /**
+ * Get the settings for Cocoon
+ * @param env This provides access to various parts of the used environment.
+ * TODO Make a non-static, protected method out of this
+ */
+ public static Settings createSettings(BootstrapEnvironment env) {
+ // create an empty settings objects
+ final Settings s = new Settings();
+
+ String additionalPropertyFile = System.getProperty(Settings.PROPERTY_USER_SETTINGS);
+
+ // read cocoon-settings.properties - if available
+ InputStream propsIS = env.getInputStream("cocoon-settings.properties");
+ if ( propsIS != null ) {
+ env.log("Reading settings from 'cocoon-settings.properties'");
+ final Properties p = new Properties();
+ try {
+ p.load(propsIS);
+ propsIS.close();
+ s.fill(p);
+ additionalPropertyFile = p.getProperty(Settings.PROPERTY_USER_SETTINGS, additionalPropertyFile);
+ } catch (IOException ignore) {
+ env.log("Unable to read 'cocoon-settings.properties'.", ignore);
+ env.log("Continuing initialization.");
+ }
+ }
+ // fill from the environment configuration, like web.xml etc.
+ env.configure(s);
+
+ // read additional properties file
+ if ( additionalPropertyFile != null ) {
+ env.log("Reading user settings from '" + additionalPropertyFile + "'");
+ final Properties p = new Properties();
+ try {
+ FileInputStream fis = new FileInputStream(additionalPropertyFile);
+ p.load(fis);
+ fis.close();
+ } catch (IOException ignore) {
+ env.log("Unable to read '" + additionalPropertyFile + "'.", ignore);
+ env.log("Continuing initialization.");
+ }
+ }
+ // now overwrite with system properties
+ s.fill(System.getProperties());
+
+ return s;
+ }
+
protected void initLogger() {
final DefaultContext subcontext = new DefaultContext(this.appContext);
subcontext.put("context-work", new File(this.settings.getWorkDirectory()));
- if (this.env.getContextURL() == null) {
+ if (this.env.getContextForWriting() == null) {
File logSCDir = new File(this.settings.getWorkDirectory(), "log");
logSCDir.mkdirs();
subcontext.put("context-root", logSCDir.toString());
} else {
- subcontext.put("context-root", this.env.getContextURL());
+ try {
+ subcontext.put("context-root", this.env.getContextForWriting().toURL().toExternalForm());
+ } catch (MalformedURLException ignore) {
+ // we simply ignore this
+ }
}
this.env.configureLoggingContext(subcontext);
@@ -306,8 +372,7 @@
defaultHierarchy.setErrorHandler(errorHandler);
defaultHierarchy.setDefaultLogTarget(this.env.getDefaultLogTarget());
defaultHierarchy.setDefaultPriority(logPriority);
- final Logger logger = new LogKitLogger(Hierarchy.getDefaultHierarchy()
- .getLoggerFor(""));
+ final Logger logger = new LogKitLogger(Hierarchy.getDefaultHierarchy().getLoggerFor(""));
// we can't pass the context-root to our resolver
Object value = null;
@@ -490,8 +555,6 @@
public static final class RootServiceManager implements ServiceManager {
- protected final static String CORE_KEY = Core.class.getName();
-
protected final ServiceManager parent;
protected final Core cocoon;
Modified: cocoon/trunk/src/core/java/org/apache/cocoon/util/log/LoggingHelper.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/core/java/org/apache/cocoon/util/log/LoggingHelper.java?view=diff&r1=160045&r2=160046
==============================================================================
--- cocoon/trunk/src/core/java/org/apache/cocoon/util/log/LoggingHelper.java (original)
+++ cocoon/trunk/src/core/java/org/apache/cocoon/util/log/LoggingHelper.java Mon Apr 4 07:12:40 2005
@@ -48,7 +48,7 @@
import org.apache.log4j.LogManager;
/**
-*
+* TODO Delete this class as soon as the CoreUtil is used
* @version SVN $Id$
*/
public class LoggingHelper {
Modified: cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java?view=diff&r1=160045&r2=160046
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java Mon Apr 4 07:12:40 2005
@@ -31,6 +31,7 @@
import org.apache.cocoon.components.notification.Notifying;
import org.apache.cocoon.configuration.Settings;
import org.apache.cocoon.core.Core;
+import org.apache.cocoon.core.CoreUtil;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.http.HttpContext;
@@ -125,7 +126,7 @@
/**
* Avalon application context
*/
- protected DefaultContext appContext = new DefaultContext();
+ protected DefaultContext appContext;
private String containerEncoding;
@@ -213,11 +214,40 @@
}
}
+ try {
+ // FIXME (VG): We shouldn't have to specify these. Need to override
+ // jaxp implementation of weblogic before initializing logger.
+ // This piece of code is also required in the Cocoon class.
+ String value = System.getProperty("javax.xml.parsers.SAXParserFactory");
+ if (value != null && value.startsWith("weblogic")) {
+ System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
+ System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
+ }
+ } catch (Exception e) {
+ // Ignore security exception
+ System.out.println("CocoonServlet: Could not check system properties, got: " + e);
+ }
+
// initialize settings
Core.BootstrapEnvironment env = new ServletBootstrapEnvironment(conf, this.classLoader, this.servletContextPath, this.servletContextURL);
- this.settings = Core.createSettings(env);
-
+ /*
+ try {
+ CoreUtil util = new CoreUtil(env);
+ this.settings = util.getCore().getSettings();
+ this.appContext = (DefaultContext)util.getCore().getContext();
+ this.log = util.log;
+ this.loggerManager = util.loggerManager;
+ this.parentServiceManager = util.parentManager;
+ } catch (Exception e) {
+ if ( e instanceof ServletException ) {
+ throw (ServletException)e;
+ }
+ throw new ServletException(e);
+ }
+ */
+ this.settings = CoreUtil.createSettings(env);
+ this.appContext = new DefaultContext();
this.appContext.put(Core.CONTEXT_SETTINGS, this.settings);
if (this.settings.isInitClassloader()) {
@@ -230,20 +260,6 @@
}
}
- try {
- // FIXME (VG): We shouldn't have to specify these. Need to override
- // jaxp implementation of weblogic before initializing logger.
- // This piece of code is also required in the Cocoon class.
- String value = System.getProperty("javax.xml.parsers.SAXParserFactory");
- if (value != null && value.startsWith("weblogic")) {
- System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");
- System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
- }
- } catch (Exception e) {
- // Ignore security exception
- System.out.println("CocoonServlet: Could not check system properties, got: " + e);
- }
-
this.appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, new HttpContext(this.servletContext));
// first init the work-directory for the logger.
@@ -380,9 +396,9 @@
}
}
- this.containerEncoding = getInitParameter("container-encoding", "ISO-8859-1");
this.appContext.put(Constants.CONTEXT_DEFAULT_ENCODING, settings.getFormEncoding());
+ this.containerEncoding = getInitParameter("container-encoding", "ISO-8859-1");
this.requestFactory = new RequestFactory(settings.isAutosaveUploads(),
new File(settings.getUploadDirectory()),
settings.isAllowOverwrite(),
@@ -390,7 +406,7 @@
settings.getMaxUploadSize(),
this.containerEncoding);
// Add the servlet configuration
- this.appContext.put(CONTEXT_SERVLET_CONFIG, conf);
+ //this.appContext.put(CONTEXT_SERVLET_CONFIG, conf);
createCocoon();
if (this.exception == null) {
this.servletContext.log("Apache Cocoon " + Constants.VERSION + " is up and ready.");
@@ -1349,14 +1365,14 @@
* @see org.apache.cocoon.core.Core.BootstrapEnvironment#configureLoggingContext(org.apache.avalon.framework.context.DefaultContext)
*/
public void configureLoggingContext(DefaultContext context) {
- context.put(CONTEXT_SERVLET_CONFIG, this.config.getServletContext());
+ context.put(CONTEXT_SERVLET_CONFIG, this.config);
}
/**
* @see org.apache.cocoon.core.Core.BootstrapEnvironment#configure(org.apache.avalon.framework.context.DefaultContext)
*/
public void configure(DefaultContext context) {
- context.put(CONTEXT_SERVLET_CONFIG, this.config.getServletContext());
+ context.put(CONTEXT_SERVLET_CONFIG, this.config);
}
/**