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() {}
 }


Reply via email to