Changeset 3926

Show
Ignore:
Timestamp:
11/13/08 13:20:12 (2 months ago)
Author:
mtld
Message:

added PropertyConfigurer? support for Pustefix XML-property format

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pfixcore/projects/sample1/conf/spring.xml

    r3916 r3926  
    33       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    44       xmlns:aop="http://www.springframework.org/schema/aop" 
    5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> 
     5       xmlns:context="http://www.springframework.org/schema/context" 
     6       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
     7                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 
     8 
     9  <context:annotation-config/> 
    610 
    711  <bean id="testdata" class="de.schlund.pfixcore.example.TestData" scope="session"> 
    8     <property name="text" value="foo"/> 
    912    <aop:scoped-proxy/> 
    10     <property name="data" ref="global_testdata"/> 
     13    <property name="text" value="${testdata.defaulttext}"/> 
     14    <property name="data" ref="${ref.testdata}"/> 
    1115  </bean> 
    1216   
    1317  <bean id="global_testdata" class="de.schlund.pfixcore.example.TestData"> 
    14     <property name="text" value="bar"/> 
    15     <!-- <property name="foo" value="xxx"/>--> 
     18    <property name="text" value="TO_BE_OVERRIDDEN"/> 
     19  </bean> 
     20   
     21  <bean id="global_testdata_prod" class="de.schlund.pfixcore.example.TestData"> 
     22    <property name="text" value="baz"/> 
    1623  </bean> 
    1724 
  • trunk/pfixcore/src/org/pustefixframework/container/spring/beans/PustefixWebApplicationContext.java

    r3774 r3926  
    2525import javax.xml.parsers.ParserConfigurationException; 
    2626 
     27import org.pustefixframework.container.spring.util.PustefixPropertiesPersister; 
    2728import org.springframework.beans.BeansException; 
     29import org.springframework.beans.factory.config.BeanDefinition; 
     30import org.springframework.beans.factory.config.PropertyOverrideConfigurer; 
     31import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; 
     32import org.springframework.beans.factory.config.PropertyResourceConfigurer; 
     33import org.springframework.beans.factory.support.BeanDefinitionBuilder; 
     34import org.springframework.beans.factory.support.BeanDefinitionRegistry; 
     35import org.springframework.beans.factory.support.DefaultBeanNameGenerator; 
    2836import org.springframework.beans.factory.support.DefaultListableBeanFactory; 
    2937import org.springframework.beans.factory.xml.ResourceEntityResolver; 
     
    7381                pustefixReader.loadBeanDefinitions(configResource); 
    7482            } else { 
     83                tryAddPropertyConfigurer(configLocation, beanFactory); 
    7584                springReader.loadBeanDefinitions(configResource); 
    7685            } 
     
    8291    } 
    8392     
     93    private void tryAddPropertyConfigurer(String configLocation, BeanDefinitionRegistry registry) { 
     94        int ind = configLocation.lastIndexOf("."); 
     95        if(ind > -1) { 
     96            String propConfigLocation = configLocation.substring(0,ind) + "-properties" + 
     97                configLocation.substring(ind); 
     98            Resource propConfigResource = getResource(propConfigLocation); 
     99            if(propConfigResource.exists()) { 
     100                addPropertyConfigurer(PropertyPlaceholderConfigurer.class, propConfigResource, registry); 
     101            } 
     102            propConfigLocation = configLocation.substring(0,ind) + "-properties-override" + 
     103                configLocation.substring(ind); 
     104            propConfigResource = getResource(propConfigLocation); 
     105            if(propConfigResource.exists()) { 
     106                addPropertyConfigurer(PropertyOverrideConfigurer.class, propConfigResource, registry); 
     107            } 
     108        } 
     109    } 
     110     
     111    private void addPropertyConfigurer(Class<? extends PropertyResourceConfigurer> clazz, Resource location, BeanDefinitionRegistry registry) { 
     112        BeanDefinitionBuilder beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); 
     113        beanBuilder.setScope("singleton"); 
     114        beanBuilder.addPropertyValue("location", location); 
     115        beanBuilder.addPropertyValue("propertiesPersister", new PustefixPropertiesPersister()); 
     116        BeanDefinition definition = beanBuilder.getBeanDefinition(); 
     117        DefaultBeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator(); 
     118        String name = beanNameGenerator.generateBeanName(definition, registry); 
     119        registry.registerBeanDefinition(name, definition); 
     120    } 
     121     
    84122}