You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/08/06 20:22:11 UTC

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

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 <lu...@apache.org>
Authored: Wed Aug 6 20:21:25 2014 +0200
Committer: Lukasz Lenart <lu...@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());