You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by at...@apache.org on 2008/04/18 14:01:21 UTC

svn commit: r649476 - in /portals/jetspeed-2/portal/trunk: components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/ components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/ jetspeed-api/src/main/java/org/apache/jetspeed/engine/ ...

Author: ate
Date: Fri Apr 18 05:01:12 2008
New Revision: 649476

URL: http://svn.apache.org/viewvc?rev=649476&view=rev
Log:
Many fixes and enhancements for how Jetspeed loads its properties configuration:
- allow defining jetspeed.properties outside applicationRoot
- derive new global property ${jetspeedPropertiesPath} from the jetspeed.properties file location (still defaults to /WEB-INF/conf)
- load all other configuration properties from this ${jetspeedPropertiesPath}
    NB: moving jetspeed.properties thus requires moving the other properties as well to that same location!
- adjust assembly references to these property files using the new ${jetspeedPropertiesPath}
- fix proper "override" behavior by individually loading the property files and copy the key/values to the master (Commons) Configuration
  instead of having Commons Configuration load and thereby incorrectly *append* multiple values for the same key (dropping the include=override.properties definition and usage in jetspeed.properties)
- allow overriding the spring.filter.key property through a separate properties file, spring-filter-key.properties:
    - *only* property spring.filter.key will be loaded from this file (if it exists)
    - this makes it easy for simple switching to another assembly configuration by just replacing/overwriting that properties file
- define proper constants for all these in JetspeedEngineConstants
- splitting off a new assembly configuration file, jetspeed-properties.xml containing only the PortalConfiguration and Spring PropertyPlaceHolderConfigurer
  so these can more easily used by test cases 

Added:
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml   (with props)
Modified:
    portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/SpringComponentManager.java
    portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java
    portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/engine/JetspeedEngineConstants.java
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-production.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-spring.xml
    portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/SpringComponentManager.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/SpringComponentManager.java?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/SpringComponentManager.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-cm/src/main/java/org/apache/jetspeed/components/SpringComponentManager.java Fri Apr 18 05:01:12 2008
@@ -67,6 +67,10 @@
             initProperties = new Properties();
         }
         initProperties.setProperty(JetspeedEngineConstants.APPLICATION_ROOT_KEY, appRoot);
+        if (!initProperties.containsKey(JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_KEY))
+        {
+            initProperties.put(JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_KEY, appRoot+JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_DEFAULT);
+        }
         
         if (bootConfigs != null && bootConfigs.length > 0)
         {
@@ -96,6 +100,10 @@
             initProperties = new Properties();
         }
         initProperties.setProperty(JetspeedEngineConstants.APPLICATION_ROOT_KEY, appRoot);
+        if (!initProperties.containsKey(JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_KEY))
+        {
+            initProperties.put(JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_KEY, appRoot+JetspeedEngineConstants.JETSPEED_PROPERTIES_PATH_DEFAULT);
+        }
         
         if (bootConfigs != null && bootConfigs.length > 0)
         {

Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/engine/JetspeedServlet.java Fri Apr 18 05:01:12 2008
@@ -16,8 +16,10 @@
  */
 package org.apache.jetspeed.engine;
 
+import java.io.File;
 import java.io.IOException;
 import java.security.Principal;
+import java.util.Properties;
 
 import javax.security.auth.Subject;
 import javax.servlet.ServletConfig;
@@ -30,6 +32,7 @@
 import javax.servlet.http.HttpSessionListener;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.commons.logging.Log;
@@ -145,12 +148,40 @@
                     applicationRoot = webappRoot;
                 }
 
-                Configuration properties = new PropertiesConfiguration(ServletHelper.getRealPath(
-                        config, propertiesFilename));
-
+                // load jetspeed.properties, override.properties and spring-filter-key.properties separately
+                // and "merge" them by hand instead of relaying on Commons Configuration "include" functionality...
+                // Commons Configuration performs property value *appending* if keys are encountered multiple times,
+                // thereby *not* resulting in the proper override functionality we need.
+                PropertiesConfiguration properties = new PropertiesConfiguration();
+                File propsFile = new File(ServletHelper.getRealPath(config, propertiesFilename));
+                if (!propsFile.isFile())
+                {
+                    throw new IOException("Jetspeed properties not found: "+propsFile.getAbsolutePath());
+                }
+                File jetspeedPropertiesPath = propsFile.getParentFile();
+                properties.load(propsFile);
+                propsFile = new File(jetspeedPropertiesPath,OVERRIDE_PROPERTIES);
+                if (propsFile.exists())
+                {
+                    PropertiesConfiguration extraProps = new PropertiesConfiguration();
+                    extraProps.load(propsFile);
+                    ConfigurationUtils.copy(extraProps,properties);
+                }
+                propsFile = new File(jetspeedPropertiesPath,SPRING_FILTER_KEY_PROPERTIES);
+                if (propsFile.exists())
+                {
+                    PropertiesConfiguration extraProps = new PropertiesConfiguration();
+                    extraProps.load(propsFile);
+                    Object springFilterKey = extraProps.getProperty(SPRING_FILTER_KEY);
+                    if (springFilterKey != null)
+                    {
+                        properties.setProperty(SPRING_FILTER_KEY, springFilterKey);
+                    }
+                }
                 properties.setProperty(APPLICATION_ROOT_KEY, applicationRoot);
                 properties.setProperty(WEBAPP_ROOT_KEY, webappRoot);
-
+                properties.setProperty(JETSPEED_PROPERTIES_PATH_KEY, jetspeedPropertiesPath.getAbsolutePath());
+                
                 console.info("JetspeedServlet attempting to create the  portlet engine...");
 
                 engine = new JetspeedEngine(properties, applicationRoot, config, initializeComponentManager(config, applicationRoot, properties));
@@ -313,13 +344,19 @@
         ServletConfigFactoryBean.setServletConfig(servletConfig);
         final String assemblyDir = configuration.getString("assembly.dir","/WEB-INF/assembly");
         final String assemblyFileExtension = configuration.getString("assembly.extension",".xml");
-        String springFilterKey = configuration.getString("spring.filter.key", "portal");
-                    
+        String springFilterKey = configuration.getString(SPRING_FILTER_KEY, SPRING_FILTER_KEY_DEFAULT);
+        File springFilterProperties = new File(configuration.getString(JETSPEED_PROPERTIES_PATH_KEY), SPRING_FILTER_PROPERTIES);
+        if (!springFilterProperties.isFile())
+        {
+            throw new IOException("Spring filter properties not found: "+springFilterProperties.getAbsolutePath());
+        }
         String[] bootConfigs = new String[] {"/WEB-INF/assembly/boot/*.xml"};
         String[] appConfigs =  new String[] {assemblyDir+"/*"+assemblyFileExtension, assemblyDir+"/override/*"+assemblyFileExtension};
         ServletContext servletContext = servletConfig.getServletContext();
-        JetspeedBeanDefinitionFilter filter = new JetspeedBeanDefinitionFilter("file:"+appRoot+"/WEB-INF/conf/spring-filter.properties", springFilterKey);
-        SpringComponentManager cm = new SpringComponentManager(filter, bootConfigs, appConfigs, servletContext, appRoot);      
+        JetspeedBeanDefinitionFilter filter = new JetspeedBeanDefinitionFilter("file:"+springFilterProperties.getAbsolutePath(), springFilterKey);
+        Properties initProperties = new Properties();
+        initProperties.put(JETSPEED_PROPERTIES_PATH_KEY, configuration.getString(JETSPEED_PROPERTIES_PATH_KEY));
+        SpringComponentManager cm = new SpringComponentManager(filter, bootConfigs, appConfigs, servletContext, appRoot, initProperties);      
         
         return cm;        
     }

Modified: portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/engine/JetspeedEngineConstants.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/engine/JetspeedEngineConstants.java?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/engine/JetspeedEngineConstants.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/engine/JetspeedEngineConstants.java Fri Apr 18 05:01:12 2008
@@ -63,6 +63,13 @@
 
     public static final String JETSPEED_PROPERTIES_KEY = "properties";
     public static final String JETSPEED_PROPERTIES_DEFAULT = "/WEB-INF/conf/jetspeed.properties";
+    public static final String JETSPEED_PROPERTIES_PATH_KEY = "jetspeedPropertiesPath";
+    public static final String JETSPEED_PROPERTIES_PATH_DEFAULT = "/WEB-INF/conf";
+    public static final String OVERRIDE_PROPERTIES = "override.properties";
+    public static final String SPRING_FILTER_KEY_PROPERTIES = "spring-filter-key.properties";
+    public static final String SPRING_FILTER_KEY = "spring.filter.key";
+    public static final String SPRING_FILTER_KEY_DEFAULT = "portal";
+    public static final String SPRING_FILTER_PROPERTIES = "spring-filter.properties";
 
     /** If this value is set as applicationRoot, then the webContext is used
      * as application root

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-production.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-production.xml?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-production.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-production.xml Fri Apr 18 05:01:12 2008
@@ -23,7 +23,7 @@
   <bean id="ProductionConfiguration" class="org.apache.commons.configuration.PropertiesConfiguration">
     <meta key="j2:cat" value="default" />
     <constructor-arg>
-      <value>${applicationRoot}/WEB-INF/conf/jetspeed-production.properties</value>
+      <value>${jetspeedPropertiesPath}/jetspeed-production.properties</value>
     </constructor-arg>
   </bean>
 </beans>

Added: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml?rev=649476&view=auto
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml (added)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml Fri Apr 18 05:01:12 2008
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+
+  <!-- Commons configuration object generated from jetspeed.properties + override.properties -->
+  <bean id="portal_configuration" class="org.apache.jetspeed.components.util.ConfigurationProperties">
+    <meta key="j2:cat" value="default" />
+    <property name="locations">
+      <list>
+        <value>file:///${jetspeedPropertiesPath}/jetspeed.properties</value>
+        <value>file:///${jetspeedPropertiesPath}/override.properties</value>
+      </list>
+    </property>
+    <property name="properties">
+      <value>applicationRoot=${applicationRoot}</value>
+    </property>
+  </bean>
+
+  <!-- Adds jetspeed.properties as our configuration object to support ${...} vars -->
+  <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <meta key="j2:cat" value="default,springProperties" />
+    <property name="locations">
+      <list>
+        <value>file:///${jetspeedPropertiesPath}/jetspeed.properties</value>
+        <value>file:///${jetspeedPropertiesPath}/override.properties</value>
+      </list>
+    </property>
+    <property name="properties">
+      <value>applicationRoot=${applicationRoot}</value>
+    </property>
+  </bean>
+
+</beans>

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml
------------------------------------------------------------------------------
    svn:keywords = Id

Propchange: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-properties.xml
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-spring.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-spring.xml?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-spring.xml (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/jetspeed-spring.xml Fri Apr 18 05:01:12 2008
@@ -18,14 +18,6 @@
 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
-  <!-- Commons configuration object generated from jetspeed.properties -->
-  <bean id="portal_configuration" class="org.apache.commons.configuration.PropertiesConfiguration">
-    <meta key="j2:cat" value="default" />
-    <constructor-arg>
-      <value>${applicationRoot}/WEB-INF/conf/jetspeed.properties</value>
-    </constructor-arg>
-  </bean>
-
   <bean id="PortalConfiguration" class="org.apache.jetspeed.administration.PortalConfigurationImpl">
     <meta key="j2:cat" value="default" />
     <constructor-arg>
@@ -192,22 +184,6 @@
     </property>
     <property name="responseFactory">
       <ref bean="ServletResponseFactory" />
-    </property>
-  </bean>
-
-  <!-- Adds jetspeed.properties as our configuration object to support ${...} vars -->
-  <!-- ${applicationRoot} is acutally set as a system property via the SpringEngine -->
-
-  <bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-    <meta key="j2:cat" value="default,springProperties" />
-    <property name="locations">
-      <list>
-        <value>file:///${applicationRoot}/WEB-INF/conf/jetspeed.properties</value>
-        <value>file:///${applicationRoot}/WEB-INF/conf/override.properties</value>
-      </list>
-    </property>
-    <property name="properties">
-      <value>applicationRoot=${applicationRoot}</value>
     </property>
   </bean>
 

Modified: portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties?rev=649476&r1=649475&r2=649476&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/conf/jetspeed/jetspeed.properties Fri Apr 18 05:01:12 2008
@@ -21,12 +21,6 @@
 #
 # ------------------------------------------------------------------------
 
-#-------------------------------------------------------------------------
-# override for jetspeed.properties.  This include needs to be come before
-# any other prop definitions.
-#-------------------------------------------------------------------------
-include=override.properties
-
 portal.name = Jetspeed
 portal.version = 2.2-SNAPSHOT
 



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org