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 2011/02/16 19:19:54 UTC

svn commit: r1071355 - in /aries/trunk/transaction/transaction-blueprint/src: main/java/org/apache/aries/transaction/parsing/ main/resources/OSGI-INF/blueprint/ test/java/org/apache/aries/transaction/

Author: mahrwald
Date: Wed Feb 16 18:19:53 2011
New Revision: 1071355

URL: http://svn.apache.org/viewvc?rev=1071355&view=rev
Log:
ARIES-578: Plug-point for different transaction interceptors.

Added:
    aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java
Modified:
    aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
    aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml
    aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BundleWideNameSpaceHandlerTest.java
    aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/NameSpaceHandlerTest.java

Modified: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java?rev=1071355&r1=1071354&r2=1071355&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java Wed Feb 16 18:19:53 2011
@@ -18,8 +18,11 @@
  */
 package org.apache.aries.transaction.parsing;
 
+import java.io.IOException;
+import java.io.InputStream;
 import java.net.URL;
 import java.util.HashSet;
+import java.util.Properties;
 import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -30,6 +33,7 @@ import org.apache.aries.blueprint.Namesp
 import org.apache.aries.blueprint.ParserContext;
 import org.apache.aries.transaction.Constants;
 import org.apache.aries.transaction.TxComponentMetaDataHelper;
+import org.osgi.service.blueprint.container.BlueprintContainer;
 import org.osgi.service.blueprint.reflect.ComponentMetadata;
 import org.osgi.service.blueprint.reflect.Metadata;
 import org.slf4j.Logger;
@@ -38,6 +42,9 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 public class TxElementHandler implements NamespaceHandler {
+    public static final String DEFAULT_INTERCEPTOR_ID = "txinterceptor";
+    public static final String INTERCEPTOR_BLUEPRINT_ID = "interceptor.blueprint.id";
+
     private static final Logger LOGGER =
         LoggerFactory.getLogger(TxElementHandler.class);
 
@@ -110,14 +117,32 @@ public class TxElementHandler implements
         this.metaDataHelper = transactionEnhancer;
     }
 
-    public final void setTransactionInterceptor(Interceptor itx)
+    public final void setBlueprintContainer(BlueprintContainer container) 
     {
-        if (LOGGER.isDebugEnabled())
-            LOGGER.debug("parser having interceptor set " + itx);
+        String id = DEFAULT_INTERCEPTOR_ID;
+        InputStream is = TxElementHandler.class.getResourceAsStream("/provider.properties");
         
-        this.interceptor = itx;
+        if (is != null) {
+            try {
+                Properties props = new Properties();
+                props.load(is);
+                if (props.containsKey(INTERCEPTOR_BLUEPRINT_ID)) {
+                    id = props.getProperty(INTERCEPTOR_BLUEPRINT_ID);
+                }
+            } catch (IOException e) {
+                LOGGER.error("IOException while loading provider properties. Using default provider", e);
+            } finally {
+                try {
+                    is.close();
+                } catch (IOException e2) {
+                    LOGGER.error("Unexpected exception while closing stream", e2);
+                }
+            }
+        }
+        
+        this.interceptor = (Interceptor) container.getComponentInstance(id);
     }
-
+    
     public Set<Class> getManagedClasses()
     {
         // TODO Auto-generated method stub

Modified: aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml?rev=1071355&r1=1071354&r2=1071355&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/resources/OSGI-INF/blueprint/transaction.xml Wed Feb 16 18:19:53 2011
@@ -33,7 +33,7 @@
         </service-properties>
         <bean class="org.apache.aries.transaction.parsing.TxElementHandler">
             <property ref="txenhancer" name="txMetaDataHelper"/>
-            <property ref="txinterceptor" name="transactionInterceptor"/>
+            <property name="blueprintContainer" ref="blueprintContainer" />
         </bean>
   </service>              
   

Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java?rev=1071355&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java Wed Feb 16 18:19:53 2011
@@ -0,0 +1,77 @@
+/*
+ * 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.aries.transaction;
+
+import java.util.Properties;
+
+import javax.transaction.TransactionManager;
+
+import org.apache.aries.blueprint.NamespaceHandler;
+import org.apache.aries.blueprint.container.NamespaceHandlerRegistry;
+import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
+import org.apache.aries.mocks.BundleMock;
+import org.apache.aries.transaction.parsing.TxElementHandler;
+import org.apache.aries.unittest.mocks.MethodCall;
+import org.apache.aries.unittest.mocks.Skeleton;
+import org.junit.After;
+import org.junit.Before;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.service.blueprint.container.BlueprintContainer;
+
+public class BaseNameSpaceHandlerSetup {
+    protected Bundle b;
+    protected NamespaceHandlerRegistry nhri;
+    protected TxComponentMetaDataHelperImpl txenhancer;
+    
+    @Before
+    public void setUp() {
+        b = Skeleton.newMock(new BundleMock("org.apache.aries.tx", new Properties()), Bundle.class);
+        BundleContext ctx = b.getBundleContext();
+        nhri = new NamespaceHandlerRegistryImpl(ctx);
+        
+        TransactionManager tm = Skeleton.newMock(TransactionManager.class);
+        
+        txenhancer = new TxComponentMetaDataHelperImpl();
+        
+        TxInterceptorImpl txinterceptor = new TxInterceptorImpl();
+        txinterceptor.setTransactionManager(tm);
+        txinterceptor.setTxMetaDataHelper(txenhancer);
+        
+        TxElementHandler namespaceHandler = new TxElementHandler();
+        
+        BlueprintContainer container = Skeleton.newMock(BlueprintContainer.class);
+        Skeleton.getSkeleton(container).setReturnValue(
+                new MethodCall(BlueprintContainer.class, "getComponentInstance", TxElementHandler.DEFAULT_INTERCEPTOR_ID),
+                txinterceptor);
+        namespaceHandler.setBlueprintContainer(container);
+        namespaceHandler.setTxMetaDataHelper(txenhancer);
+            
+        Properties props = new Properties();
+        props.put("osgi.service.blueprint.namespace", new String[]{"http://aries.apache.org/xmlns/transactions/v1.0.0", "http://aries.apache.org/xmlns/transactions/v1.1.0"});
+        ctx.registerService(NamespaceHandler.class.getName(), namespaceHandler, props);
+    }
+      
+      @After
+      public void tearDown() throws Exception{
+        b = null;
+          nhri = null;
+          txenhancer = null;
+      }
+}

Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BundleWideNameSpaceHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BundleWideNameSpaceHandlerTest.java?rev=1071355&r1=1071354&r2=1071355&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BundleWideNameSpaceHandlerTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BundleWideNameSpaceHandlerTest.java Wed Feb 16 18:19:53 2011
@@ -25,63 +25,16 @@ import java.net.URI;
 import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Properties;
 import java.util.Set;
 
-import javax.transaction.TransactionManager;
-
 import org.apache.aries.blueprint.ComponentDefinitionRegistry;
-import org.apache.aries.blueprint.NamespaceHandler;
-import org.apache.aries.blueprint.container.NamespaceHandlerRegistry;
 import org.apache.aries.blueprint.container.Parser;
 import org.apache.aries.blueprint.container.NamespaceHandlerRegistry.NamespaceHandlerSet;
 import org.apache.aries.blueprint.namespace.ComponentDefinitionRegistryImpl;
-import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
-import org.apache.aries.mocks.BundleMock;
-import org.apache.aries.transaction.parsing.TxElementHandler;
-import org.apache.aries.unittest.mocks.Skeleton;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
 
-public class BundleWideNameSpaceHandlerTest {
-    
-	Bundle b;
-	private NamespaceHandlerRegistry nhri;
-	private TxComponentMetaDataHelperImpl txenhancer;
-	
-    @Before
-    public void setUp() {
-        b = Skeleton.newMock(new BundleMock("org.apache.aries.tx", new Properties()), Bundle.class);
-        BundleContext ctx = b.getBundleContext();
-        nhri = new NamespaceHandlerRegistryImpl(ctx);
-        
-        TransactionManager tm = Skeleton.newMock(TransactionManager.class);
-        
-        txenhancer = new TxComponentMetaDataHelperImpl();
-        
-        TxInterceptorImpl txinterceptor = new TxInterceptorImpl();
-        txinterceptor.setTransactionManager(tm);
-        txinterceptor.setTxMetaDataHelper(txenhancer);
-        
-        TxElementHandler namespaceHandler = new TxElementHandler();
-        namespaceHandler.setTransactionInterceptor(txinterceptor);
-        namespaceHandler.setTxMetaDataHelper(txenhancer);
-            
-        Properties props = new Properties();
-        props.put("osgi.service.blueprint.namespace", new String[]{"http://aries.apache.org/xmlns/transactions/v1.0.0", "http://aries.apache.org/xmlns/transactions/v1.1.0"});
-        ctx.registerService(NamespaceHandler.class.getName(), namespaceHandler, props);
-    }
-    
-    @After
-    public void tearDown() throws Exception{
-    	b = null;
-        nhri = null;
-        txenhancer = null;
-    }
+public class BundleWideNameSpaceHandlerTest extends BaseNameSpaceHandlerSetup {
     
     @Test
     public void testMultipleElements() throws Exception

Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/NameSpaceHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/NameSpaceHandlerTest.java?rev=1071355&r1=1071354&r2=1071355&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/NameSpaceHandlerTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/NameSpaceHandlerTest.java Wed Feb 16 18:19:53 2011
@@ -24,68 +24,16 @@ import java.net.URI;
 import java.net.URL;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Properties;
 import java.util.Set;
 
-import javax.transaction.TransactionManager;
-
-import org.apache.aries.mocks.BundleMock;
-
 import org.apache.aries.blueprint.ComponentDefinitionRegistry;
-import org.apache.aries.blueprint.NamespaceHandler;
-import org.apache.aries.blueprint.container.NamespaceHandlerRegistry;
 import org.apache.aries.blueprint.container.Parser;
 import org.apache.aries.blueprint.container.NamespaceHandlerRegistry.NamespaceHandlerSet;
 import org.apache.aries.blueprint.namespace.ComponentDefinitionRegistryImpl;
-import org.apache.aries.blueprint.namespace.NamespaceHandlerRegistryImpl;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
 import org.osgi.service.blueprint.reflect.BeanMetadata;
-import org.osgi.service.blueprint.reflect.BeanProperty;
-
-import org.apache.aries.transaction.TxComponentMetaDataHelperImpl;
-import org.apache.aries.transaction.TxInterceptorImpl;
-import org.apache.aries.transaction.parsing.TxElementHandler;
-import org.apache.aries.unittest.mocks.Skeleton;
 
-public class NameSpaceHandlerTest {
-    
-	Bundle b;
-	private NamespaceHandlerRegistry nhri;
-	private TxComponentMetaDataHelperImpl txenhancer;
-	
-    @Before
-    public void setUp() {
-        b = Skeleton.newMock(new BundleMock("org.apache.aries.tx", new Properties()), Bundle.class);
-        BundleContext ctx = b.getBundleContext();
-        nhri = new NamespaceHandlerRegistryImpl(ctx);
-        
-        TransactionManager tm = Skeleton.newMock(TransactionManager.class);
-        
-        txenhancer = new TxComponentMetaDataHelperImpl();
-        
-        TxInterceptorImpl txinterceptor = new TxInterceptorImpl();
-        txinterceptor.setTransactionManager(tm);
-        txinterceptor.setTxMetaDataHelper(txenhancer);
-        
-        TxElementHandler namespaceHandler = new TxElementHandler();
-        namespaceHandler.setTransactionInterceptor(txinterceptor);
-        namespaceHandler.setTxMetaDataHelper(txenhancer);
-            
-        Properties props = new Properties();
-        props.put("osgi.service.blueprint.namespace", new String[]{"http://aries.apache.org/xmlns/transactions/v1.0.0", "http://aries.apache.org/xmlns/transactions/v1.1.0"});
-        ctx.registerService(NamespaceHandler.class.getName(), namespaceHandler, props);
-    }
-    
-    @After
-    public void tearDown() throws Exception{
-    	b = null;
-        nhri = null;
-        txenhancer = null;
-    }
+public class NameSpaceHandlerTest extends BaseNameSpaceHandlerSetup {
     
     @Test
     public void testMultipleElements_100() throws Exception
@@ -106,8 +54,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
@@ -133,8 +81,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
@@ -160,8 +108,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
@@ -187,8 +135,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
@@ -214,8 +162,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
@@ -241,8 +189,8 @@ public class NameSpaceHandlerTest {
       
       BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
       
-      BeanMetadata anon = (BeanMetadata) ((BeanProperty) comp.getProperties().get(0)).getValue();
-      BeanMetadata anonToo = (BeanMetadata) ((BeanProperty) comp.getProperties().get(1)).getValue();
+      BeanMetadata anon = (BeanMetadata) (comp.getProperties().get(0)).getValue();
+      BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
 
       assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
       assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));