Author: cschneider
Date: Tue Apr 7 13:34:33 2015
New Revision: 1671842
URL: http://svn.apache.org/r1671842
Log:
[ARIES-1310] Small refactoring
Added:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java
- copied, changed from r1671812,
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
Removed:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java
Modified:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/Constants.java
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/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/AnnotationParserTest.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/pojo/BadlyAnnotatedPojo2.java
Modified:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/Constants.java
URL:
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/Constants.java?rev=1671842&r1=1671841&r2=1671842&view=diff
==============================================================================
---
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/Constants.java
(original)
+++
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/Constants.java
Tue Apr 7 13:34:33 2015
@@ -25,18 +25,7 @@ import org.apache.aries.util.nls.Message
public class Constants {
public static final Pattern WILDCARD = Pattern.compile("\\Q.*\\E");
- public static final String BEAN = "bean";
- public static final String VALUE = "value";
- public static final String METHOD = "method";
- public static final String TX12_SCHEMA = "transactionv12.xsd";
- public static final String TX11_SCHEMA = "transactionv11.xsd";
- public static final String TX10_SCHEMA = "transactionv10.xsd";
- public static final String ANNOTATION_PARSER_BEAN_NAME =
".org_apache_aries_transaction_annotations";
public static final int BANNED_MODIFIERS = Modifier.PRIVATE |
Modifier.STATIC;
-
- public final static String TRANSACTION10URI =
"http://aries.apache.org/xmlns/transactions/v1.0.0";
- public final static String TRANSACTION11URI =
"http://aries.apache.org/xmlns/transactions/v1.1.0";
- public final static String TRANSACTION12URI =
"http://aries.apache.org/xmlns/transactions/v1.2.0";
public static final MessageUtil MESSAGES =
MessageUtil.createMessageUtil(Constants.class,
"org.apache.aries.transaction.nls.blueprintTx");
}
Modified:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationParser.java
URL:
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationParser.java?rev=1671842&r1=1671841&r2=1671842&view=diff
==============================================================================
---
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationParser.java
(original)
+++
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/AnnotationParser.java
Tue Apr 7 13:34:33 2015
@@ -28,63 +28,66 @@ import org.apache.aries.transaction.TxCo
import org.apache.aries.transaction.annotations.Transaction;
import org.osgi.service.blueprint.reflect.BeanMetadata;
+/**
+ * Adds the transactional interceptor if Transaction annotation is present
+ * on bean class or superclasses.
+ */
public class AnnotationParser implements BeanProcessor {
- private final ComponentDefinitionRegistry cdr;
- private final Interceptor interceptor;
- private final TxComponentMetaDataHelper helper;
-
- public AnnotationParser(ComponentDefinitionRegistry cdr, Interceptor i,
TxComponentMetaDataHelper helper) {
- this.cdr = cdr;
- this.interceptor = i;
- this.helper = helper;
- }
-
- public void afterDestroy(Object arg0, String arg1) {
- // TODO Auto-generated method stub
-
- }
-
- public Object afterInit(Object arg0, String arg1, BeanCreator arg2,
- BeanMetadata arg3) {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void beforeDestroy(Object arg0, String arg1) {
- // TODO Auto-generated method stub
-
- }
-
- public Object beforeInit(Object arg0, String arg1, BeanCreator arg2,
- BeanMetadata arg3) {
- Class<?> c = arg0.getClass();
- boolean interceptorAssigned = false;
- while(c != Object.class) {
- for(Method m : c.getDeclaredMethods()) {
- int modifiers = m.getModifiers();
- if((modifiers & Constants.BANNED_MODIFIERS) != 0)
- throw new
IllegalArgumentException(Constants.MESSAGES.getMessage("private.or.static.method",
m));
- Transaction t = m.getAnnotation(Transaction.class);
- if(t != null &&
helper.getComponentMethodTxAttribute(arg3, m.getName()) == null) {
- helper.setComponentTransactionData(cdr, arg3,
t.value(), m.getName());
-
- outer: if(!!!interceptorAssigned) {
- for(Interceptor i :
cdr.getInterceptors(arg3)) {
- if(i == interceptor) {
- interceptorAssigned =
true;
- break outer;
- }
- }
- cdr.registerInterceptorWithComponent(arg3,
interceptor);
- interceptorAssigned = true;
- }
- }
-
- }
+ private final ComponentDefinitionRegistry cdr;
+ private final Interceptor interceptor;
+ private final TxComponentMetaDataHelper helper;
+
+ public AnnotationParser(ComponentDefinitionRegistry cdr, Interceptor i,
TxComponentMetaDataHelper helper) {
+ this.cdr = cdr;
+ this.interceptor = i;
+ this.helper = helper;
+ }
+
+ public void afterDestroy(Object arg0, String arg1) {
+ }
+
+ public Object afterInit(Object arg0, String arg1, BeanCreator arg2,
BeanMetadata arg3) {
+ return null;
+ }
+
+ public void beforeDestroy(Object arg0, String arg1) {
+ }
+
+ public Object beforeInit(Object bean, String beanName, BeanCreator
beanCreator, BeanMetadata beanData) {
+ Class<?> c = bean.getClass();
+ boolean interceptorAssigned = isInterceptorAssigned(beanData);
+ while (c != Object.class) {
+ for (Method m : c.getDeclaredMethods()) {
+ Transaction t = m.getAnnotation(Transaction.class);
+ if (t != null &&
helper.getComponentMethodTxAttribute(beanData, m.getName()) == null) {
+ assertAllowedModifier(m);
+ helper.setComponentTransactionData(cdr, beanData,
t.value(), m.getName());
+ if (!interceptorAssigned) {
+ cdr.registerInterceptorWithComponent(beanData,
interceptor);
+ interceptorAssigned = true;
+ }
+ }
+
+ }
c = c.getSuperclass();
- }
- return arg0;
- }
+ }
+ return bean;
+ }
+
+ private boolean isInterceptorAssigned(BeanMetadata beanData) {
+ for (Interceptor i : cdr.getInterceptors(beanData)) {
+ if (i == interceptor) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void assertAllowedModifier(Method m) {
+ int modifiers = m.getModifiers();
+ if ((modifiers & Constants.BANNED_MODIFIERS) != 0)
+ throw new
IllegalArgumentException(Constants.MESSAGES.getMessage("private.or.static.method",
m));
+ }
}
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=1671842&r1=1671841&r2=1671842&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
Tue Apr 7 13:34:33 2015
@@ -27,9 +27,9 @@ import org.osgi.service.blueprint.contai
*/
public class TxBlueprintListener implements BlueprintListener {
- private final TxElementHandler handler;
+ private final TxNamespaceHandler handler;
- public TxBlueprintListener(TxElementHandler handler) {
+ public TxBlueprintListener(TxNamespaceHandler handler) {
this.handler = handler;
}
Copied:
aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java
(from r1671812,
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/TxNamespaceHandler.java?p2=aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxNamespaceHandler.java&p1=aries/trunk/transaction/transaction-blueprint/src/main/java/org/apache/aries/transaction/parsing/TxElementHandler.java&r1=1671812&r2=1671842&rev=1671842&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/TxNamespaceHandler.java
Tue Apr 7 13:34:33 2015
@@ -21,6 +21,7 @@ package org.apache.aries.transaction.par
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;
@@ -49,16 +50,28 @@ import org.slf4j.LoggerFactory;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-public class TxElementHandler implements NamespaceHandler {
+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";
- public static final String INTERCEPTOR_BLUEPRINT_ID =
"interceptor.blueprint.id";
+ private static final String INTERCEPTOR_BLUEPRINT_ID =
"interceptor.blueprint.id";
- private static final Logger LOGGER =
LoggerFactory.getLogger(TxElementHandler.class);
+ private static final Logger LOGGER =
LoggerFactory.getLogger(TxNamespaceHandler.class);
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() {
+ schemaMap = new HashMap<String, String>();
+ schemaMap.put("http://aries.apache.org/xmlns/transactions/v1.0.0",
"transactionv10.xsd");
+ schemaMap.put("http://aries.apache.org/xmlns/transactions/v1.1.0",
"transactionv11.xsd");
+ schemaMap.put("http://aries.apache.org/xmlns/transactions/v1.2.0",
"transactionv12.xsd");
+ }
private void parseElement(Element elt, ComponentMetadata cm, ParserContext
pc)
{
@@ -79,12 +92,12 @@ public class TxElementHandler implements
// don't register components if we have no bundle (= dry parse)
if (blueprintBundle != null) {
registered.put(cdr, blueprintBundle);
- TransactionPropagationType value =
getType(elt.getAttribute(Constants.VALUE));
- String method = elt.getAttribute(Constants.METHOD);
+ TransactionPropagationType value =
getType(elt.getAttribute(VALUE));
+ String method = elt.getAttribute(METHOD);
if (cm == null) {
// if the enclosing component is null, then we assume this
is the top element
- String bean = elt.getAttribute(Constants.BEAN);
+ String bean = elt.getAttribute(BEAN);
registerComponentsWithInterceptor(cdr, bean);
metaDataHelper.populateBundleWideTransactionData(pc.getComponentDefinitionRegistry(),
@@ -101,10 +114,10 @@ public class TxElementHandler implements
Node n = elt.getChildNodes().item(0);
if(n == null || Boolean.parseBoolean(n.getNodeValue())) {
//We need to register a bean processor to add annotation-based
config
-
if(!!!cdr.containsComponentDefinition(Constants.ANNOTATION_PARSER_BEAN_NAME)) {
+
if(!!!cdr.containsComponentDefinition(ANNOTATION_PARSER_BEAN_NAME)) {
MutablePassThroughMetadata mptmd =
pc.createMetadata(MutablePassThroughMetadata.class);
- mptmd.setId(Constants.ANNOTATION_PARSER_BEAN_NAME);
+ mptmd.setId(ANNOTATION_PARSER_BEAN_NAME);
mptmd.setObject(new AnnotationParser(cdr, interceptor,
metaDataHelper));
cdr.registerComponentDefinition(mptmd);
}
@@ -134,16 +147,10 @@ public class TxElementHandler implements
return null;
}
- public URL getSchemaLocation(String arg0)
+ public URL getSchemaLocation(String namespaceUri)
{
- if (Constants.TRANSACTION10URI.equals(arg0)) {
- return this.getClass().getResource(Constants.TX10_SCHEMA);
- } else if (Constants.TRANSACTION11URI.equals(arg0)) {
- return this.getClass().getResource(Constants.TX11_SCHEMA);
- } else if (Constants.TRANSACTION12URI.equals(arg0)) {
- return this.getClass().getResource(Constants.TX12_SCHEMA);
- }
- return null;
+ String xsdPath = schemaMap.get(namespaceUri);
+ return xsdPath != null ? this.getClass().getResource(xsdPath) : null;
}
public final void setTxMetaDataHelper(TxComponentMetaDataHelper
transactionEnhancer)
@@ -154,7 +161,7 @@ public class TxElementHandler implements
public final void setBlueprintContainer(BlueprintContainer container)
{
String id = DEFAULT_INTERCEPTOR_ID;
- InputStream is =
TxElementHandler.class.getResourceAsStream("/provider.properties");
+ InputStream is =
TxNamespaceHandler.class.getResourceAsStream("/provider.properties");
if (is != null) {
try {
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=1671842&r1=1671841&r2=1671842&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 Apr 7 13:34:33 2015
@@ -38,7 +38,7 @@
</service-properties>
</service>
- <bean id="nsHandler"
class="org.apache.aries.transaction.parsing.TxElementHandler">
+ <bean id="nsHandler"
class="org.apache.aries.transaction.parsing.TxNamespaceHandler">
<property ref="txenhancer" name="txMetaDataHelper"/>
<property name="blueprintContainer" ref="blueprintContainer" />
</bean>
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=1671842&r1=1671841&r2=1671842&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 Apr 7 13:34:33 2015
@@ -26,6 +26,7 @@ import org.apache.aries.blueprint.Compon
import org.apache.aries.blueprint.PassThroughMetadata;
import org.apache.aries.transaction.annotations.TransactionPropagationType;
import org.apache.aries.transaction.parsing.AnnotationParser;
+import org.apache.aries.transaction.parsing.TxNamespaceHandler;
import org.apache.aries.transaction.pojo.AnnotatedPojo;
import org.junit.Test;
import org.osgi.service.blueprint.reflect.BeanMetadata;
@@ -44,7 +45,7 @@ public class AnnotationEnablingNameSpace
assertNull(txenhancer.getComponentMethodTxAttribute(compTop,
"increment"));
- PassThroughMetadata pmd = (PassThroughMetadata)
cdr.getComponentDefinition(Constants.ANNOTATION_PARSER_BEAN_NAME);
+ PassThroughMetadata pmd = (PassThroughMetadata)
cdr.getComponentDefinition(TxNamespaceHandler.ANNOTATION_PARSER_BEAN_NAME);
assertNotNull(pmd);
AnnotationParser parser = (AnnotationParser) pmd.getObject();
@@ -66,7 +67,7 @@ public class AnnotationEnablingNameSpace
assertNull(txenhancer.getComponentMethodTxAttribute(compTop,
"increment"));
- PassThroughMetadata pmd = (PassThroughMetadata)
cdr.getComponentDefinition(Constants.ANNOTATION_PARSER_BEAN_NAME);
+ PassThroughMetadata pmd = (PassThroughMetadata)
cdr.getComponentDefinition(TxNamespaceHandler.ANNOTATION_PARSER_BEAN_NAME);
assertNull(pmd);
}
}
Modified:
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationParserTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationParserTest.java?rev=1671842&r1=1671841&r2=1671842&view=diff
==============================================================================
---
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationParserTest.java
(original)
+++
aries/trunk/transaction/transaction-blueprint/src/test/java/org/apache/aries/transaction/AnnotationParserTest.java
Tue Apr 7 13:34:33 2015
@@ -28,6 +28,7 @@ import org.apache.aries.blueprint.Compon
import org.apache.aries.blueprint.Interceptor;
import org.apache.aries.blueprint.mutable.MutableBeanMetadata;
import org.apache.aries.blueprint.reflect.BeanMetadataImpl;
+import org.apache.aries.transaction.TxComponentMetaDataHelper;
import org.apache.aries.transaction.annotations.TransactionPropagationType;
import org.apache.aries.transaction.parsing.AnnotationParser;
import org.apache.aries.transaction.pojo.AnnotatedPojo;
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=1671842&r1=1671841&r2=1671842&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 Apr 7 13:34:33 2015
@@ -37,7 +37,7 @@ import org.apache.aries.blueprint.parser
import org.apache.aries.blueprint.reflect.PassThroughMetadataImpl;
import org.apache.aries.mocks.BundleContextMock;
import org.apache.aries.mocks.BundleMock;
-import org.apache.aries.transaction.parsing.TxElementHandler;
+import org.apache.aries.transaction.parsing.TxNamespaceHandler;
import org.apache.aries.unittest.mocks.MethodCall;
import org.apache.aries.unittest.mocks.Skeleton;
import org.junit.After;
@@ -50,7 +50,7 @@ public class BaseNameSpaceHandlerSetup {
protected Bundle b;
protected NamespaceHandlerRegistry nhri;
protected TxComponentMetaDataHelperImpl txenhancer;
- protected TxElementHandler namespaceHandler;
+ protected TxNamespaceHandler namespaceHandler;
@Before
public void setUp() {
@@ -66,11 +66,11 @@ public class BaseNameSpaceHandlerSetup {
txinterceptor.setTransactionManager(tm);
txinterceptor.setTxMetaDataHelper(txenhancer);
- namespaceHandler = new TxElementHandler();
+ namespaceHandler = new TxNamespaceHandler();
BlueprintContainer container =
Skeleton.newMock(BlueprintContainer.class);
Skeleton.getSkeleton(container).setReturnValue(
- new MethodCall(BlueprintContainer.class,
"getComponentInstance", TxElementHandler.DEFAULT_INTERCEPTOR_ID),
+ new MethodCall(BlueprintContainer.class,
"getComponentInstance", TxNamespaceHandler.DEFAULT_INTERCEPTOR_ID),
txinterceptor);
namespaceHandler.setBlueprintContainer(container);
namespaceHandler.setTxMetaDataHelper(txenhancer);
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=1671842&r1=1671841&r2=1671842&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 Apr 7 13:34:33 2015
@@ -36,5 +36,6 @@ public class BadlyAnnotatedPojo2 {
return null;
}
+ @Transaction
public static void alsoDoesNotWork() {}
}