It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage
Highlighted

What is the best way to store and access plugin data?

I have been exploring Jira plugin development for a while.

I have a scenario where I need to store user-specific data in the backend. Consider it a set of some Input fields(On right panel of view issue page), which asks some info from user and later displays it when user had saved it. I don't want to enclose input fields in <form></form> tag. I want to handle things via calling APIs(REST modules) via AJS. Please suggest best way to do this.

Even after going through various docs and examples I could not find a solid approach to do this, and still there is a bit of confusion.

For storing data, I could find two ways. I can use PluginSettingsFactory or ActiveObjects. Apparently, these two services cannot be used in REST modules(Correct me if I am wrong. It will solve my problem.)

I want to go via ActiveObjects approach. But I not sure whether I can use it in JIRA plugin because it is made for Generic Confluence apps.

Let's say if it is possible to use ActiveObjects in JIRA plugin. I am not sure how to call POST of servlet using AJS. Please suggest a way if there is any?

 

If ActiveObjects can't be used in JIRA plugin, I will anyways have to go with PluginSettingsFactory inside servlets because apparenly I cannot use PluginSettingsFactory in REST ModuleAgain, I will have to go via Servlet approach and I am not sure how to call POST of servlet using AJS.

I know there are too many questions in this post. 

Please suggest a way if there is any?

1 comment

Hey @imamudin naseem

Unfortunately it is hard to find one and the only right solution as each of these will have pros and cons :)

 

As you have found out there are at least two of them - PluginSettingsFactory and ActiveObjects. ActiveObjects is less constrained storage access which essentially gives you semi-direct access to the database. PluginSettingsFactory on the other hand requires none preparation on your end, but gives only simple key-value storage.

To fetch your data in front-end most likely you'll need to implement your own REST endpoint to control the data flow precisely as you want. Also it should be possible to use PluginSettingsFactory from REST endpoint.

Thanks @Maciej Nowakowski

I tried using PluginSettingsFactory inside Rest Module. Getting exception regarding dependency injection. Finding hard to understand dependency using @Scanned. 

I am stuck. It will be great if you could share link of some example that uses PluginSettingsFactory inside Rest Module.

@imamudin naseemit looks like you are having troubles with dependencies rather than using PluginSettingsFactory on it's own.

Here you'll find comprehensive manual for atlassian-plugin-scanner: https://bitbucket.org/atlassian/atlassian-spring-scanner/src/1.2.x/README.md?at=1.2.x&fileviewer=file-view-default (which is responsible for @Scanned annotation)

If you find it challenging to start with scanner you can use alternative method of providing dependencies:  https://developer.atlassian.com/server/jira/platform/component-import/

Essentially, all you need to do is add a component-import entry to your atlassian-plugin.xml file

 

Here's comprehensive howto: https://developer.atlassian.com/server/framework/atlassian-sdk/sal-code-samples/

@Maciej Nowakowski

Tried hands on component-import. Didn't work for me. 

Then Tried with atlassian-plugin-scanner. Breaking my head since hours, still no luck.

It will be great if you could fix dependecy injection in MyRestResource.java in below repo

https://github.com/minaseem/jiraPlugin

 

Thanks

Just to add about injecting PluginSettingsFactory via component-import (followed https://developer.atlassian.com/server/framework/atlassian-sdk/sal-code-samples/), I got below exception 

Unsatisfied dependency expressed through constructor argument with index 0 of type [com.atlassian.sal.api.pluginsettings.PluginSettingsFactory]: No qualifying bean of type [com.atlassian.sal.api.pluginsettings.PluginSettingsFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.atlassian.sal.api.pluginsettings.PluginSettingsFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

@imamudin naseem, I have managed to make your skeleton working: https://github.com/minaseem/jiraPlugin/pull/1

I was trying to keep commits meaningful, separating required changes.

Along the way I have also updated atlassian-spring-scanner to 2.x which also simplifies configuration. Docs: https://bitbucket.org/atlassian/atlassian-spring-scanner/src

@Maciej Nowakowski,
Thanks for doing code changes. 

I applied your changes locally and while resolving dependencies, it says

Dependency '''com.atlassian.plugin:atlassian-spring-scanner-annotation:2.1.3''' not found less... (⌘F1) 
Inspects a Maven model for resolution problems.  

Comment

Log in or Sign up to comment
TAGS

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you