You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by cs...@apache.org on 2015/08/18 18:40:51 UTC
svn commit: r1696456 [1/2] - in /aries/trunk/transaction:
transaction-blueprint/
transaction-blueprint/src/main/java/org/apache/aries/transaction/
transaction-blueprint/src/main/java/org/apache/aries/transaction/annotations/
transaction-blueprint/src/m...
Author: cschneider
Date: Tue Aug 18 16:40:50 2015
New Revision: 1696456
URL: http://svn.apache.org/r1696456
Log:
[ARIES-1382] Only allow jta annotations
Added:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/ComponentTxData.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationProcessor.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/ComponentTxDataTest.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BaseClass.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo2.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo3.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTest.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTranAttributeTest.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/Counter.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/annotations/TransactionPropagationType.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/MandatoryTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/JtaAnnotatedTestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/NeverTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/JtaAnnotatedPojo.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/NotSupportedTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/JtaAnnotatedTestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/RequiredTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/AnnotatedTestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/RequiresNewTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/JtaAnnotatedTestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/SupportsTestBeanImpl.java
- copied, changed from r1696014, aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/JtaAnnotatedTestBeanImpl.java
Removed:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/BundleWideTxData.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/BundleWideTxDataUtil.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/MatchedTxData.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelper.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxComponentMetaDataHelperImpl.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/annotations/Transaction.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/annotations/TransactionPropagationType.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/annotations/packageinfo
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/exception/TransactionRollbackException.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/exception/packageinfo
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationParser.java
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/TxTypeConverter.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationParserTest.java
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
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/JtaAnnotatedPojo.java
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries2.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries3.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries4.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries5.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries6.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries7.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries8.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/aries9.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries2.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries3.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries4.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries5.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/bundlewide-aries6.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/mixed-aries.xml
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/mixed-aries2.xml
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/InvalidTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryAnnotatedTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryJtaAnnotatedTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTranAttributeTest.java
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTranAttributeTest.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/AnnotatedTestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/JtaAnnotatedTestBeanImpl.java
Modified:
aries/trunk/transaction/transaction-blueprint/pom.xml
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TransactionAttribute.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.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/AnnotationEnablingNameSpaceHandlerTest.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/TranStrategyTest.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/AnnotatedPojo.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo1.java
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo2.java
aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/enable-annotations.xml
aries/trunk/transaction/transaction-itests/pom.xml
aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/TestBean.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/Connector.java
aries/trunk/transaction/transaction-testbundle/src/main/java/org/apache/aries/transaction/test/impl/TestBeanImpl.java
aries/trunk/transaction/transaction-testbundle/src/main/resources/OSGI-INF/blueprint/config.xml
Modified: aries/trunk/transaction/transaction-blueprint/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/pom.xml?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/pom.xml (original)
+++ aries/trunk/transaction/transaction-blueprint/pom.xml Tue Aug 18 16:40:50 2015
@@ -31,7 +31,7 @@
<groupId>org.apache.aries.transaction</groupId>
<artifactId>org.apache.aries.transaction.blueprint</artifactId>
<packaging>bundle</packaging>
- <version>1.2.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
<name>Apache Aries Transaction Blueprint</name>
<scm>
@@ -43,8 +43,6 @@
<properties>
<!-- Export package versions are maintained in packageinfo files -->
<aries.osgi.export.pkg>
- org.apache.aries.transaction.exception,
- org.apache.aries.transaction.annotations
</aries.osgi.export.pkg>
<aries.osgi.private.pkg>
org.apache.aries.transaction,
Added: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/ComponentTxData.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/ComponentTxData.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/ComponentTxData.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/ComponentTxData.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,90 @@
+package org.apache.aries.transaction;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+public class ComponentTxData {
+ private static final int BANNED_MODIFIERS = Modifier.PRIVATE | Modifier.STATIC;
+
+ Map<Method, TxType> txMap = new HashMap<Method, Transactional.TxType>();
+ private boolean isTransactional;
+ private Class<?> beanClass;
+
+ TxType getEffectiveType(Method m) {
+ try {
+ Method effectiveMethod = beanClass.getDeclaredMethod(m.getName(), m.getParameterTypes());
+ return txMap.get(effectiveMethod);
+ } catch (NoSuchMethodException e) {
+ try {
+ Method effectiveMethod = beanClass.getMethod(m.getName(), m.getParameterTypes());
+ return txMap.get(effectiveMethod);
+ } catch (NoSuchMethodException e1) {
+ return null;
+ } catch (SecurityException e1) {
+ throw new RuntimeException("Security exception when determining effective method", e1);
+ }
+ } catch (SecurityException e) {
+ throw new RuntimeException("Security exception when determining effective method", e);
+ }
+ }
+
+ public ComponentTxData(Class<?> c) {
+ beanClass = c;
+ isTransactional = false;
+ // Check class hierarchy
+ while (c != Object.class) {
+ isTransactional |= parseTxData(c);
+ for (Class<?> iface : c.getInterfaces()) {
+ isTransactional |= parseTxData(iface);
+ }
+ c = c.getSuperclass();
+ }
+ }
+
+ private boolean parseTxData(Class<?> c) {
+ boolean shouldAssignInterceptor = false;
+ TxType defaultType = getType(c.getAnnotation(Transactional.class));
+ if (defaultType != null) {
+ shouldAssignInterceptor = true;
+ }
+ for (Method m : c.getDeclaredMethods()) {
+ try {
+ TxType t = getType(m.getAnnotation(Transactional.class));
+ if (t != null) {
+ assertAllowedModifier(m);
+ txMap.put(m, t);
+ shouldAssignInterceptor = true;
+ } else if (defaultType != null){
+ txMap.put(m, defaultType);
+ }
+ } catch(IllegalStateException e) {
+ // don't break bean creation due to invalid transaction attribute
+ }
+ }
+
+ return shouldAssignInterceptor;
+ }
+
+ private TxType getType(Transactional jtaT) {
+ return (jtaT != null) ? jtaT.value() : null;
+ }
+
+ private void assertAllowedModifier(Method m) {
+ if ((m.getModifiers() & BANNED_MODIFIERS) != 0) {
+ throw new IllegalArgumentException("Transaction annotation is not allowed on private or static method " + m);
+ }
+ }
+
+ public boolean isTransactional() {
+ return isTransactional;
+ }
+
+ public Class<?> getBeanClass() {
+ return beanClass;
+ }
+}
Modified: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TransactionAttribute.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TransactionAttribute.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TransactionAttribute.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TransactionAttribute.java Tue Aug 18 16:40:50 2015
@@ -27,8 +27,7 @@ import javax.transaction.Status;
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
-
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
+import javax.transaction.Transactional.TxType;
public enum TransactionAttribute {
MANDATORY
@@ -53,7 +52,7 @@ public enum TransactionAttribute {
return new TransactionToken(null, null, NEVER);
}
},
- NOTSUPPORTED
+ NOT_SUPPORTED
{
public TransactionToken begin(TransactionManager man) throws SystemException
{
@@ -61,7 +60,7 @@ public enum TransactionAttribute {
return new TransactionToken(null, man.suspend(), this);
}
- return new TransactionToken(null, null, NOTSUPPORTED);
+ return new TransactionToken(null, null, NOT_SUPPORTED);
}
public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
@@ -98,7 +97,7 @@ public enum TransactionAttribute {
}
}
},
- REQUIRESNEW
+ REQUIRES_NEW
{
public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException,
InvalidTransactionException, IllegalStateException
@@ -114,7 +113,7 @@ public enum TransactionAttribute {
man.resume(suspendedTransaction);
throw e;
}
- return new TransactionToken(man.getTransaction(), suspendedTransaction, REQUIRESNEW, true);
+ return new TransactionToken(man.getTransaction(), suspendedTransaction, REQUIRES_NEW, true);
}
public void finish(TransactionManager man, TransactionToken tranToken) throws SystemException,
@@ -148,9 +147,9 @@ public enum TransactionAttribute {
}
};
- public static TransactionAttribute fromValue(TransactionPropagationType type)
+ public static TransactionAttribute fromValue(TxType type)
{
- return valueOf(type.name().toUpperCase());
+ return valueOf(type.name());
}
public TransactionToken begin(TransactionManager man) throws SystemException, NotSupportedException,
Modified: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/TxInterceptorImpl.java Tue Aug 18 16:40:50 2015
@@ -20,12 +20,12 @@ package org.apache.aries.transaction;
import java.lang.reflect.Method;
+import javax.transaction.RollbackException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
+import javax.transaction.Transactional.TxType;
import org.apache.aries.blueprint.Interceptor;
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
-import org.apache.aries.transaction.exception.TransactionRollbackException;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.coordinator.Coordination;
import org.osgi.service.coordinator.CoordinationException;
@@ -38,18 +38,22 @@ public class TxInterceptorImpl implement
private TransactionManager tm;
private Coordinator coordinator;
- private TxComponentMetaDataHelper metaDataHelper;
+ private ComponentTxData txData;
+
+ public TxInterceptorImpl(TransactionManager tm, Coordinator coordinator, ComponentTxData txData) {
+ this.tm = tm;
+ this.coordinator = coordinator;
+ this.txData = txData;
+ }
public int getRank() {
return 1; // Higher rank than jpa interceptor to make sure transaction is started first
}
public Object preCall(ComponentMetadata cm, Method m, Object... parameters) throws Throwable {
- final String methodName = m.getName();
- final TransactionPropagationType type = metaDataHelper.getComponentMethodTxAttribute(cm, methodName);
-
- // attribute could be null here which means no transaction
+ final TxType type = txData.getEffectiveType(m);
if (type == null) {
+ // No transaction
return null;
}
TransactionAttribute txAttribute = TransactionAttribute.fromValue(type);
@@ -63,10 +67,10 @@ public class TxInterceptorImpl implement
}
public void postCallWithException(ComponentMetadata cm, Method m, Throwable ex, Object preCallToken) {
- LOGGER.debug("PostCallWithException for bean {}, method {}.", getCmId(cm), m.getName(), ex);
if (!(preCallToken instanceof TransactionToken)) {
return;
}
+ LOGGER.debug("PostCallWithException for bean {}, method {}.", getCmId(cm), m.getName(), ex);
final TransactionToken token = (TransactionToken)preCallToken;
try {
token.getCoordination().end();
@@ -77,6 +81,7 @@ public class TxInterceptorImpl implement
Transaction tran = token.getActiveTransaction();
if (tran != null && isRollBackException(ex)) {
tran.setRollbackOnly();
+ LOGGER.info("Setting transaction to rollback only because of exception ", ex);
}
token.getTransactionAttribute().finish(tm, token);
} catch (Exception e) {
@@ -104,7 +109,9 @@ public class TxInterceptorImpl implement
} catch (Exception e) {
// We are throwing an exception, so we don't error it out
LOGGER.debug("Exception while completing transaction.", e);
- throw new TransactionRollbackException(e);
+ RollbackException rbe = new javax.transaction.RollbackException();
+ rbe.addSuppressed(e);
+ throw rbe;
}
} else {
// TODO: what now?
@@ -115,15 +122,4 @@ public class TxInterceptorImpl implement
return ex instanceof RuntimeException || ex instanceof Error;
}
- public final void setTransactionManager(TransactionManager manager) {
- tm = manager;
- }
-
- public void setCoordinator(Coordinator coordinator) {
- this.coordinator = coordinator;
- }
-
- public final void setTxMetaDataHelper(TxComponentMetaDataHelper transactionEnhancer) {
- this.metaDataHelper = transactionEnhancer;
- }
}
Added: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationProcessor.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationProcessor.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationProcessor.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationProcessor.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,69 @@
+/**
+ * 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.parsing;
+
+import javax.transaction.TransactionManager;
+
+import org.apache.aries.blueprint.BeanProcessor;
+import org.apache.aries.blueprint.ComponentDefinitionRegistry;
+import org.apache.aries.transaction.ComponentTxData;
+import org.apache.aries.transaction.TxInterceptorImpl;
+import org.osgi.service.blueprint.reflect.BeanMetadata;
+import org.osgi.service.coordinator.Coordinator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Adds the transactional interceptor if Transaction annotation is present
+ * on bean class or superclasses.
+ */
+public class AnnotationProcessor implements BeanProcessor {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(AnnotationProcessor.class);
+
+ private final ComponentDefinitionRegistry cdr;
+ private TransactionManager tm;
+ private Coordinator coordinator;
+
+ public AnnotationProcessor(ComponentDefinitionRegistry cdr, TransactionManager tm, Coordinator coordinator) {
+ this.cdr = cdr;
+ this.tm = tm;
+ this.coordinator = coordinator;
+ }
+
+ public void afterDestroy(Object arg0, String arg1) {
+ }
+
+ public Object afterInit(Object arg0, String arg1, BeanCreator arg2, BeanMetadata arg3) {
+ return arg0;
+ }
+
+ public void beforeDestroy(Object arg0, String arg1) {
+ }
+
+ public Object beforeInit(Object bean, String beanName, BeanCreator beanCreator, BeanMetadata beanData) {
+ ComponentTxData txData = new ComponentTxData(bean.getClass());
+ if (txData.isTransactional()) {
+ LOGGER.debug("Adding transaction interceptor to bean {} with class {}.", beanName, bean.getClass());
+ cdr.registerInterceptorWithComponent(beanData, new TxInterceptorImpl(tm, coordinator, txData));
+ }
+ return bean;
+ }
+
+}
Modified: aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java Tue Aug 18 16:40:50 2015
@@ -18,34 +18,21 @@
*/
package org.apache.aries.transaction.parsing;
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
-import java.util.Properties;
import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+
+import javax.transaction.TransactionManager;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
-import org.apache.aries.blueprint.Interceptor;
import org.apache.aries.blueprint.NamespaceHandler;
import org.apache.aries.blueprint.ParserContext;
-import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.mutable.MutablePassThroughMetadata;
-import org.apache.aries.transaction.BundleWideTxData;
-import org.apache.aries.transaction.TxComponentMetaDataHelper;
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
-import org.osgi.framework.Bundle;
-import org.osgi.service.blueprint.container.BlueprintContainer;
import org.osgi.service.blueprint.reflect.ComponentMetadata;
import org.osgi.service.blueprint.reflect.Metadata;
+import org.osgi.service.coordinator.Coordinator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
@@ -53,18 +40,10 @@ import org.w3c.dom.Node;
public class TxNamespaceHandler implements NamespaceHandler {
public static final String ANNOTATION_PARSER_BEAN_NAME = ".org_apache_aries_transaction_annotations";
- private static final String BEAN = "bean";
- private static final String VALUE = "value";
- private static final String METHOD = "method";
- public static final String DEFAULT_INTERCEPTOR_ID = "txinterceptor";
- private static final String INTERCEPTOR_BLUEPRINT_ID = "interceptor.blueprint.id";
-
private static final Logger LOGGER = LoggerFactory.getLogger(TxNamespaceHandler.class);
+ private TransactionManager tm;
+ private Coordinator coordinator;
- private TxComponentMetaDataHelper metaDataHelper;
- private Interceptor interceptor = null;
-
- private final ConcurrentMap<ComponentDefinitionRegistry,Bundle> registered = new ConcurrentHashMap<ComponentDefinitionRegistry, Bundle>();
private final Map<String, String> schemaMap;
public TxNamespaceHandler() {
@@ -76,31 +55,12 @@ public class TxNamespaceHandler implemen
private void parseElement(Element elt, ComponentMetadata cm, ParserContext pc)
{
- LOGGER.debug("parser asked to parse element {} ", elt);
+ LOGGER.debug("parser asked to parse element {} ", elt.getNodeName());
ComponentDefinitionRegistry cdr = pc.getComponentDefinitionRegistry();
- if ("transaction".equals(elt.getLocalName())) {
- Bundle blueprintBundle = getBlueprintBundle(cdr);
-
- // don't register components if we have no bundle (= dry parse)
- if (blueprintBundle != null) {
- registered.put(cdr, blueprintBundle);
- TransactionPropagationType txType = getType(elt.getAttribute(VALUE));
- String method = elt.getAttribute(METHOD);
- String beanAttr = elt.getAttribute(BEAN);
- if (cm == null) {
- // if the enclosing component is null, then we assume this is the top element
- registerComponentsWithInterceptor(cdr, beanAttr);
- metaDataHelper.populateBundleWideTransactionData(cdr, txType, method, beanAttr);
- } else {
- cdr.registerInterceptorWithComponent(cm, interceptor);
-
- metaDataHelper.setComponentTransactionData(cdr, cm, txType, method);
- }
- }
- } else if ("enable-annotations".equals(elt.getLocalName())) {
+ if ("enable-annotations".equals(elt.getLocalName())) {
Node n = elt.getChildNodes().item(0);
- if(n == null || Boolean.parseBoolean(n.getNodeValue())) {
+ if (n == null || Boolean.parseBoolean(n.getNodeValue())) {
//We need to register a bean processor to add annotation-based config
if (!cdr.containsComponentDefinition(ANNOTATION_PARSER_BEAN_NAME)) {
LOGGER.debug("Enabling annotation based transactions");
@@ -111,37 +71,21 @@ public class TxNamespaceHandler implemen
}
}
- private Bundle getBlueprintBundle(ComponentDefinitionRegistry cdr) {
- ComponentMetadata meta = cdr.getComponentDefinition("blueprintBundle");
- Bundle blueprintBundle = null;
- if (meta instanceof PassThroughMetadata) {
- blueprintBundle = (Bundle) ((PassThroughMetadata) meta).getObject();
- }
- return blueprintBundle;
- }
-
private MutableBeanMetadata createAnnotationParserBean(ParserContext pc, ComponentDefinitionRegistry cdr) {
MutableBeanMetadata meta = pc.createMetadata(MutableBeanMetadata.class);
meta.setId(ANNOTATION_PARSER_BEAN_NAME);
- meta.setRuntimeClass(AnnotationParser.class);
+ meta.setRuntimeClass(AnnotationProcessor.class);
meta.setProcessor(true);
-
- MutablePassThroughMetadata cdrMeta = pc.createMetadata(MutablePassThroughMetadata.class);
- cdrMeta.setObject(cdr);
- meta.addArgument(cdrMeta, ComponentDefinitionRegistry.class.getName(), 0);
-
- MutablePassThroughMetadata interceptorMeta = pc.createMetadata(MutablePassThroughMetadata.class);
- interceptorMeta.setObject(interceptor);
- meta.addArgument(interceptorMeta, Interceptor.class.getName(), 1);
-
- MutablePassThroughMetadata helperMeta = pc.createMetadata(MutablePassThroughMetadata.class);
- helperMeta.setObject(metaDataHelper);
- meta.addArgument(helperMeta, TxComponentMetaDataHelper.class.getName(), 2);
+ meta.addArgument(passThrough(pc, cdr), ComponentDefinitionRegistry.class.getName(), 0);
+ meta.addArgument(passThrough(pc, tm), TransactionManager.class.getName(), 1);
+ meta.addArgument(passThrough(pc, coordinator), Coordinator.class.getName(), 1);
return meta;
}
- private TransactionPropagationType getType(String typeSt) {
- return typeSt == null || typeSt.length() == 0 ? null : TransactionPropagationType.valueOf(typeSt);
+ private MutablePassThroughMetadata passThrough(ParserContext pc, Object o) {
+ MutablePassThroughMetadata meta = pc.createMetadata(MutablePassThroughMetadata.class);
+ meta.setObject(o);
+ return meta;
}
public ComponentMetadata decorate(Node node, ComponentMetadata cm, ParserContext pc)
@@ -164,37 +108,13 @@ public class TxNamespaceHandler implemen
String xsdPath = schemaMap.get(namespaceUri);
return xsdPath != null ? this.getClass().getResource(xsdPath) : null;
}
-
- public final void setTxMetaDataHelper(TxComponentMetaDataHelper transactionEnhancer)
- {
- this.metaDataHelper = transactionEnhancer;
- }
-
- public final void setBlueprintContainer(BlueprintContainer container)
- {
- String id = getTxInterceptorId();
- this.interceptor = (Interceptor) container.getComponentInstance(id);
+
+ public void setTm(TransactionManager tm) {
+ this.tm = tm;
}
-
- private String getTxInterceptorId() {
- String id = DEFAULT_INTERCEPTOR_ID;
- InputStream is = TxNamespaceHandler.class.getResourceAsStream("/provider.properties");
- if (is == null) {
- return id;
- }
- 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("An IOException occurred while loading the provider "
- + "properties. Using the default provider.", e);
- } finally {
- safeClose(is);
- }
- return id;
+
+ public void setCoordinator(Coordinator coordinator) {
+ this.coordinator = coordinator;
}
@SuppressWarnings("rawtypes")
@@ -203,55 +123,4 @@ public class TxNamespaceHandler implemen
return null;
}
- public boolean isRegistered(ComponentDefinitionRegistry cdr) {
- return registered.containsKey(cdr);
- }
-
- public void unregister(Bundle blueprintBundle) {
- Iterator<Map.Entry<ComponentDefinitionRegistry, Bundle>> it = registered.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<ComponentDefinitionRegistry, Bundle> e = it.next();
- if (blueprintBundle.equals(e.getValue())) {
- metaDataHelper.unregister(e.getKey());
- it.remove();
- }
- }
- }
-
- private void registerComponentsWithInterceptor(ComponentDefinitionRegistry cdr, String bean) {
- Set<String> ids = cdr.getComponentDefinitionNames();
-
- if (bean == null || bean.length() == 0) {
- // 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);
- }
- }
- }
- }
- }
-
- private void safeClose(Closeable closeable) {
- if (closeable != null) {
- try {
- closeable.close();
- } catch (IOException e) {
- // Ignore
- }
- }
-
- }
}
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=1696456&r1=1696455&r2=1696456&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 Tue Aug 18 16:40:50 2015
@@ -39,26 +39,11 @@
</service>
<bean id="nsHandler" class="org.apache.aries.transaction.parsing.TxNamespaceHandler">
- <property ref="txenhancer" name="txMetaDataHelper"/>
- <property name="blueprintContainer" ref="blueprintContainer" />
- </bean>
-
- <bean id="txenhancer" class="org.apache.aries.transaction.TxComponentMetaDataHelperImpl"/>
-
- <bean id="txinterceptor" class="org.apache.aries.transaction.TxInterceptorImpl">
- <property name="transactionManager" ref="tm"/>
- <property name="coordinator" ref="coordinator"/>
- <property ref="txenhancer" name="txMetaDataHelper"/>
+ <property name="tm" ref="tm" />
+ <property name="coordinator" ref="coordinator" />
</bean>
<reference id="tm" interface="javax.transaction.TransactionManager"/>
<reference id="coordinator" interface="org.osgi.service.coordinator.Coordinator"/>
-
-
- <service interface="org.osgi.service.blueprint.container.BlueprintListener">
- <bean class="org.apache.aries.transaction.parsing.TxBlueprintListener">
- <argument ref="nsHandler" />
- </bean>
- </service>
-
+
</blueprint>
\ No newline at end of file
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationEnablingNameSpaceHandlerTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationEnablingNameSpaceHandlerTest.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationEnablingNameSpaceHandlerTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationEnablingNameSpaceHandlerTest.java Tue Aug 18 16:40:50 2015
@@ -39,7 +39,7 @@ public class AnnotationEnablingNameSpace
assertNotNull(pmd);
assertEquals(3, pmd.getArguments().size());
assertEquals(cdr, ((PassThroughMetadata)pmd.getArguments().get(0).getValue()).getObject());
- assertEquals(txenhancer, ((PassThroughMetadata) pmd.getArguments().get(2).getValue()).getObject());
+// assertEquals(tm, ((PassThroughMetadata) pmd.getArguments().get(2).getValue()).getObject());
}
@Test
@@ -55,6 +55,6 @@ public class AnnotationEnablingNameSpace
BeanMetadata compTop = (BeanMetadata) cdr.getComponentDefinition("top");
assertNotNull(compTop);
assertEquals(0, cdr.getInterceptors(compTop).size());
- assertNull(txenhancer.getComponentMethodTxAttribute(compTop, "increment"));
+ //assertNull(txenhancer.getComponentMethodTxAttribute(compTop, "increment"));
}
}
Modified: 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=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/BaseNameSpaceHandlerSetup.java Tue Aug 18 16:40:50 2015
@@ -18,8 +18,6 @@
*/
package org.apache.aries.transaction;
-import static org.easymock.EasyMock.expect;
-
import java.net.URI;
import java.net.URL;
import java.util.Arrays;
@@ -39,12 +37,11 @@ import org.junit.After;
import org.junit.Before;
import org.osgi.framework.Bundle;
import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.service.blueprint.container.BlueprintContainer;
+import org.osgi.service.coordinator.Coordinator;
public class BaseNameSpaceHandlerSetup {
protected Bundle b;
protected DummyNamespaceHandlerRegistry nhri;
- protected TxComponentMetaDataHelperImpl txenhancer;
protected TxNamespaceHandler namespaceHandler;
protected IMocksControl control;
@@ -53,17 +50,12 @@ public class BaseNameSpaceHandlerSetup {
control = EasyMock.createControl();
b = control.createMock(Bundle.class);
TransactionManager tm = control.createMock(TransactionManager.class);
- txenhancer = new TxComponentMetaDataHelperImpl();
- TxInterceptorImpl txinterceptor = new TxInterceptorImpl();
- txinterceptor.setTransactionManager(tm);
- txinterceptor.setTxMetaDataHelper(txenhancer);
- namespaceHandler = new TxNamespaceHandler();
-
- BlueprintContainer container = control.createMock(BlueprintContainer.class);
- expect(container.getComponentInstance(EasyMock.eq(TxNamespaceHandler.DEFAULT_INTERCEPTOR_ID))).andReturn(txinterceptor);
+ Coordinator coordinator = control.createMock(Coordinator.class);
control.replay();
- namespaceHandler.setBlueprintContainer(container);
- namespaceHandler.setTxMetaDataHelper(txenhancer);
+
+ namespaceHandler = new TxNamespaceHandler();
+ namespaceHandler.setTm(tm);
+ namespaceHandler.setCoordinator(coordinator);
String[] namespaces = new String[]
{"http://aries.apache.org/xmlns/transactions/v1.0.0",
@@ -79,7 +71,6 @@ public class BaseNameSpaceHandlerSetup {
control.verify();
b = null;
nhri = null;
- txenhancer = null;
}
protected ComponentDefinitionRegistry parseCDR(String name) throws Exception {
Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/ComponentTxDataTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/ComponentTxDataTest.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/ComponentTxDataTest.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/ComponentTxDataTest.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,93 @@
+/**
+ * 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 static org.junit.Assert.assertEquals;
+
+import java.lang.reflect.Method;
+
+import javax.transaction.Transactional.TxType;
+
+import org.apache.aries.transaction.pojo.BadlyAnnotatedPojo1;
+import org.apache.aries.transaction.pojo.AnnotatedPojo;
+import org.apache.aries.transaction.pojo.ExtendedPojo;
+import org.apache.aries.transaction.pojo.ExtendedPojo2;
+import org.apache.aries.transaction.pojo.ExtendedPojo3;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ComponentTxDataTest {
+
+ @Test
+ public void testFindAnnotation() throws NoSuchMethodException, SecurityException {
+ ComponentTxData txData = new ComponentTxData(AnnotatedPojo.class);
+ Assert.assertTrue(txData.isTransactional());
+ assertEquals(TxType.REQUIRED, getType(txData, "increment"));
+ assertEquals(TxType.SUPPORTS, getType(txData, "checkValue"));
+ assertEquals(TxType.MANDATORY, getType(txData, "getRealObject"));
+ }
+
+ @Test
+ public void testFindAnnotationExtended() throws Exception {
+ ComponentTxData txData = new ComponentTxData(ExtendedPojo.class);
+ assertEquals(TxType.REQUIRED, getType(txData, "defaultType"));
+ assertEquals(TxType.SUPPORTS, getType(txData, "supports"));
+ }
+
+
+ @Test
+ public void testFindAnnotationExtended2() throws Exception {
+ ComponentTxData txData = new ComponentTxData(ExtendedPojo2.class);
+ assertEquals(TxType.MANDATORY, getType(txData, "defaultType"));
+ assertEquals(TxType.SUPPORTS, getType(txData, "supports"));
+ }
+
+ @Test
+ public void testFindAnnotationExtended3() throws Exception {
+ ComponentTxData txData = new ComponentTxData(ExtendedPojo3.class);
+ assertEquals(TxType.MANDATORY, getType(txData, "defaultType"));
+ assertEquals(TxType.REQUIRED, getType(txData, "supports"));
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testNoPrivateAnnotation() {
+ new ComponentTxData(BadlyAnnotatedPojo1.class);
+ }
+
+ @Test(expected=IllegalArgumentException.class)
+ public void testNoStaticAnnotation() {
+ new ComponentTxData(BadlyAnnotatedPojo1.class);
+ }
+
+ private TxType getType(ComponentTxData txData, String methodName) {
+ Class<?> c = txData.getBeanClass();
+ Method m;
+ try {
+ m = c.getDeclaredMethod(methodName, String.class);
+ } catch (NoSuchMethodException e) {
+ try {
+ m = c.getMethod(methodName, String.class);
+ } catch (NoSuchMethodException e1) {
+ throw new IllegalArgumentException(e1);
+ }
+ }
+ return txData.getEffectiveType(m);
+ }
+
+}
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/InterceptorTest.java Tue Aug 18 16:40:50 2015
@@ -26,11 +26,13 @@ import java.io.IOException;
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
+import org.apache.aries.transaction.pojo.AnnotatedPojo;
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
import org.junit.Test;
import org.osgi.service.coordinator.Coordination;
import org.osgi.service.coordinator.CoordinationException;
+import org.osgi.service.coordinator.Coordinator;
public class InterceptorTest {
@@ -61,8 +63,10 @@ public class InterceptorTest {
private void postCallWithTransaction(Throwable th, boolean expectRollback, boolean failCoordination) throws Throwable {
IMocksControl c = EasyMock.createControl();
- TxInterceptorImpl sut = new TxInterceptorImpl();
- sut.setTransactionManager(c.createMock(TransactionManager.class));
+ TransactionManager tm = c.createMock(TransactionManager.class);
+ Coordinator coordinator = c.createMock(Coordinator.class);
+ ComponentTxData txData = new ComponentTxData(AnnotatedPojo.class);
+ TxInterceptorImpl sut = new TxInterceptorImpl(tm, coordinator, txData );
Transaction tran = c.createMock(Transaction.class);
if (expectRollback) {
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/TranStrategyTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/TranStrategyTest.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/TranStrategyTest.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/TranStrategyTest.java Tue Aug 18 16:40:50 2015
@@ -158,7 +158,7 @@ public class TranStrategyTest {
expect(tm.getStatus()).andReturn(Status.STATUS_ACTIVE);
expect(tm.suspend()).andReturn(null);
c.replay();
- TransactionAttribute.NOTSUPPORTED.begin(tm);
+ TransactionAttribute.NOT_SUPPORTED.begin(tm);
c.verify();
// For all situations where there is no active transaction the
@@ -173,7 +173,7 @@ public class TranStrategyTest {
expect(tm.getTransaction()).andReturn(null).anyTimes();
c.replay();
try {
- assertNull("TransactionStrategy.NOT_SUPPORTED.begin() did not return null when manager status value is " + invalids[i], TransactionAttribute.NOTSUPPORTED.begin(tm).getActiveTransaction());
+ assertNull("TransactionStrategy.NOT_SUPPORTED.begin() did not return null when manager status value is " + invalids[i], TransactionAttribute.NOT_SUPPORTED.begin(tm).getActiveTransaction());
} catch (Exception ise) {
fail("TransactionStrategy.NOT_SUPPORTED.begin() threw unexpected exception when manager status value is " + invalids[i]);
}
@@ -191,13 +191,13 @@ public class TranStrategyTest {
tm.resume(t);
EasyMock.expectLastCall();
c.replay();
- TransactionToken tranToken = new TransactionToken(null, t, TransactionAttribute.NOTSUPPORTED);
- TransactionAttribute.NOTSUPPORTED.finish(tm, tranToken);
+ TransactionToken tranToken = new TransactionToken(null, t, TransactionAttribute.NOT_SUPPORTED);
+ TransactionAttribute.NOT_SUPPORTED.finish(tm, tranToken);
c.verify();
c.reset();
- tranToken = new TransactionToken(null, null, TransactionAttribute.NOTSUPPORTED);
- TransactionAttribute.NOTSUPPORTED.finish(tm, tranToken);
+ tranToken = new TransactionToken(null, null, TransactionAttribute.NOT_SUPPORTED);
+ TransactionAttribute.NOT_SUPPORTED.finish(tm, tranToken);
} catch (Exception e) {
fail("TransactionStrategy.NOT_SUPPORTED.finish() threw unexpected exception, " + e);
}
@@ -288,7 +288,7 @@ public class TranStrategyTest {
expectLastCall();
expect(tm.getTransaction()).andReturn(null);
c.replay();
- TransactionAttribute.REQUIRESNEW.begin(tm);
+ TransactionAttribute.REQUIRES_NEW.begin(tm);
c.verify();
}
@@ -312,7 +312,7 @@ public class TranStrategyTest {
expectLastCall();
c.replay();
try {
- assertNull("TransactionStrategy.REQUIRES_NEW.begin() did not return null when manager status value is " + manStatus[i], TransactionAttribute.REQUIRESNEW.begin(tm).getActiveTransaction());
+ assertNull("TransactionStrategy.REQUIRES_NEW.begin() did not return null when manager status value is " + manStatus[i], TransactionAttribute.REQUIRES_NEW.begin(tm).getActiveTransaction());
} catch (Exception ise) {
fail("TransactionStrategy.REQUIRES_NEW.begin() threw unexpected exception when manager status value is " + manStatus[i]);
}
@@ -361,7 +361,7 @@ public class TranStrategyTest {
expectLastCall();
c.replay();
try {
- TransactionAttribute.REQUIRESNEW.begin(tm);
+ TransactionAttribute.REQUIRES_NEW.begin(tm);
} catch (SystemException se) {
// Expect to be in here
} catch (NotSupportedException nse) {
@@ -392,8 +392,8 @@ public class TranStrategyTest {
expectLastCall();
c.replay();
try {
- TransactionToken tranToken = new TransactionToken(t, t, TransactionAttribute.REQUIRESNEW, true);
- TransactionAttribute.REQUIRESNEW.finish(tm, tranToken);
+ TransactionToken tranToken = new TransactionToken(t, t, TransactionAttribute.REQUIRES_NEW, true);
+ TransactionAttribute.REQUIRES_NEW.finish(tm, tranToken);
} catch (Exception e) {
fail("TransactionStrategy.REQUIRES_NEW.finish() threw unexpected exception when manager status is " + allStates[i]);
}
@@ -403,8 +403,8 @@ public class TranStrategyTest {
expect(tm.getStatus()).andReturn(allStates[i]);
requiresNew_assertion(tm, allStates[i]);
c.replay();
- TransactionToken tranToken = new TransactionToken(t, null, TransactionAttribute.REQUIRESNEW, true);
- TransactionAttribute.REQUIRESNEW.finish(tm, tranToken);
+ TransactionToken tranToken = new TransactionToken(t, null, TransactionAttribute.REQUIRES_NEW, true);
+ TransactionAttribute.REQUIRES_NEW.finish(tm, tranToken);
} catch (Throwable e) {
e.printStackTrace();
fail("TransactionStrategy.REQUIRES_NEW.finish() threw unexpected exception when manager status is " + allStates[i]);
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/AnnotatedPojo.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/AnnotatedPojo.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/AnnotatedPojo.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/AnnotatedPojo.java Tue Aug 18 16:40:50 2015
@@ -18,21 +18,22 @@
*/
package org.apache.aries.transaction.pojo;
-import org.apache.aries.transaction.annotations.Transaction;
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+@Transactional(TxType.REQUIRED)
public class AnnotatedPojo {
-
- @Transaction
- public void increment(String key) {}
- @Transaction(TransactionPropagationType.Supports)
- protected int checkValue(String key) {
- return 0;
- }
-
- @Transaction(TransactionPropagationType.Mandatory)
- Object getRealObject(String key) {
- return null;
- }
+ public void increment(String key) {
+ }
+
+ @Transactional(TxType.SUPPORTS)
+ protected int checkValue(String key) {
+ return 0;
+ }
+
+ @Transactional(TxType.MANDATORY)
+ Object getRealObject(String key) {
+ return null;
+ }
}
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo1.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo1.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo1.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo1.java Tue Aug 18 16:40:50 2015
@@ -18,24 +18,12 @@
*/
package org.apache.aries.transaction.pojo;
-import org.apache.aries.transaction.annotations.Transaction;
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
+import javax.transaction.Transactional;
+
public class BadlyAnnotatedPojo1 {
-
- @Transaction
- public void increment(String key) {}
- @Transaction(TransactionPropagationType.Supports)
- protected int checkValue(String key) {
- return 0;
- }
-
- @Transaction(TransactionPropagationType.Mandatory)
- Object getRealObject(String key) {
- return null;
- }
-
- @Transaction
- private void doesNotWork() {}
+ @Transactional
+ private void doesNotWork() {
+ }
}
Modified: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo2.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo2.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo2.java (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BadlyAnnotatedPojo2.java Tue Aug 18 16:40:50 2015
@@ -18,24 +18,11 @@
*/
package org.apache.aries.transaction.pojo;
-import org.apache.aries.transaction.annotations.Transaction;
-import org.apache.aries.transaction.annotations.TransactionPropagationType;
+import javax.transaction.Transactional;
public class BadlyAnnotatedPojo2 {
-
- @Transaction
- public void increment(String key) {}
- @Transaction(TransactionPropagationType.Supports)
- protected int checkValue(String key) {
- return 0;
- }
-
- @Transaction(TransactionPropagationType.Mandatory)
- Object getRealObject(String key) {
- return null;
- }
-
- @Transaction
- public static void alsoDoesNotWork() {}
+ @Transactional
+ public static void alsoDoesNotWork() {
+ }
}
Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BaseClass.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BaseClass.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BaseClass.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/BaseClass.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,17 @@
+package org.apache.aries.transaction.pojo;
+
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+@Transactional(value=TxType.REQUIRED)
+public class BaseClass {
+
+ @Transactional(value=TxType.NEVER)
+ public void defaultType(String test) {
+
+ }
+
+ public void supports(String test) {
+
+ }
+}
Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,17 @@
+package org.apache.aries.transaction.pojo;
+
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+public class ExtendedPojo extends BaseClass {
+
+ @Override
+ public void defaultType(String test) {
+ }
+
+ @Transactional(value=TxType.SUPPORTS)
+ @Override
+ public void supports(String test) {
+ }
+
+}
Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo2.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo2.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo2.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo2.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,18 @@
+package org.apache.aries.transaction.pojo;
+
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+@Transactional(value=TxType.MANDATORY)
+public class ExtendedPojo2 extends BaseClass {
+
+ @Override
+ public void defaultType(String test) {
+ }
+
+ @Transactional(value=TxType.SUPPORTS)
+ @Override
+ public void supports(String test) {
+ }
+
+}
Added: aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo3.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo3.java?rev=1696456&view=auto
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo3.java (added)
+++ aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/pojo/ExtendedPojo3.java Tue Aug 18 16:40:50 2015
@@ -0,0 +1,14 @@
+package org.apache.aries.transaction.pojo;
+
+import javax.transaction.Transactional;
+import javax.transaction.Transactional.TxType;
+
+@Transactional(value=TxType.MANDATORY)
+public class ExtendedPojo3 extends BaseClass {
+
+ @Override
+ public void defaultType(String test) {
+ super.defaultType(test);
+ }
+
+}
Modified: aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/enable-annotations.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/enable-annotations.xml?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/enable-annotations.xml (original)
+++ aries/trunk/transaction/transaction-blueprint/src/test/resources/org/apache/aries/transaction/enable-annotations.xml Tue Aug 18 16:40:50 2015
@@ -22,5 +22,5 @@
<tx:enable-annotations/>
- <bean id="top" class="org.apache.aries.transaction.pojo.AnnotatedPojo"/>
+ <bean id="top" class="org.apache.aries.transaction.pojo.JtaAnnotatedPojo"/>
</blueprint>
\ No newline at end of file
Modified: aries/trunk/transaction/transaction-itests/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/pom.xml?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/pom.xml (original)
+++ aries/trunk/transaction/transaction-itests/pom.xml Tue Aug 18 16:40:50 2015
@@ -133,7 +133,7 @@
<groupId>org.apache.aries.transaction</groupId>
<artifactId>org.apache.aries.transaction.blueprint</artifactId>
<scope>test</scope>
- <version>1.2.0-SNAPSHOT</version>
+ <version>2.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.aries.transaction</groupId>
Modified: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java?rev=1696456&r1=1696455&r2=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/AbstractIntegrationTest.java Tue Aug 18 16:40:50 2015
@@ -34,6 +34,7 @@ import javax.inject.Inject;
import javax.transaction.RollbackException;
import javax.transaction.UserTransaction;
+import org.apache.aries.transaction.test.Counter;
import org.apache.aries.transaction.test.TestBean;
import org.junit.Assert;
import org.junit.runner.RunWith;
@@ -55,6 +56,9 @@ public abstract class AbstractIntegratio
@Inject
UserTransaction tran;
+
+ @Inject
+ Counter counter;
protected boolean clientTransaction = true;
@@ -103,11 +107,15 @@ public abstract class AbstractIntegratio
mavenBundle("org.apache.aries.transaction", "org.apache.aries.transaction.testbundle").versionAsInProject(),
mavenBundle("org.apache.aries.transaction", "org.apache.aries.transaction.testds").versionAsInProject(),
- //new VMOption( "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" ),
+ //debug(),
//new TimeoutOption( 0 ),
};
}
+ protected Option debug() {
+ return vmOption("-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005");
+ }
+
private Option jta12Bundles() {
return CoreOptions.composite(
mavenBundle("javax.interceptor", "javax.interceptor-api").versionAsInProject(),
@@ -138,12 +146,12 @@ public abstract class AbstractIntegratio
// Test with client transaction and runtime exception - the user transaction is rolled back
protected void assertInsertWithRuntimeExceptionRolledBack() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
if (clientTransaction) {
tran.begin();
}
- bean.insertRow("testWithClientTranAndWithRuntimeException", 1);
+ bean.insertRow("testWithClientTranAndWithRuntimeException", 1, null);
try {
bean.insertRow("testWithClientTranAndWithRuntimeException", 2, new RuntimeException("Dummy exception"));
} catch (RuntimeException e) {
@@ -158,7 +166,7 @@ public abstract class AbstractIntegratio
}
}
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
// In case of client transaction both are rolled back
// In case of container transaction only second insert is rolled back
assertEquals("Added rows", clientTransaction ? 0 : 1, finalRows - initialRows);
@@ -166,11 +174,11 @@ public abstract class AbstractIntegratio
protected void assertInsertWithAppExceptionCommitted() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
if (clientTransaction) {
tran.begin();
}
- bean.insertRow("testWithClientTranAndWithAppException", 1);
+ bean.insertRow("testWithClientTranAndWithAppException", 1, null);
try {
bean.insertRow("testWithClientTranAndWithAppException", 2, new SQLException("Dummy exception"));
} catch (SQLException e) {
@@ -180,33 +188,33 @@ public abstract class AbstractIntegratio
tran.commit();
}
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 2, finalRows - initialRows);
}
protected void assertInsertSuccesful() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
if (clientTransaction ) {
tran.begin();
}
- bean.insertRow("testWithClientTran", 1);
+ bean.insertRow("testWithClientTran", 1, null);
if (clientTransaction ) {
tran.commit();
}
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 1, finalRows - initialRows);
}
protected void assertInsertFails() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
if (clientTransaction ) {
tran.begin();
}
try {
- bean.insertRow("testWithClientTran", 1);
+ bean.insertRow("testWithClientTran", 1, null);
fail("IllegalStateException not thrown");
} catch (IllegalStateException e) {
// Ignore Expected
@@ -214,7 +222,7 @@ public abstract class AbstractIntegratio
if (clientTransaction ) {
tran.commit();
}
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 0, finalRows - initialRows);
}
@@ -222,7 +230,7 @@ public abstract class AbstractIntegratio
// bean with a transaction strategy of Mandatory, and no transaction is available
protected void assertDelegateInsertFails() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
if (clientTransaction ) {
tran.begin();
@@ -236,14 +244,14 @@ public abstract class AbstractIntegratio
if (clientTransaction ) {
tran.commit();
}
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 0, finalRows - initialRows);
}
// Test without client transaction - an exception is thrown because a transaction is mandatory
protected void assertMandatoryTransaction() throws SQLException {
try {
- getBean().insertRow("testWithoutClientTran", 1);
+ getBean().insertRow("testWithoutClientTran", 1, null);
fail("IllegalStateException not thrown");
} catch (IllegalStateException e) {
// Ignore expected
@@ -254,13 +262,13 @@ public abstract class AbstractIntegratio
protected void assertDelegateInsert() throws Exception {
TestBean bean = getBean();
- int initialRows = bean.countRows();
+ int initialRows = counter.countRows();
tran.begin();
bean.delegateInsertRow("testWithClientTran", 1);
tran.commit();
- int finalRows = bean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 1, finalRows - initialRows);
}
}
\ No newline at end of file
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/MandatoryTest.java Tue Aug 18 16:40:50 2015
@@ -21,7 +21,7 @@ import org.apache.aries.transaction.test
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class MandatoryTranAttributeTest extends AbstractIntegrationTest {
+public class MandatoryTest extends AbstractIntegrationTest {
@Inject
@Filter("(tranAttribute=Mandatory)")
TestBean bean;
@@ -30,14 +30,17 @@ public class MandatoryTranAttributeTest
public void testMandatory() throws Exception {
assertInsertSuccesful();
assertInsertWithAppExceptionCommitted();
- assertInsertWithRuntimeExceptionRolledBack();
assertMandatoryTransaction();
}
-
+
+ @Test
+ public void testInsertWithRuntimeExceptionRolledBack() throws Exception {
+ assertInsertWithRuntimeExceptionRolledBack();
+ }
+
@Override
protected TestBean getBean() {
return bean;
}
-
}
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTest.java Tue Aug 18 16:40:50 2015
@@ -21,7 +21,7 @@ import org.apache.aries.transaction.test
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class NeverTranAttributeTest extends AbstractIntegrationTest {
+public class NeverTest extends AbstractIntegrationTest {
@Inject
@Filter("(tranAttribute=Never)")
TestBean bean;
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NeverTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/NotSupportedTest.java Tue Aug 18 16:40:50 2015
@@ -15,36 +15,62 @@
*/
package org.apache.aries.transaction.itests;
+import static junit.framework.Assert.assertEquals;
+
+import java.sql.SQLException;
+
import javax.inject.Inject;
import org.apache.aries.transaction.test.TestBean;
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class NeverTranAttributeTest extends AbstractIntegrationTest {
+public class NotSupportedTest extends AbstractIntegrationTest {
+ @Inject
+ @Filter("(tranAttribute=NotSupported)")
+ TestBean nsBean;
+
@Inject
- @Filter("(tranAttribute=Never)")
- TestBean bean;
+ @Filter("(tranAttribute=Required)")
+ TestBean rBean;
/**
- * Test with client transaction - an exception is thrown because transactions are not allowed
+ * The client transaction is suspended. So the delegate bean that mandates a transaction
+ * fails.
* @throws Exception
*/
@Test
- public void testInsertFails() throws Exception {
- clientTransaction = true;
- assertInsertFails();
- }
-
- @Test
- public void testDelegateInsertFails() throws Exception {
+ public void testNotSupported() throws Exception {
+ assertDelegateInsertFails();
clientTransaction = false;
assertDelegateInsertFails();
}
+ @Test
+ public void testExceptionsDoNotAffectTransaction() throws Exception {
+ int initialRows = counter.countRows();
+
+ tran.begin();
+ rBean.insertRow("testWithClientTranAndWithRuntimeException", 1, null);
+ try {
+ nsBean.throwApplicationException();
+ } catch (SQLException e) {
+ // Ignore expected
+ }
+ try {
+ nsBean.throwRuntimeException();
+ } catch (RuntimeException e) {
+ // Ignore expected
+ }
+ tran.commit();
+
+ int finalRows = counter.countRows();
+ assertEquals("Added rows", 1, finalRows - initialRows);
+
+ }
+
@Override
protected TestBean getBean() {
- return bean;
+ return nsBean;
}
-
}
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiredTest.java Tue Aug 18 16:40:50 2015
@@ -21,16 +21,24 @@ import org.apache.aries.transaction.test
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class RequiredTranAttributeTest extends AbstractIntegrationTest {
+public class RequiredTest extends AbstractIntegrationTest {
@Inject
- @Filter("(tranAttribute=Required)")
+ @Filter(timeout=120000, value="(tranAttribute=Required)")
TestBean bean;
@Test
- public void testRequired() throws Exception {
+ public void testInsertSuccesful() throws Exception {
clientTransaction = false;
assertInsertSuccesful();
+ }
+
+ @Test
+ public void testInsertWithAppExceptionCommitted() throws Exception {
assertInsertWithAppExceptionCommitted();
+ }
+
+ @Test
+ public void testInsertWithRuntimeExceptionRolledBack() throws Exception {
assertInsertWithRuntimeExceptionRolledBack();
}
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/RequiresNewTest.java Tue Aug 18 16:40:50 2015
@@ -25,7 +25,7 @@ import org.apache.aries.transaction.test
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class RequiresNewTranAttributeTest extends AbstractIntegrationTest {
+public class RequiresNewTest extends AbstractIntegrationTest {
@Inject
@Filter("(tranAttribute=RequiresNew)")
TestBean rnBean;
@@ -41,11 +41,11 @@ public class RequiresNewTranAttributeTes
*/
@Test
public void testClientTransactionRollback() throws Exception {
- int initialRows = rnBean.countRows();
+ int initialRows = counter.countRows();
tran.begin();
- rnBean.insertRow("testWithClientTran", 1);
+ rnBean.insertRow("testWithClientTran", 1, null);
tran.rollback();
- int finalRows = rnBean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 1, finalRows - initialRows);
}
@@ -56,16 +56,16 @@ public class RequiresNewTranAttributeTes
*/
@Test
public void testClientTransactionAndApplicationException() throws Exception {
- int initialRows = rnBean.countRows();
+ int initialRows = counter.countRows();
tran.begin();
- rBean.insertRow("testWithClientTranAndWithAppException", 1);
+ rBean.insertRow("testWithClientTranAndWithAppException", 1, null);
try {
rnBean.insertRow("testWithClientTranAndWithAppException", 2, new SQLException("Dummy exception"));
} catch (SQLException e) {
// Ignore expected
}
tran.commit();
- int finalRows = rnBean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 2, finalRows - initialRows);
}
@@ -77,16 +77,16 @@ public class RequiresNewTranAttributeTes
*/
@Test
public void testClientTransactionAndRuntimeException() throws Exception {
- int initialRows = rnBean.countRows();
+ int initialRows = counter.countRows();
tran.begin();
- rBean.insertRow("testWithClientTranAndWithRuntimeException", 1);
+ rBean.insertRow("testWithClientTranAndWithRuntimeException", 1, null);
try {
rnBean.insertRow("testWithClientTranAndWithRuntimeException", 2, new RuntimeException("Dummy exception"));
} catch (RuntimeException e) {
// Ignore expected
}
tran.commit();
- int finalRows = rnBean.countRows();
+ int finalRows = counter.countRows();
assertEquals("Added rows", 1, finalRows - initialRows);
}
Copied: aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTest.java (from r1696014, aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTranAttributeTest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTest.java?p2=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTest.java&p1=aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTranAttributeTest.java&r1=1696014&r2=1696456&rev=1696456&view=diff
==============================================================================
--- aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTranAttributeTest.java (original)
+++ aries/trunk/transaction/transaction-itests/src/test/java/org/apache/aries/transaction/itests/SupportsTest.java Tue Aug 18 16:40:50 2015
@@ -21,7 +21,7 @@ import org.apache.aries.transaction.test
import org.junit.Test;
import org.ops4j.pax.exam.util.Filter;
-public class SupportsTranAttributeTest extends AbstractIntegrationTest {
+public class SupportsTest extends AbstractIntegrationTest {
@Inject
@Filter("(tranAttribute=Supports)")
TestBean bean;