aries-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cschnei...@apache.org
Subject svn commit: r1671842 - in /aries/trunk/transaction/transaction-blueprint/src: main/java/org/apache/aries/transaction/ main/java/org/apache/aries/transaction/parsing/ main/resources/OSGI-INF/blueprint/ test/java/org/apache/aries/transaction/ test/java/o...
Date Tue, 07 Apr 2015 13:34:34 GMT
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() {}
 }



Mime
View raw message