You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/06/11 23:33:38 UTC

svn commit: r953880 - in /incubator/aries/trunk: blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/ transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/

Author: mahrwald
Date: Fri Jun 11 21:33:37 2010
New Revision: 953880

URL: http://svn.apache.org/viewvc?rev=953880&view=rev
Log:
ARIES-322: Transaction interceptors (or any other interceptors) don't work with anonymous inner beans

Modified:
    incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
    incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
    incubator/aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java?rev=953880&r1=953879&r2=953880&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/BeanRecipe.java Fri Jun 11 21:33:37 2010
@@ -46,7 +46,6 @@ import org.apache.aries.blueprint.utils.
 import org.osgi.service.blueprint.container.ComponentDefinitionException;
 import org.osgi.service.blueprint.container.ReifiedType;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.ComponentMetadata;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +72,8 @@ public class BeanRecipe extends Abstract
     private List<String> argTypes;
     private boolean reorderArguments;
     private final boolean allowsFieldInjection;
-
+    private BeanMetadata interceptorLookupKey;
+    
 
     public BeanRecipe(String name, ExtendedBlueprintContainer blueprintContainer, Object type, boolean allowsFieldInjection) {
         super(name);
@@ -138,6 +138,10 @@ public class BeanRecipe extends Abstract
         this.explicitDependencies = explicitDependencies;
     }
 
+    public void setInterceptorLookupKey(BeanMetadata metadata) {
+    	interceptorLookupKey = metadata;
+    }
+    
     @Override
     public List<Recipe> getConstructorDependencies() {
         List<Recipe> recipes = new ArrayList<Recipe>();
@@ -668,11 +672,9 @@ public class BeanRecipe extends Abstract
             throws ComponentDefinitionException {
 
         Object intercepted = null;
-        String beanName = getName();
         ComponentDefinitionRegistry reg = blueprintContainer
                 .getComponentDefinitionRegistry();
-        ComponentMetadata metaData = reg.getComponentDefinition(beanName);
-        List<Interceptor> interceptors = reg.getInterceptors(metaData);
+        List<Interceptor> interceptors = reg.getInterceptors(interceptorLookupKey);
         if (interceptors != null && interceptors.size() > 0) {
             boolean asmAvailable = false;
             try {
@@ -698,14 +700,14 @@ public class BeanRecipe extends Abstract
                 // if asm is available we can proxy the original object with the
                 // AsmInterceptorWrapper
                 intercepted = AsmInterceptorWrapper.createProxyObject(original
-                        .getClass().getClassLoader(), metaData, interceptors,
+                        .getClass().getClassLoader(), interceptorLookupKey, interceptors,
                         original, original.getClass());
             } else {
                 LOGGER.debug("cglib available for interceptors");
                 // otherwise we're using cglib and need to use the interfaces
                 // with the CgLibInterceptorWrapper
                 intercepted = CgLibInterceptorWrapper.createProxyObject(
-                        original.getClass().getClassLoader(), metaData,
+                        original.getClass().getClassLoader(), interceptorLookupKey,
                         interceptors, original, original.getClass()
                                 .getInterfaces());
             }

Modified: incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java?rev=953880&r1=953879&r2=953880&view=diff
==============================================================================
--- incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java (original)
+++ incubator/aries/trunk/blueprint/blueprint-core/src/main/java/org/apache/aries/blueprint/container/RecipeBuilder.java Fri Jun 11 21:33:37 2010
@@ -230,6 +230,7 @@ public class RecipeBuilder {
         recipe.setPrototype(MetadataUtil.isPrototypeScope(beanMetadata));
         recipe.setInitMethod(beanMetadata.getInitMethod());
         recipe.setDestroyMethod(beanMetadata.getDestroyMethod());
+        recipe.setInterceptorLookupKey(beanMetadata);
         List<BeanArgument> beanArguments = beanMetadata.getArguments();
         if (beanArguments != null && !beanArguments.isEmpty()) {
             boolean hasIndex = (beanArguments.get(0).getIndex() >= 0);

Modified: incubator/aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml?rev=953880&r1=953879&r2=953880&view=diff
==============================================================================
--- incubator/aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml (original)
+++ incubator/aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml Fri Jun 11 21:33:37 2010
@@ -69,19 +69,18 @@
        </service-properties>
    </service>
 
-   <bean id="requiresNewBeanImpl" class="org.apache.aries.transaction.test.impl.TestBeanImpl" init-method="initialize">
-       <tx:transaction method="insertRow throw*" value="RequiresNew"/>
-       <tx:transaction method="countRows" value="NotSupported"/>
-       <property name="enlistingDataSource" ref="enlistingDataSource"/>
-       <property name="dataSource" ref="dataSource"/>
-       <property name="user" value="user"/>
-       <property name="password" value="password"/>
-   </bean>
-   
-   <service id="requiresNewBean" ref="requiresNewBeanImpl" interface="org.apache.aries.transaction.test.TestBean">
+   <service id="requiresNewBean" interface="org.apache.aries.transaction.test.TestBean">
        <service-properties>
            <entry key="tranStrategy" value="RequiresNew"/>
        </service-properties>
+       <bean class="org.apache.aries.transaction.test.impl.TestBeanImpl" init-method="initialize">
+           <tx:transaction method="insertRow throw*" value="RequiresNew"/>
+           <tx:transaction method="countRows" value="NotSupported"/>
+           <property name="enlistingDataSource" ref="enlistingDataSource"/>
+           <property name="dataSource" ref="dataSource"/>
+           <property name="user" value="user"/>
+           <property name="password" value="password"/>
+       </bean>
    </service>
 
    <bean id="mandatoryBeanImpl" class="org.apache.aries.transaction.test.impl.TestBeanImpl" init-method="initialize">
@@ -92,7 +91,7 @@
        <property name="user" value="user"/>
        <property name="password" value="password"/>
    </bean>
-   
+
    <service id="mandatoryBean" ref="mandatoryBeanImpl" interface="org.apache.aries.transaction.test.TestBean">
        <service-properties>
            <entry key="tranStrategy" value="Mandatory"/>