Author: bago
Date: Fri Jul 11 09:09:41 2008
New Revision: 676012
URL: http://svn.apache.org/viewvc?rev=676012&view=rev
Log:
Second attempt to fix Spring integration for better geronimo integration
(JAMES-842)
Based on a patch kindly submitted by David Jencks.
Added:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
(with props)
Removed:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/JamesResourceLoader.java
Modified:
james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/beanfactory/AvalonApplicationContext.java
james/server/trunk/spring-deployment/build.xml
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/Main.java
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/FileSystemBridge.java
Modified:
james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/beanfactory/AvalonApplicationContext.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/beanfactory/AvalonApplicationContext.java?rev=676012&r1=676011&r2=676012&view=diff
==============================================================================
---
james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/beanfactory/AvalonApplicationContext.java
(original)
+++
james/server/trunk/avalon-spring-bridge-library/src/main/java/org/apache/james/container/spring/beanfactory/AvalonApplicationContext.java
Fri Jul 11 09:09:41 2008
@@ -21,10 +21,10 @@
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
-import
org.springframework.context.support.AbstractRefreshableApplicationContext;
import org.springframework.context.ApplicationContext;
-import org.springframework.core.io.Resource;
+import
org.springframework.context.support.AbstractRefreshableApplicationContext;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
import java.io.IOException;
@@ -46,18 +46,20 @@
/**
* configuration-by-convention constructor, tries to find default config
files on classpath
*/
- public AvalonApplicationContext() {
- this(SPRING_BEANS_CONF, PHOENIX_ASSEMBLY_CONF);
+ public static AvalonApplicationContext newAvalonApplicationContext() {
+ return newAvalonApplicationContext(SPRING_BEANS_CONF,
PHOENIX_ASSEMBLY_CONF);
}
- public AvalonApplicationContext(String containerConf, String
applicationConf) {
- this(new ClassPathResource(containerConf), new
ClassPathResource(applicationConf));
+ public static AvalonApplicationContext newAvalonApplicationContext(String
containerConf, String applicationConf) {
+ return newAvalonApplicationContext(new
ClassPathResource(containerConf), new ClassPathResource(applicationConf));
}
- public AvalonApplicationContext(Resource containerConfigurationResource,
+ public static AvalonApplicationContext
newAvalonApplicationContext(Resource containerConfigurationResource,
Resource applicationConfigurationResource)
{
- this(null, containerConfigurationResource,
applicationConfigurationResource);
+ AvalonApplicationContext result = new AvalonApplicationContext(null,
containerConfigurationResource, applicationConfigurationResource);
+ result.refresh();
+ return result;
}
public AvalonApplicationContext(ApplicationContext parent,
@@ -66,7 +68,6 @@
super(parent);
this.containerConfigurationResource = containerConfigurationResource;
this.applicationConfigurationResource =
applicationConfigurationResource;
- refresh();
}
protected void loadBeanDefinitions(DefaultListableBeanFactory
defaultListableBeanFactory) throws IOException, BeansException {
Modified: james/server/trunk/spring-deployment/build.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/build.xml?rev=676012&r1=676011&r2=676012&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/build.xml (original)
+++ james/server/trunk/spring-deployment/build.xml Fri Jul 11 09:09:41 2008
@@ -405,7 +405,8 @@
<classpathentry combineaccessrules="false"
kind="src" path="/core-library"/>;
<classpathentry combineaccessrules="false"
kind="src" path="/imap-codec-library"/>
<classpathentry combineaccessrules="false"
kind="src" path="/imap-command-library"/>
- <classpathentry combineaccessrules="false"
kind="src" path="/imapmailbox-library"/>
+ <classpathentry combineaccessrules="false"
kind="src" path="/imapmailbox-library"/>
+ <classpathentry combineaccessrules="false"
kind="src" path="/avalon-spring-bridge-library"/>
<classpathentry combineaccessrules="false"
kind="src" path="/mordred-library"/>
<classpathentry combineaccessrules="false"
kind="src" path="/user-library"/>
<classpathentry combineaccessrules="false"
kind="src" path="/avalon-user-function"/>
Modified:
james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml?rev=676012&r1=676011&r2=676012&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
(original)
+++ james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
Fri Jul 11 09:09:41 2008
@@ -26,9 +26,7 @@
<!--
beans which replace Avalon specific container logic
-->
- <bean id="fileSystemOverride"
class="org.apache.james.container.spring.adaptor.FileSystemBridge">
- <property name="resourceLoader" ref="JamesResourceLoader" />
- </bean>
+ <bean id="fileSystemOverride"
class="org.apache.james.container.spring.adaptor.FileSystemBridge" />
<bean id="serviceManager"
class="org.apache.james.container.spring.adaptor.DefaultServiceManagerFactory" >
<property name="replacements">
@@ -89,8 +87,6 @@
</property>
</bean>
- <bean id="JamesResourceLoader"
class="org.apache.james.container.spring.adaptor.JamesResourceLoader" />
-
<bean id="avalonContext"
class="org.apache.james.container.spring.adaptor.AvalonContext" >
<property name="applicationHome" value="data" />
<property name="applicationName" value="Apache JAMES Server" />
Modified:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/Main.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/Main.java?rev=676012&r1=676011&r2=676012&view=diff
==============================================================================
---
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/Main.java
(original)
+++
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/Main.java
Fri Jul 11 09:09:41 2008
@@ -18,7 +18,7 @@
****************************************************************/
package org.apache.james.container.spring;
-import org.apache.james.container.spring.beanfactory.AvalonApplicationContext;
+import org.apache.james.container.spring.beanfactory.JamesApplicationContext;
/**
* Bootstraps James using a Spring container
@@ -26,7 +26,7 @@
public class Main {
public static void main(String[] args) {
- new AvalonApplicationContext("spring-beans.xml", "james-assembly.xml");
+ JamesApplicationContext.newJamesApplicationContext();
}
}
Modified:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/FileSystemBridge.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/FileSystemBridge.java?rev=676012&r1=676011&r2=676012&view=diff
==============================================================================
---
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/FileSystemBridge.java
(original)
+++
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/adaptor/FileSystemBridge.java
Fri Jul 11 09:09:41 2008
@@ -19,6 +19,7 @@
package org.apache.james.container.spring.adaptor;
import org.apache.james.services.FileSystem;
+import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.ResourceLoader;
import java.io.File;
@@ -26,7 +27,7 @@
import java.io.IOException;
import java.io.InputStream;
-public class FileSystemBridge implements FileSystem {
+public class FileSystemBridge implements FileSystem, ResourceLoaderAware {
public File getBasedir() throws FileNotFoundException {
return new File(".");
Added:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java?rev=676012&view=auto
==============================================================================
---
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
(added)
+++
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
Fri Jul 11 09:09:41 2008
@@ -0,0 +1,93 @@
+/****************************************************************
+ * 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. *
+ ****************************************************************/
+package org.apache.james.container.spring.beanfactory;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.core.io.Resource;
+
+import java.io.File;
+
+/**
+ * Override the ResourceLoader capabilities from the AvalonApplicationContext
+ * supporting JAMES' conf/var specific behaviours and the "classpath:" prefix.
+ */
+public class JamesApplicationContext extends AvalonApplicationContext {
+
+ private static final String FILE_PROTOCOL = "file://";
+ private static final String FILE_PROTOCOL_AND_CONF = "file://conf/";
+ private static final String FILE_PROTOCOL_AND_VAR = "file://var/";
+
+ public static final String JAMES_ASSEMBLY_CONF = "james-assembly.xml";
+
+
+ /**
+ * configuration-by-convention constructor, tries to find default config
files on classpath
+ */
+ public static JamesApplicationContext newJamesApplicationContext() {
+ return newJamesApplicationContext(SPRING_BEANS_CONF,
JAMES_ASSEMBLY_CONF);
+ }
+
+ public static JamesApplicationContext newJamesApplicationContext(String
containerConf, String applicationConf) {
+ return newJamesApplicationContext(new
ClassPathResource(containerConf), new ClassPathResource(applicationConf));
+ }
+
+
+ public static JamesApplicationContext newJamesApplicationContext(Resource
containerConfigurationResource,
+ Resource applicationConfigurationResource)
{
+ JamesApplicationContext result = new JamesApplicationContext(null,
containerConfigurationResource, applicationConfigurationResource);
+ result.refresh();
+ return result;
+ }
+
+
+ public JamesApplicationContext(ApplicationContext parent,
+ Resource containerConfigurationResource,
+ Resource applicationConfigurationResource) {
+ super(parent, containerConfigurationResource,
applicationConfigurationResource);
+ }
+
+ public ClassLoader getClassLoader() {
+ return Thread.currentThread().getContextClassLoader();
+ }
+
+ public Resource getResource(String fileURL) {
+ Resource r = null;
+ if (fileURL.startsWith("classpath:")) {
+ String resourceName = fileURL.substring("classpath:".length());
+ r = new ClassPathResource(resourceName);
+ } else if (fileURL.startsWith(FILE_PROTOCOL)) {
+ File file = null;
+ if (fileURL.startsWith(FILE_PROTOCOL_AND_CONF)) {
+ file = new File("../conf/" +
fileURL.substring(FILE_PROTOCOL_AND_CONF.length()));
+ } else if (fileURL.startsWith(FILE_PROTOCOL_AND_VAR)) {
+ file = new File("../var/" +
fileURL.substring(FILE_PROTOCOL_AND_VAR.length()));
+ } else {
+ file = new File("./" +
fileURL.substring(FILE_PROTOCOL.length()));
+ }
+ r = new FileSystemResource(file);
+ } else {
+ r = super.getResource(fileURL);
+ }
+ return r;
+ }
+
+
+}
Propchange:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
james/server/trunk/spring-deployment/src/main/java/org/apache/james/container/spring/beanfactory/JamesApplicationContext.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]