Repository: struts
Updated Branches:
  refs/heads/develop 52481bd56 -> ae324c981


WW-4110 Adds special flag to use different logic when creating AOP beans


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ae324c98
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ae324c98
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ae324c98

Branch: refs/heads/develop
Commit: ae324c98119ecc44041f40fcb5828773c4f72e33
Parents: 52481bd
Author: Lukasz Lenart <lukaszlen...@apache.org>
Authored: Wed Aug 6 20:21:25 2014 +0200
Committer: Lukasz Lenart <lukaszlen...@apache.org>
Committed: Wed Aug 6 20:21:25 2014 +0200

----------------------------------------------------------------------
 .../java/org/apache/struts2/StrutsConstants.java     |  3 +++
 .../resources/org/apache/struts2/default.properties  |  5 +++++
 .../struts2/spring/StrutsSpringObjectFactory.java    |  3 +++
 .../spring/StrutsSpringObjectFactoryTest.java        |  4 ++--
 .../xwork2/spring/SpringObjectFactory.java           | 15 +++++++++++++++
 5 files changed, 28 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/core/src/main/java/org/apache/struts2/StrutsConstants.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java 
b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index 7676f4c..03287d6 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -155,6 +155,9 @@ public final class StrutsConstants {
     /** Whether Spring should use its class cache or not */
     public static final String STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE = 
"struts.objectFactory.spring.useClassCache";
 
+    /** Uses different logic to construct beans, see 
https://issues.apache.org/jira/browse/WW-4110 */
+    public static final String STRUTS_OBJECTFACTORY_SPRING_ENABLE_AOP_SUPPORT 
= "struts.objectFactory.spring.enableAopSupport";
+
     /** Whether or not XSLT templates should not be cached */
     public static final String STRUTS_XSLT_NOCACHE = "struts.xslt.nocache";
 

http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/core/src/main/resources/org/apache/struts2/default.properties
----------------------------------------------------------------------
diff --git a/core/src/main/resources/org/apache/struts2/default.properties 
b/core/src/main/resources/org/apache/struts2/default.properties
index df3e1d4..5618666 100644
--- a/core/src/main/resources/org/apache/struts2/default.properties
+++ b/core/src/main/resources/org/apache/struts2/default.properties
@@ -47,6 +47,11 @@ struts.objectFactory.spring.useClassCache = true
 ### valid values are: true, false (false is the default)
 struts.objectFactory.spring.autoWire.alwaysRespect = false
 
+### By default SpringObjectFactory doesn't support AOP
+### This flag was added just temporally to check if nothing is broken
+### See https://issues.apache.org/jira/browse/WW-4110
+struts.objectFactory.spring.enableAopSupport = false
+
 ### if specified, the default object type determiner can be overridden here
 ### Note: short-hand notation is supported in some cases, such as "tiger" or 
"notiger"
 ###       Alternatively, you can provide a 
com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here

http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
----------------------------------------------------------------------
diff --git 
a/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
 
b/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
index a5ad82d..d95830a 100644
--- 
a/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
+++ 
b/plugins/spring/src/main/java/org/apache/struts2/spring/StrutsSpringObjectFactory.java
@@ -67,6 +67,7 @@ public class StrutsSpringObjectFactory extends 
SpringObjectFactory {
             
@Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE,required=false)
 String autoWire,
             
@Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_AUTOWIRE_ALWAYS_RESPECT,required=false)
 String alwaysAutoWire,
             
@Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_USE_CLASS_CACHE,required=false)
 String useClassCacheStr,
+            
@Inject(value=StrutsConstants.STRUTS_OBJECTFACTORY_SPRING_ENABLE_AOP_SUPPORT,required=false)
 String enableAopSupport,
             @Inject ServletContext servletContext,
             @Inject(StrutsConstants.STRUTS_DEVMODE) String devMode,
             @Inject Container container) {
@@ -141,6 +142,8 @@ public class StrutsSpringObjectFactory extends 
SpringObjectFactory {
 
         
this.setAlwaysRespectAutowireStrategy("true".equalsIgnoreCase(alwaysAutoWire));
 
+        this.setEnableAopSupport(enableAopSupport);
+
         if (LOG.isInfoEnabled()) {
             LOG.info("... initialized Struts-Spring integration successfully");
         }

http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
 
b/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
index 0bb7294..92ce5a4 100644
--- 
a/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
+++ 
b/plugins/spring/src/test/java/org/apache/struts2/spring/StrutsSpringObjectFactoryTest.java
@@ -45,7 +45,7 @@ public class StrutsSpringObjectFactoryTest extends TestCase {
         Container container = EasyMock.createNiceMock(Container.class);
         EasyMock.replay(container);
         
-        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, 
null, null, new MockServletContext(), null, container);
+        StrutsSpringObjectFactory fac = new StrutsSpringObjectFactory(null, 
null, null, null, new MockServletContext(), null, container);
 
         assertEquals(AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, 
fac.getAutowireStrategy());
     }
@@ -60,7 +60,7 @@ public class StrutsSpringObjectFactoryTest extends TestCase {
         ac.setServletContext(msc);
         ac.setConfigLocations(new String[] 
{"org/apache/struts2/spring/StrutsSpringObjectFactoryTest-applicationContext.xml"});
         ac.refresh();
-        StrutsSpringObjectFactory fac = new 
StrutsSpringObjectFactory("constructor", null, null, msc, null, container);
+        StrutsSpringObjectFactory fac = new 
StrutsSpringObjectFactory("constructor", null, null, null, msc, null, 
container);
 
         assertEquals(AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, 
fac.getAutowireStrategy());
     }

http://git-wip-us.apache.org/repos/asf/struts/blob/ae324c98/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java
----------------------------------------------------------------------
diff --git 
a/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java
 
b/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java
index 9ba065d..56f6b53 100644
--- 
a/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java
+++ 
b/xwork-core/src/main/java/com/opensymphony/xwork2/spring/SpringObjectFactory.java
@@ -47,6 +47,11 @@ public class SpringObjectFactory extends ObjectFactory 
implements ApplicationCon
     private final Map<String, Object> classes = new HashMap<String, Object>();
     private boolean useClassCache = true;
     private boolean alwaysRespectAutowireStrategy = false;
+    /**
+     * This is temporary solution, after validating can be removed
+     * @since 2.3.18
+     */
+    private boolean enableAopSupport = false;
 
     @Inject(value="applicationContextPath",required=false)
     public void setApplicationContextPath(String ctx) {
@@ -55,6 +60,11 @@ public class SpringObjectFactory extends ObjectFactory 
implements ApplicationCon
         }
     }
 
+    @Inject(value = "enableAopSupport", required = false)
+    public void setEnableAopSupport(String enableAopSupport) {
+        this.enableAopSupport = Boolean.parseBoolean(enableAopSupport);
+    }
+
     /**
      * Set the Spring ApplicationContext that should be used to look beans up 
with.
      *
@@ -175,6 +185,11 @@ public class SpringObjectFactory extends ObjectFactory 
implements ApplicationCon
                 bean = autoWiringFactory.createBean(clazz, autowireStrategy, 
false);
                 injectApplicationContext(bean);
                 return injectInternalBeans(bean);
+            } else if (enableAopSupport) {
+                bean = autoWiringFactory.createBean(clazz, 
AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
+                bean = autoWireBean(bean, autoWiringFactory);
+                bean = autoWiringFactory.initializeBean(bean, 
bean.getClass().getName());
+                return bean;
             } else {
                 bean = autoWiringFactory.autowire(clazz, 
AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
                 bean = 
autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, 
bean.getClass().getName());

Reply via email to