Proper way to use Active Objects in Jira 7.2.2 plugin

shashank_sanjay March 19, 2017

Hello,

I am trying to build a JIRA 7.2.2 plugin that uses Active Objects to store some json and other data. Before getting to save operations though, I get this error:

[INFO] [talledLocalContainer] com.atlassian.activeobjects.internal.ActiveObjectsInitException: bundle [com.seguira.jira.
seguira-test-automation-for-jira-plugin]
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiv
eObjects.java:95)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiv
eObjects.java:86)
[INFO] [talledLocalContainer]   at com.atlassian.sal.core.executor.ThreadLocalDelegateCallable.call(ThreadLocalDelegateC
allable.java:38)
[INFO] [talledLocalContainer]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[INFO] [talledLocalContainer]   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[INFO] [talledLocalContainer]   at java.lang.Thread.run(Thread.java:745)
[INFO] [talledLocalContainer] Caused by: java.lang.RuntimeException: Circular dependency detected
[INFO] [talledLocalContainer]   at net.java.ao.schema.SchemaGenerator.parseDDL(SchemaGenerator.java:143)
[INFO] [talledLocalContainer]   at net.java.ao.schema.SchemaGenerator.generateImpl(SchemaGenerator.java:106)
[INFO] [talledLocalContainer]   at net.java.ao.schema.SchemaGenerator.migrate(SchemaGenerator.java:84)
[INFO] [talledLocalContainer]   at net.java.ao.EntityManager.migrate(EntityManager.java:128)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.internal.EntityManagedActiveObjects.migrate(EntityManaged
ActiveObjects.java:51)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.internal.AbstractActiveObjectsFactory$1.doInTransaction(A
bstractActiveObjectsFactory.java:72)
[INFO] [talledLocalContainer]   at com.atlassian.sal.core.transaction.HostContextTransactionTemplate$1.doInTransaction(H
ostContextTransactionTemplate.java:21)
[INFO] [talledLocalContainer]   at com.atlassian.jira.DefaultHostContextAccessor.doInTransaction(DefaultHostContextAcces
sor.java:34)
[INFO] [talledLocalContainer]   ... 2 filtered
[INFO] [talledLocalContainer]   at java.lang.reflect.Method.invoke(Method.java:498)
[INFO] [talledLocalContainer]   at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextCl
assLoaderSettingInvocationHandler.java:26)
[INFO] [talledLocalContainer]   at com.sun.proxy.$Proxy125.doInTransaction(Unknown Source)
[INFO] [talledLocalContainer]   ... 2 filtered
[INFO] [talledLocalContainer]   at java.lang.reflect.Method.invoke(Method.java:498)
[INFO] [talledLocalContainer]   at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvo
cationHandler.invoke(HostComponentFactoryBean.java:136)
[INFO] [talledLocalContainer]   at com.sun.proxy.$Proxy125.doInTransaction(Unknown Source)
[INFO] [talledLocalContainer]   at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContext
TransactionTemplate.java:18)
[INFO] [talledLocalContainer]   ... 2 filtered
[INFO] [talledLocalContainer]   at java.lang.reflect.Method.invoke(Method.java:498)
[INFO] [talledLocalContainer]   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java
:317)
[INFO] [talledLocalContainer]   at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doI
nvoke(ServiceInvoker.java:56)
[INFO] [talledLocalContainer]   at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.inv
oke(ServiceInvoker.java:60)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethod
Invocation.java:179)
[INFO] [talledLocalContainer]   at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(Delegatin
gIntroductionInterceptor.java:133)
[INFO] [talledLocalContainer]   at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIn
troductionInterceptor.java:121)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethod
Invocation.java:179)
[INFO] [talledLocalContainer]   at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeU
nprivileged(ServiceTCCLInterceptor.java:70)
[INFO] [talledLocalContainer]   at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(
ServiceTCCLInterceptor.java:53)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethod
Invocation.java:179)
[INFO] [talledLocalContainer]   at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke
(LocalBundleContextAdvice.java:57)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethod
Invocation.java:179)
[INFO] [talledLocalContainer]   at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(Delegatin
gIntroductionInterceptor.java:133)
[INFO] [talledLocalContainer]   at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIn
troductionInterceptor.java:121)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethod
Invocation.java:179)
[INFO] [talledLocalContainer]   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:2
07)
[INFO] [talledLocalContainer]   at com.sun.proxy.$Proxy870.execute(Unknown Source)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.internal.AbstractActiveObjectsFactory.create(AbstractActi
veObjectsFactory.java:72)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.internal.DelegatingActiveObjectsFactory.create(Delegating
ActiveObjectsFactory.java:32)
[INFO] [talledLocalContainer]   at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiv
eObjects.java:91)
[INFO] [talledLocalContainer]   ... 6 more

Here are the relevant pom.xml blocks, note i have only pasted relevant blocks, they are not under the same tag in my actual file:

<properties>
        <jira.version>7.2.2</jira.version>
        <amps.version>6.2.11</amps.version>
        <plugin.testrunner.version>1.2.3</plugin.testrunner.version>
        <!-- TestKit version 6.x for JIRA 6.x -->
        <testkit.version>6.3.11</testkit.version>
    </properties>
        <dependency>
            <groupId>com.atlassian.activeobjects</groupId>
            <artifactId>activeobjects-plugin</artifactId>
            <version>1.2.3</version>
            <scope>provided</scope>
        </dependency>

atlassian-plugin.xml

<ao key="ao-module">
      <description>The module configuring the Active Objects service used by this plugin</description>
      <entity>com.seguira.jira.plugin.ta.db.TestCase</entity>
      <entity>com.seguira.jira.plugin.ta.db.TestGraph</entity>
  </ao>
  <component-import key="applicationProperties," interface="com.atlassian.jira.config.properties.ApplicationProperties"/>
  <component-import key="ao" name="Active Objects components" interface="com.atlassian.activeobjects.external.ActiveObjects">
    <description>Access to the Active Objects service</description>
  </component-import>
  <component key="txnAnnotationProcessor" class="com.atlassian.activeobjects.external.TransactionalAnnotationProcessor"/>
  <component key="graphService" class="com.seguira.jira.plugin.ta.service.GraphServiceImpl">
      <description>Provides graph services.</description>
      <interface>com.seguira.jira.plugin.ta.service.GraphService</interface>
  </component>

GraphServiceImpl.java:

public class GraphServiceImpl implements GraphService{
    
    private final ActiveObjects ao;
    private final Logger LOGGER = Logger.getLogger(GraphServiceImpl.class.getName());
    
    public GraphServiceImpl(ActiveObjects ao) {
        this.ao = ao;
    }

And finally, the REST class:

@Path("/message")
public class GraphRest {

private final GraphService graphService;

public GraphRest(GraphService graphService)
{
this.graphService = graphService;
}

 

I appreciate the help, thanks!

2 answers

1 accepted

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

0 votes
Answer accepted
Andy Brook
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.
March 20, 2017

Its most likely your entities.

eException: Circular dependency detected

The one thing you don't show is the actual entity definitions.  If each refer to each other, that's probably the cause.

shashank_sanjay March 20, 2017

Yep, i found the answer this morning here: https://java.net/jira/browse/ACTIVEOBJECTS-33

 

I have a onetomany and had a setter. 

0 votes
Daniel Wester
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.
March 19, 2017

Well that's the stacktrace - what's the exception mmessage? Which ao version are you using?

 

did you add the ao configuration to the JIRA maven plugin?

You might want to ask the question over the new shiny Developer Community: https://community.developer.atlassian.com/

shashank_sanjay March 19, 2017

Hi Daniel,

The AO version is 1.2.3 as shown in the pom.xml excerpt. Both relevant plugin.xml and pom.xml snippets are pasted below the stacktrace. 

The error is just 500 server error. When looking at the network response or command line, it shows the stack trace

TAGS
AUG Leaders

Atlassian Community Events