Author: nicolas
Date: Thu Feb 28 07:16:09 2008
New Revision: 631995
URL: http://svn.apache.org/viewvc?rev=631995&view=rev
Log:
add support for WebApplicationContext
fix plexus descriptors that use <plexus> root element (redback)
Added:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
(with props)
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
(with props)
Modified:
maven/archiva/branches/springy/plexus-spring/pom.xml
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.java
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusContainerAdapter.java
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusInSpringTestCase.java
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusToSpringUtils.java
maven/archiva/branches/springy/plexus-spring/src/main/resources/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.xsl
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectMapForRole.xml
Modified: maven/archiva/branches/springy/plexus-spring/pom.xml
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/pom.xml?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
--- maven/archiva/branches/springy/plexus-spring/pom.xml (original)
+++ maven/archiva/branches/springy/plexus-spring/pom.xml Thu Feb 28 07:16:09
2008
@@ -34,6 +34,12 @@
<version>2.5.1</version>
</dependency>
<dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-web</artifactId>
+ <version>2.5.1</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.2</version>
Added:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java?rev=631995&view=auto
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
(added)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
Thu Feb 28 07:16:09 2008
@@ -0,0 +1,99 @@
+package org.codehaus.plexus.spring;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+
+import org.apache.commons.lang.ClassUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codehaus.plexus.PlexusConstants;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Disposable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.ListableBeanFactory;
+import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.ApplicationContext;
+
+/**
+ * Utility method to convert plexus descriptors to spring bean context.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class PlexusApplicationContextDelegate
+{
+ /** Logger used by this class. */
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private PlexusLifecycleBeanPostProcessor lifecycleBeanPostProcessor;
+
+ /**
+ * @see
org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)
+ */
+ protected void loadBeanDefinitions( XmlBeanDefinitionReader reader )
+ throws BeansException, IOException
+ {
+ logger.info( "Registering plexus to spring XML translation" );
+ reader.setDocumentReaderClass(
PlexusBeanDefinitionDocumentReader.class );
+ reader.setValidationMode( XmlBeanDefinitionReader.VALIDATION_NONE );
+ }
+
+ /**
+ * @see
org.springframework.context.support.AbstractApplicationContext#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
+ */
+ protected void postProcessBeanFactory( ConfigurableListableBeanFactory
beanFactory, ApplicationContext context )
+ {
+ // Register a PlexusContainerAdapter bean to allow context lookups
using plexus API
+ PlexusContainerAdapter plexus = new PlexusContainerAdapter();
+ plexus.setApplicationContext( context );
+ beanFactory.registerSingleton( "plexusContainer", plexus );
+
+ // Register a beanPostProcessor to handle plexus interface-based
lifecycle management
+ lifecycleBeanPostProcessor = new PlexusLifecycleBeanPostProcessor();
+ lifecycleBeanPostProcessor.setBeanFactory( context );
+ beanFactory.addBeanPostProcessor( lifecycleBeanPostProcessor );
+
+ // Register a PorpertyEditor to support plexus XML <configuration> set
as CDATA in
+ // a spring context XML file.
+ beanFactory.addPropertyEditorRegistrar( new
PlexusConfigurationPropertyEditor() );
+ }
+
+ /**
+ * @see
org.springframework.context.support.AbstractApplicationContext#doClose()
+ */
+ protected void doClose()
+ {
+ try
+ {
+ lifecycleBeanPostProcessor.destroy();
+ }
+ catch ( Throwable ex )
+ {
+ logger.error( "Exception thrown from
PlexusLifecycleBeanPostProcessor handling ContextClosedEvent", ex );
+ }
+ }
+}
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusApplicationContextDelegate.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.java?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.java
Thu Feb 28 07:16:09 2008
@@ -24,6 +24,7 @@
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
@@ -67,11 +68,21 @@
protected Document convertPlexusDescriptorToSpringBeans( Document doc )
{
- if ( !"component-set".equals( doc.getDocumentElement().getNodeName() )
)
+ if ( "component-set".equals( doc.getDocumentElement().getNodeName() ) )
{
- return doc;
+ return translatePlexusDescriptor( doc );
+ }
+ if ( "plexus".equals( doc.getDocumentElement().getNodeName() ) )
+ {
+ return translatePlexusDescriptor( doc );
}
+ return doc;
+ }
+
+ private Document translatePlexusDescriptor( Document doc )
+ throws TransformerFactoryConfigurationError
+ {
try
{
Source xmlSource = new DOMSource( doc );
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusClassPathXmlApplicationContext.java
Thu Feb 28 07:16:09 2008
@@ -37,7 +37,7 @@
public class PlexusClassPathXmlApplicationContext
extends ClassPathXmlApplicationContext
{
- private PlexusLifecycleBeanPostProcessor lifecycleBeanPostProcessor;
+ private static PlexusApplicationContextDelegate delegate = new
PlexusApplicationContextDelegate();
public PlexusClassPathXmlApplicationContext( String path, Class clazz )
throws BeansException
@@ -45,9 +45,6 @@
super( path, clazz );
}
-
-
-
public PlexusClassPathXmlApplicationContext( String configLocation )
throws BeansException
{
@@ -98,9 +95,7 @@
protected void loadBeanDefinitions( XmlBeanDefinitionReader reader )
throws BeansException, IOException
{
- logger.info( "Registering plexus to spring XML translation" );
- reader.setDocumentReaderClass(
PlexusBeanDefinitionDocumentReader.class );
- reader.setValidationMode( XmlBeanDefinitionReader.VALIDATION_NONE );
+ delegate.loadBeanDefinitions( reader );
super.loadBeanDefinitions( reader );
}
@@ -111,19 +106,7 @@
*/
protected void postProcessBeanFactory( ConfigurableListableBeanFactory
beanFactory )
{
- // Register a PlexusContainerAdapter bean to allow context lookups
using plexus API
- PlexusContainerAdapter plexus = new PlexusContainerAdapter();
- plexus.setApplicationContext( this );
- beanFactory.registerSingleton( "plexusContainer", plexus );
-
- // Register a beanPostProcessor to handle plexus interface-based
lifecycle management
- lifecycleBeanPostProcessor = new PlexusLifecycleBeanPostProcessor();
- lifecycleBeanPostProcessor.setBeanFactory( this );
- beanFactory.addBeanPostProcessor( lifecycleBeanPostProcessor );
-
- // Register a PorpertyEditor to support plexus XML <configuration> set
as CDATA in
- // a spring context XML file.
- beanFactory.addPropertyEditorRegistrar( new
PlexusConfigurationPropertyEditor() );
+ delegate.postProcessBeanFactory( beanFactory, this );
}
/**
@@ -133,14 +116,7 @@
*/
protected void doClose()
{
- try
- {
- lifecycleBeanPostProcessor.destroy();
- }
- catch ( Throwable ex )
- {
- logger.error( "Exception thrown from
PlexusLifecycleBeanPostProcessor handling ContextClosedEvent", ex );
- }
+ delegate.doClose();
super.doClose();
}
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusContainerAdapter.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusContainerAdapter.java?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusContainerAdapter.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusContainerAdapter.java
Thu Feb 28 07:16:09 2008
@@ -24,6 +24,7 @@
import java.util.List;
import java.util.Map;
+import org.codehaus.plexus.PlexusConstants;
import org.codehaus.plexus.PlexusContainer;
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
@@ -48,7 +49,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
*/
public class PlexusContainerAdapter
- implements PlexusContainer, ApplicationContextAware, InitializingBean
+ implements PlexusContainer, ApplicationContextAware
{
private Context context = new SimpleContext();
@@ -62,16 +63,6 @@
/**
* [EMAIL PROTECTED]
- * @see
org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
- */
- public void afterPropertiesSet()
- throws Exception
- {
- context = new SimpleContext();
- }
-
- /**
- * [EMAIL PROTECTED]
* @see
org.codehaus.plexus.PlexusContainer#addComponentDescriptor(org.codehaus.plexus.component.repository.ComponentDescriptor)
*/
public void addComponentDescriptor( ComponentDescriptor
componentDescriptor )
@@ -660,8 +651,6 @@
private class SimpleContext implements Context
{
- /** the plexus container key in the context */
- private static final String PLEXUS = "plexus";
/**
* [EMAIL PROTECTED]
@@ -669,7 +658,7 @@
*/
public boolean contains( Object key )
{
- return PLEXUS.equals( key );
+ return PlexusConstants.PLEXUS_KEY.equals( key );
}
/**
@@ -679,7 +668,7 @@
public Object get( Object key )
throws ContextException
{
- return PLEXUS.equals( key ) ? PlexusContainerAdapter.this : null;
+ return PlexusConstants.PLEXUS_KEY.equals( key ) ?
PlexusContainerAdapter.this : null;
}
/**
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusInSpringTestCase.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusInSpringTestCase.java?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusInSpringTestCase.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusInSpringTestCase.java
Thu Feb 28 07:16:09 2008
@@ -25,8 +25,6 @@
import org.springframework.context.ConfigurableApplicationContext;
-;
-
/**
* Mimic org.codehaus.plexus.PlexusTestCase as simple replacement for test
* cases.
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusToSpringUtils.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusToSpringUtils.java?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusToSpringUtils.java
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusToSpringUtils.java
Thu Feb 28 07:16:09 2008
@@ -36,7 +36,6 @@
* Utility method to convert plexus descriptors to spring bean context.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
- * @since 1.1
*/
public class PlexusToSpringUtils
{
Added:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java?rev=631995&view=auto
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
(added)
+++
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
Thu Feb 28 07:16:09 2008
@@ -0,0 +1,75 @@
+package org.codehaus.plexus.spring;
+
+/*
+ * 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.
+ */
+
+import java.io.IOException;
+
+import org.springframework.beans.BeansException;
+import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+
+/**
+ * A custom XmlWebApplicationContext to support plexus
+ * <tr>components.xml</tt> descriptors in Spring, with no changes required to
+ * neither plexus nor spring beans.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Nicolas De Loof</a>
+ */
+public class PlexusWebApplicationContext
+ extends XmlWebApplicationContext
+{
+ private static PlexusApplicationContextDelegate delegate = new
PlexusApplicationContextDelegate();
+
+ /**
+ * [EMAIL PROTECTED]
+ *
+ * @see
org.springframework.context.support.AbstractXmlApplicationContext#loadBeanDefinitions(org.springframework.beans.factory.xml.XmlBeanDefinitionReader)
+ */
+ protected void loadBeanDefinitions( XmlBeanDefinitionReader reader )
+ throws BeansException, IOException
+ {
+ delegate.loadBeanDefinitions( reader );
+ super.loadBeanDefinitions( reader );
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ *
+ * @see
org.springframework.context.support.AbstractApplicationContext#postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
+ */
+ protected void postProcessBeanFactory( ConfigurableListableBeanFactory
beanFactory )
+ {
+ delegate.postProcessBeanFactory( beanFactory, this );
+ super.postProcessBeanFactory( beanFactory );
+ }
+
+ /**
+ * [EMAIL PROTECTED]
+ *
+ * @see
org.springframework.context.support.AbstractApplicationContext#doClose()
+ */
+ protected void doClose()
+ {
+ delegate.doClose();
+ super.doClose();
+ }
+
+}
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange:
maven/archiva/branches/springy/plexus-spring/src/main/java/org/codehaus/plexus/spring/PlexusWebApplicationContext.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
maven/archiva/branches/springy/plexus-spring/src/main/resources/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.xsl
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/main/resources/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.xsl?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/main/resources/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.xsl
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/main/resources/org/codehaus/plexus/spring/PlexusBeanDefinitionDocumentReader.xsl
Thu Feb 28 07:16:09 2008
@@ -29,14 +29,14 @@
to handle IoC containers incompatibilities.
-->
-<xsl:template match="/component-set" >
+<xsl:template match="/" >
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://plexus.codehaus.org/spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://plexus.codehaus.org/spring
http://plexus.codehaus.org/schemas/spring-1.0.xsd"
default-lazy-init="true">
- <xsl:for-each select="components/component">
+ <xsl:for-each select="//component">
<component>
<xsl:attribute name="role">
Modified:
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectMapForRole.xml
URL:
http://svn.apache.org/viewvc/maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectMapForRole.xml?rev=631995&r1=631994&r2=631995&view=diff
==============================================================================
---
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectMapForRole.xml
(original)
+++
maven/archiva/branches/springy/plexus-spring/src/test/resources/testInjectMapForRole.xml
Thu Feb 28 07:16:09 2008
@@ -1,4 +1,7 @@
-<component-set>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<plexus>
+
<components>
<component>
<role>org.codehaus.plexus.spring.PlexusBean</role>
@@ -16,4 +19,5 @@
</requirements>
</component>
</components>
-</component-set>
+
+</plexus>