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/21 13:37:41 UTC
svn commit: r1072948 - 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: Mon Feb 21 12:37:41 2011
New Revision: 1072948
URL: http://svn.apache.org/viewvc?rev=1072948&view=rev
Log:
ARIES-578: More lifecycle fixes for component level metadata. Also, one fix for registering interceptors correctly for bundle wide transaction configuration.
Modified:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxBlueprintListener.java
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/TxBlueprintListener.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxBlueprintListener.java?rev=1072948&r1=1072947&r2=1072948&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxBlueprintListener.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxBlueprintListener.java Mon Feb 21 12:37:41 2011
@@ -18,7 +18,6 @@
*/
package org.apache.aries.transaction.parsing;
-import org.apache.aries.transaction.TxComponentMetaDataHelper;
import org.osgi.service.blueprint.container.BlueprintEvent;
import org.osgi.service.blueprint.container.BlueprintListener;
@@ -29,11 +28,9 @@ import org.osgi.service.blueprint.contai
public class TxBlueprintListener implements BlueprintListener {
private final TxElementHandler handler;
- private final TxComponentMetaDataHelper helper;
- public TxBlueprintListener(TxElementHandler handler, TxComponentMetaDataHelper helper) {
+ public TxBlueprintListener(TxElementHandler handler) {
this.handler = handler;
- this.helper = helper;
}
public void blueprintEvent(BlueprintEvent event) {
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=1072948&r1=1072947&r2=1072948&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 Mon Feb 21 12:37:41 2011
@@ -35,6 +35,7 @@ import org.apache.aries.blueprint.Interc
import org.apache.aries.blueprint.NamespaceHandler;
import org.apache.aries.blueprint.ParserContext;
import org.apache.aries.blueprint.PassThroughMetadata;
+import org.apache.aries.transaction.BundleWideTxData;
import org.apache.aries.transaction.Constants;
import org.apache.aries.transaction.TxComponentMetaDataHelper;
import org.osgi.framework.Bundle;
@@ -85,6 +86,14 @@ public class TxElementHandler implements
metaDataHelper.setComponentTransactionData(cdr, cm, elt.getAttribute(Constants.VALUE), elt
.getAttribute(Constants.METHOD));
}
+
+ ComponentMetadata meta = cdr.getComponentDefinition("blueprintBundle");
+ Bundle blueprintBundle = null;
+ if (meta instanceof PassThroughMetadata) {
+ blueprintBundle = (Bundle) ((PassThroughMetadata) meta).getObject();
+ }
+
+ registered.put(cdr, blueprintBundle);
}
if (LOGGER.isDebugEnabled())
@@ -167,36 +176,29 @@ public class TxElementHandler implements
}
}
- private void registerComponentsWithInterceptor(ComponentDefinitionRegistry cdr, String bean) {
- ComponentMetadata meta = cdr.getComponentDefinition("blueprintBundle");
- Bundle blueprintBundle = null;
- if (meta instanceof PassThroughMetadata) {
- blueprintBundle = (Bundle) ((PassThroughMetadata) meta).getObject();
- }
-
- // if it is already registered all components in the component definition registry, do nothing
- if (registered.putIfAbsent(cdr, blueprintBundle) == null) {
- Set<String> ids = cdr.getComponentDefinitionNames();
-
- if (bean == null || bean.isEmpty()) {
- // in this case, let's attempt to register all components
- // if the component has already been registered with this interceptor,
- // the registration will be ignored.
- for (String id : ids) {
- ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
- cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
- }
- } else {
- // register the beans specified
- Pattern p = Pattern.compile(bean);
- for (String id : ids) {
- Matcher m = p.matcher(id);
- if (m.matches()) {
- ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
- cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
- }
- }
+ private void registerComponentsWithInterceptor(ComponentDefinitionRegistry cdr, String bean) {
+ Set<String> ids = cdr.getComponentDefinitionNames();
+
+ if (bean == null || bean.isEmpty()) {
+ // in this case, let's attempt to register all components
+ // if the component has already been registered with this interceptor,
+ // the registration will be ignored.
+ for (String id : ids) {
+ ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
+ cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
+ }
+ } else {
+ //create a dummy bundle wide tx data, so we can get the bean patterns from it
+ BundleWideTxData data = new BundleWideTxData(null, "*", bean);
+ for (Pattern p : data.getBean()) {
+ for (String id : ids) {
+ Matcher m = p.matcher(id);
+ if (m.matches()) {
+ ComponentMetadata componentMetadata = cdr.getComponentDefinition(id);
+ cdr.registerInterceptorWithComponent(componentMetadata, interceptor);
+ }
+ }
}
- }
+ }
}
}
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=1072948&r1=1072947&r2=1072948&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 Mon Feb 21 12:37:41 2011
@@ -48,9 +48,8 @@
<reference id="tm" interface="javax.transaction.TransactionManager"/>
<service interface="org.osgi.service.blueprint.container.BlueprintListener">
- <bean class="org.apache.aries.transaction.parsing.TxElementHandler">
+ <bean class="org.apache.aries.transaction.parsing.TxBlueprintListener">
<argument ref="nsHandler" />
- <argument ref="txenhancer" />
</bean>
</service>
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=1072948&r1=1072947&r2=1072948&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 Mon Feb 21 12:37:41 2011
@@ -38,6 +38,9 @@ public class BundleWideNameSpaceHandlerT
assertNotNull(compTop);
assertNotNull(compDown);
+ assertEquals(1, cdr.getInterceptors(compTop).size());
+ assertEquals(1, cdr.getInterceptors(compDown).size());
+
assertEquals("Required", txenhancer.getComponentMethodTxAttribute(compTop, "doSomething"));
assertEquals("Never", txenhancer.getComponentMethodTxAttribute(compDown, "doSomething"));
@@ -56,6 +59,10 @@ public class BundleWideNameSpaceHandlerT
assertNotNull(compDown);
assertNotNull(compMiddle);
+ assertEquals(1, cdr.getInterceptors(compTop).size());
+ assertEquals(1, cdr.getInterceptors(compDown).size());
+ assertEquals(0, cdr.getInterceptors(compMiddle).size());
+
assertEquals("RequiresNew", txenhancer.getComponentMethodTxAttribute(compTop, "update1234"));
assertEquals("Required", txenhancer.getComponentMethodTxAttribute(compTop, "update"));
assertEquals("NotSupported", txenhancer.getComponentMethodTxAttribute(compTop, "doSomething"));
@@ -80,6 +87,10 @@ public class BundleWideNameSpaceHandlerT
assertNotNull(compDown);
assertNotNull(compMiddle);
+ assertEquals(1, cdr.getInterceptors(compTop).size());
+ assertEquals(1, cdr.getInterceptors(compDown).size());
+ assertEquals(1, cdr.getInterceptors(compMiddle).size());
+
assertEquals("RequiresNew", txenhancer.getComponentMethodTxAttribute(compTop, "update1234"));
assertEquals("Required", txenhancer.getComponentMethodTxAttribute(compTop, "update"));
assertEquals("NotSupported", txenhancer.getComponentMethodTxAttribute(compTop, "doSomething"));
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=1072948&r1=1072947&r2=1072948&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 Mon Feb 21 12:37:41 2011
@@ -41,8 +41,7 @@ public class NameSpaceHandlerTest extend
BeanMetadata anonToo = (BeanMetadata) (comp.getProperties().get(1)).getValue();
assertEquals("Required", txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
- assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
-
+ assertEquals("Never", txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
}
@Test
@@ -139,7 +138,29 @@ public class NameSpaceHandlerTest extend
}
@Test
- public void testLifecycle() throws Exception
+ public void testLifecycleOld() throws Exception
+ {
+ ComponentDefinitionRegistry cdr = parseCDR("aries.xml");
+
+ BeanMetadata comp = (BeanMetadata) cdr.getComponentDefinition("top");
+
+ 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"));
+
+ assertTrue(namespaceHandler.isRegistered(cdr));
+
+ new TxBlueprintListener(namespaceHandler).blueprintEvent(
+ new BlueprintEvent(BlueprintEvent.DESTROYED, b, Skeleton.newMock(Bundle.class)));
+
+ assertNull(txenhancer.getComponentMethodTxAttribute(anon, "doSomething"));
+ assertNull(txenhancer.getComponentMethodTxAttribute(anonToo, "doSomething"));
+ }
+
+ @Test
+ public void testLifecycleMixed() throws Exception
{
ComponentDefinitionRegistry cdr = parseCDR("mixed-aries.xml");
@@ -159,7 +180,7 @@ public class NameSpaceHandlerTest extend
assertTrue(namespaceHandler.isRegistered(cdr));
- new TxBlueprintListener(namespaceHandler, txenhancer).blueprintEvent(
+ new TxBlueprintListener(namespaceHandler).blueprintEvent(
new BlueprintEvent(BlueprintEvent.DESTROYED, b, Skeleton.newMock(Bundle.class)));
assertFalse(namespaceHandler.isRegistered(cdr));