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/09/01 14:20:32 UTC
svn commit: r265706 - in /cocoon:
blocks/portal/trunk/java/org/apache/cocoon/portlet/ trunk/
trunk/src/java/org/apache/cocoon/bean/ trunk/src/java/org/apache/cocoon/core/
trunk/src/java/org/apache/cocoon/servlet/
trunk/src/test/org/apache/cocoon/test/c...
Author: cziegeler
Date: Thu Sep 1 05:20:21 2005
New Revision: 265706
URL: http://svn.apache.org/viewcvs?rev=265706&view=rev
Log:
Read several (block related) property files and update status file
Modified:
cocoon/blocks/portal/trunk/java/org/apache/cocoon/portlet/CocoonPortlet.java
cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
cocoon/trunk/src/java/org/apache/cocoon/core/BootstrapEnvironment.java
cocoon/trunk/src/java/org/apache/cocoon/core/CoreUtil.java
cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java
cocoon/trunk/src/test/org/apache/cocoon/test/core/TestBootstrapEnvironment.java
cocoon/trunk/status.xml
Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portlet/CocoonPortlet.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portlet/CocoonPortlet.java?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portlet/CocoonPortlet.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portlet/CocoonPortlet.java Thu Sep 1 05:20:21 2005
@@ -885,13 +885,6 @@
}
/**
- * @see org.apache.cocoon.core.BootstrapEnvironment#getInputStream(java.lang.String)
- */
- public InputStream getInputStream(String path) {
- return this.config.getPortletContext().getResourceAsStream(path);
- }
-
- /**
* @see org.apache.cocoon.core.BootstrapEnvironment#configure(org.apache.cocoon.core.MutableSettings)
*/
public void configure(MutableSettings settings) {
Modified: cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/bean/CocoonWrapper.java Thu Sep 1 05:20:21 2005
@@ -719,21 +719,6 @@
}
/**
- * @see org.apache.cocoon.core.BootstrapEnvironment#getInputStream(java.lang.String)
- */
- public InputStream getInputStream(String path) {
- final File f = new File(this.contextDirectory, path);
- if ( f.exists() ) {
- try {
- return new FileInputStream(f);
- } catch (FileNotFoundException fnfe) {
- // this can't occure as we checked it already
- }
- }
- return null;
- }
-
- /**
* @see org.apache.cocoon.core.BootstrapEnvironment#log(java.lang.String, java.lang.Throwable)
*/
public void log(String message, Throwable error) {
Modified: cocoon/trunk/src/java/org/apache/cocoon/core/BootstrapEnvironment.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/BootstrapEnvironment.java?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/BootstrapEnvironment.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/BootstrapEnvironment.java Thu Sep 1 05:20:21 2005
@@ -17,7 +17,6 @@
package org.apache.cocoon.core;
import java.io.File;
-import java.io.InputStream;
import java.net.URL;
import org.apache.avalon.framework.context.DefaultContext;
@@ -79,6 +78,7 @@
return this.name;
}
}
+
/**
* Get the bootstrap logger.
* @param logLevel The log level to use according to the {@link Logger} interface.
@@ -105,8 +105,6 @@
*/
void setLogger(Logger rootLogger);
- InputStream getInputStream(String path);
-
/**
* This callback can be used by the environment to add environment specific
* settings. For example the servlet environment parsed the web.xml and adjusts
Modified: cocoon/trunk/src/java/org/apache/cocoon/core/CoreUtil.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/core/CoreUtil.java?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/core/CoreUtil.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/core/CoreUtil.java Thu Sep 1 05:20:21 2005
@@ -109,18 +109,8 @@
protected void init()
throws Exception {
- // create settings
- this.settings = this.createSettings();
-
- if (this.settings.isInitClassloader()) {
- // Force context classloader so that JAXP can work correctly
- // (see javax.xml.parsers.FactoryFinder.findClassLoader())
- try {
- Thread.currentThread().setContextClassLoader(this.env.getInitClassLoader());
- } catch (Exception e) {
- // ignore this
- }
- }
+ // first let's set up the appContext with some values to make
+ // the simple source resolver work
// add root url
try {
@@ -137,6 +127,19 @@
// now add environment specific information
this.env.configure(appContext);
+ // create settings
+ this.settings = this.createSettings();
+
+ if (this.settings.isInitClassloader()) {
+ // Force context classloader so that JAXP can work correctly
+ // (see javax.xml.parsers.FactoryFinder.findClassLoader())
+ try {
+ Thread.currentThread().setContextClassLoader(this.env.getInitClassLoader());
+ } catch (Exception e) {
+ // ignore this
+ }
+ }
+
// first init the work-directory for the logger.
// this is required if we are running inside a war file!
final String workDirParam = this.settings.getWorkDirectory();
@@ -337,23 +340,57 @@
// create an empty settings objects
final MutableSettings s = new MutableSettings();
+ // we need our own resolver
+ final SourceResolver resolver = this.createSourceResolver(new LoggerWrapper(this.env));
+
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 {
+ Source source = null;
+ try {
+ source = resolver.resolveURI("context://WEB-INF/cocoon-settings.properties");
+ if ( source.exists() ) {
+ final InputStream propsIS = source.getInputStream();
+ env.log("Reading settings from '" + source.getURI() + "'");
+ final Properties p = new Properties();
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.");
+ additionalPropertyFile = p.getProperty(Settings.PROPERTY_USER_SETTINGS, additionalPropertyFile);
+ }
+ } catch (IOException ignore) {
+ env.log("Unable to read 'WEB-INF/cocoon-settings.properties'.", ignore);
+ env.log("Continuing initialization.");
+ } finally {
+ resolver.release(source);
+ }
+
+ // now read all properties from the properties directory
+ Source directory = null;
+ try {
+ directory = resolver.resolveURI("context://WEB-INF/properties", null, CONTEXT_PARAMETERS);
+ if (directory.exists() && directory instanceof TraversableSource) {
+ final Iterator c = ((TraversableSource) directory).getChildren().iterator();
+ while (c.hasNext()) {
+ final Source src = (Source) c.next();
+ if ( src.getURI().endsWith(".properties") ) {
+ final InputStream propsIS = src.getInputStream();
+ env.log("Reading settings from '" + src.getURI() + "'.");
+ final Properties p = new Properties();
+ p.load(propsIS);
+ propsIS.close();
+ s.fill(p);
+ additionalPropertyFile = p.getProperty(Settings.PROPERTY_USER_SETTINGS, additionalPropertyFile);
+ }
+ }
}
+ } catch (IOException ignore) {
+ env.log("Unable to read from directory 'WEB-INF/properties'.", ignore);
+ env.log("Continuing initialization.");
+ } finally {
+ resolver.release(directory);
}
+
// fill from the environment configuration, like web.xml etc.
env.configure(s);
@@ -401,6 +438,22 @@
}
}
+ /**
+ * Create a simple source resolver.
+ */
+ protected SourceResolver createSourceResolver(Logger logger) {
+ // Create our own resolver
+ final SimpleSourceResolver resolver = new SimpleSourceResolver();
+ resolver.enableLogging(logger);
+ try {
+ resolver.contextualize(this.appContext);
+ } catch (ContextException ce) {
+ throw new CascadingRuntimeException(
+ "Cannot setup source resolver.", ce);
+ }
+ return resolver;
+ }
+
protected void initLogger() {
String logLevel = settings.getBootstrapLogLevel();
if (logLevel == null) {
@@ -417,14 +470,8 @@
final Logger bootstrapLogger = this.env.getBootstrapLogger(level);
// Create our own resolver
- final SimpleSourceResolver resolver = new SimpleSourceResolver();
- resolver.enableLogging(bootstrapLogger);
- try {
- resolver.contextualize(this.appContext);
- } catch (ContextException ce) {
- throw new CascadingRuntimeException(
- "Cannot setup source resolver.", ce);
- }
+ final SourceResolver resolver = this.createSourceResolver(bootstrapLogger);
+
// create an own service manager for the logger manager
final ServiceManager loggerManagerServiceManager = new SingleComponentServiceManager(
null, resolver, SourceResolver.ROLE);
@@ -834,4 +881,83 @@
return "";
}
+ protected static final class LoggerWrapper implements Logger {
+ private final BootstrapEnvironment env;
+
+ public LoggerWrapper(BootstrapEnvironment env) {
+ this.env = env;
+ }
+
+ protected void text(String arg0, Throwable arg1) {
+ if ( arg1 != null ) {
+ this.env.log(arg0, arg1);
+ } else {
+ this.env.log(arg0);
+ }
+ }
+
+ public void debug(String arg0, Throwable arg1) {
+ // we ignore debug
+ }
+
+ public void debug(String arg0) {
+ // we ignore debug
+ }
+
+ public void error(String arg0, Throwable arg1) {
+ this.text(arg0, arg1);
+ }
+
+ public void error(String arg0) {
+ this.text(arg0, null);
+ }
+
+ public void fatalError(String arg0, Throwable arg1) {
+ this.text(arg0, arg1);
+ }
+
+ public void fatalError(String arg0) {
+ this.text(arg0, null);
+ }
+
+ public Logger getChildLogger(String arg0) {
+ return this;
+ }
+
+ public void info(String arg0, Throwable arg1) {
+ // we ignore info
+ }
+
+ public void info(String arg0) {
+ // we ignore info
+ }
+
+ public boolean isDebugEnabled() {
+ return false;
+ }
+
+ public boolean isErrorEnabled() {
+ return true;
+ }
+
+ public boolean isFatalErrorEnabled() {
+ return true;
+ }
+
+ public boolean isInfoEnabled() {
+ return false;
+ }
+
+ public boolean isWarnEnabled() {
+ return false;
+ }
+
+ public void warn(String arg0, Throwable arg1) {
+ // we ignore warn
+ }
+
+ public void warn(String arg0) {
+ // we ignore warn
+ }
+ }
}
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?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/servlet/CocoonServlet.java Thu Sep 1 05:20:21 2005
@@ -685,13 +685,6 @@
}
/**
- * @see org.apache.cocoon.core.BootstrapEnvironment#getInputStream(java.lang.String)
- */
- public InputStream getInputStream(String path) {
- return this.config.getServletContext().getResourceAsStream(path);
- }
-
- /**
* @see org.apache.cocoon.core.BootstrapEnvironment#configure(org.apache.cocoon.core.MutableSettings)
*/
public void configure(MutableSettings settings) {
Modified: cocoon/trunk/src/test/org/apache/cocoon/test/core/TestBootstrapEnvironment.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/test/org/apache/cocoon/test/core/TestBootstrapEnvironment.java?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/src/test/org/apache/cocoon/test/core/TestBootstrapEnvironment.java (original)
+++ cocoon/trunk/src/test/org/apache/cocoon/test/core/TestBootstrapEnvironment.java Thu Sep 1 05:20:21 2005
@@ -83,24 +83,12 @@
}
/**
- * Get the input stream from a resource at the given
- * path. Only paths relative to the bootstrap context are
- * supported. Returns null if no resource exists at the
- * specified path
+ * @see org.apache.cocoon.core.BootstrapEnvironment#configure(org.apache.cocoon.core.MutableSettings)
*/
- public InputStream getInputStream(String path) {
- try {
- return (new URL(this.contextPath + path)).openStream();
- } catch (IOException e) {
- this.log("Couldn't open " + this.contextPath + path);
- return null;
- }
- }
-
public void configure(MutableSettings settings) {
settings.setConfiguration(this.configuration);
settings.setWorkDirectory("work");
- settings.setInitClassloader(true);
+ settings.setInitClassloader(true);
}
public void configureLoggingContext(DefaultContext context) {
Modified: cocoon/trunk/status.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?rev=265706&r1=265705&r2=265706&view=diff
==============================================================================
--- cocoon/trunk/status.xml (original)
+++ cocoon/trunk/status.xml Thu Sep 1 05:20:21 2005
@@ -197,6 +197,16 @@
<changes>
<release version="@version@" date="@date@">
+ <action dev="CZ" type="add">
+ Add property mechanism for Cocoon configuration. All settings for Cocoon can now
+ be configured using properties instead of putting them in web.xml.
+ </action>
+ <action dev="CZ" type="add">
+ Allow the use of property replacements in logging, xconf and sitemap configurations.
+ </action>
+ <action dev="CZ" type="add">
+ Use includes for logkit configurations and for sitemap components.
+ </action>
<action dev="AN" type="fix">
XSP block: Move AttributeImpl in xsp.xsl to class scope.
That allows top-level xsp:logic to define markup generating methods.