@Transactional annotation / atlassian spring scanner?

arno schumacher May 12, 2016

There is a section in

https://developer.atlassian.com/docs/atlassian-platform-common-components/active-objects/getting-started-with-active-objects

describing how to set up a spring BeanPostProcessor wrapping all components having a @Transactional annotation with a TX-Proxy.

Is there a similar construct to do that stuff with Atlassian Spring Scanner?

Example: 

atlasian-pluginx.xml

<component
   key="tx-processor"
   name="Transactional Annotation Processor" 
   class="com.atlassian.activeobjects.external.TransactionalAnnotationProcessor">
  <decription>Processes @Transactional annotations.</decription>
</component>

 

code:
@Transactional
public interface TestStepService {
 TestStep findById(int testStepId);
 TestStep updateTestStep(TestStep testStep)
}

 

2 answers

1 accepted

3 votes
Answer accepted
arno schumacher May 12, 2016

(1) Remove any ComponentImport annotations from ActiveObjects


// AO is imported via META-INF/spring/plugin-context.xml
// @ComponentImport
com.atlassian.activeobjects.external.ActiveObjects ao;

(2) Configure TransactionalAnnotationProcessor in META-INF/spring/plugin-context.xml descriptor

<beans
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:atlassian-scanner="http://www.atlassian.com/schema/atlassian-scanner"
xmlns="http://www.springframework.org/schema/beans"
xmlns:osgi="http://www.eclipse.org/gemini/blueprint/schema/blueprint"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.atlassian.com/schema/atlassian-scanner http://www.atlassian.com/schema/atlassian-scanner/atlassian-scanner.xsd
http://www.eclipse.org/gemini/blueprint/schema/blueprint http://www.eclipse.org/gemini/blueprint/schema/blueprint/gemini-blueprint.xsd">
<osgi:reference id="ao_osgi">
<osgi:interfaces>
<beans:value>com.atlassian.activeobjects.external.ActiveObjects</beans:value>
</osgi:interfaces>
</osgi:reference>
<beans:bean id="tx-processor" class="com.atlassian.activeobjects.external.TransactionalAnnotationProcessor">
<beans:constructor-arg ref="ao_osgi"/>
</beans:bean>
<atlassian-scanner:scan-indexes/>
</beans>
Oliver Straesser May 19, 2016

really? why Atlassian makes this so complicated now - in comparison with the atplassian-pligin.xml style? 

Is there a docu where you found this, because the scanner docu is missing of explicit examples :-/?

arno schumacher May 19, 2016

There might be some better solution for the problem, but I had no time for further investigations.

Unfortunately I can't point you directly to an appropriate documentation. 

You have to dive into the documentation of the underlying framework stack sad to get some knowledge what is happening behind the scenes. 

You may look for BeanPostProcessor in the spring documentation to get some basic understanding how the TX Annotation is working and then check the Atlassian documentation

 

4 votes
Panos
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
August 18, 2017

I'll leave it here, it might help somenone:

Keep @ComponentImport and add only

<bean class="com.atlassian.activeobjects.external.TransactionalAnnotationProcessor">
<constructor-arg ref="activeObjects"/>
</bean>

 in the plugin-context.xml.

Works with ao v.1.4.0, atlassian-scanner v1.2.7

developerrespig October 29, 2018

Thank you very much, that just solved a problem that I currently had.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events