Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Next challenges

Recent achievements

  • Global
  • Personal


  • Give kudos
  • Received
  • Given


  • Global

Trophy case

Kudos (beta program)

Kudos logo

You've been invited into the Kudos (beta program) private group. Chat with others in the program, or give feedback to Atlassian.

View group

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

Object Initialization/Dependency Injection Inside a Jira Service Edited

Hi everyone, I'm writing a custom Jira plugin of type Service.

I have

public class ENGSLAService extends AbstractService {

private JqlQueryParser jqlQueryParser;

private SearchService searchService;

private InsightReader insightReader;

public ENGSLAService(JqlQueryParser jqlQueryParser, SearchService searchService) {

this.jqlQueryParser = jqlQueryParser;
this.searchService = searchService;
this.insightReader = ComponentAccessor.getOSGiComponentInstanceOfType(InsightReader.class);
log.warn("insightReader is " + insightReader);


public class InsightReader {

private ObjectFacade objectFacade;
private IQLFacade iqlFacade;



Basically I don't know how I can initialize a InsightReader's object inside my ENGSLAService constructor. I tryied different arrangements with annotations and non-empty constructor in InsightReader's class but nothing seems to work. Sometimes I get a PicoContainer Exception, sometimes (like for the above code) the object of type InsightReader is null after invoking ComponentAccessor.getOSGiComponentInstanceOfType. I probably messed up with Spring/OSGi annotations. Could you please suggest how to make it work?

Thank you


1 answer

Hi @Giorgia Fineschi did you try to annotate InsightReader wIth @Named annotation? 

@Giorgia Fineschi did you solve the problem? :)

Hi Martin,

I did it another way:

public ENGSLAService(JqlQueryParser jqlQueryParser, SearchService searchService) {

this.jqlQueryParser = jqlQueryParser;
this.searchService = searchService;
this.pluginSettings = null;

try {
Class objectFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().loadClass("");
Class iqlFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().loadClass("");
ObjectFacade objectFacade = (ObjectFacade) ComponentAccessor.getOSGiComponentInstanceOfType (objectFacadeClass);
IQLFacade iQLFacade = (IQLFacade) ComponentAccessor.getOSGiComponentInstanceOfType (iqlFacadeClass);
this.insightReader = new InsightReader (objectFacade,iQLFacade);
} catch (ClassNotFoundException e) {
log.error("Cannot initialize InsightReader Object", e);

try {
Class pluginSettingsFactoryClass = ComponentAccessor.getPluginAccessor().getClassLoader().loadClass("com.atlassian.sal.api.pluginsettings.PluginSettingsFactory");
pluginSettingsFactory = (PluginSettingsFactory) ComponentAccessor.getOSGiComponentInstanceOfType (pluginSettingsFactoryClass);
pluginSettings = pluginSettingsFactory.createSettingsForKey(ENGSLARESTServiceConfig.class.getName());

catch (ClassNotFoundException e) {
log.error("Cannot initialize PluginSettingsFactory Object", e);


Of course after adding this

public InsightReader(ObjectFacade objectFacade, IQLFacade iqlFacade) {
this.objectFacade = objectFacade;
this.iqlFacade = iqlFacade;


To InsightReader.

@Giorgia Fineschi ok, I hope it works for you. My best practice is to not to use ComponentAccessor if it is not necessary.

In my opinion, you should create InsightReader service as "service" or "component" with objectFacade and iqlFacade to be injected by OSGi.

It should be someting like:

import com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

public class InsightReader{

private final ObjetFacade objectFacade;
private final IQLFacade iqlFacade;

public InsightReader(@ComponentImport ObjectFacade objectFacade, @ComponentImport IQLFacade iqlFacade){
this.objectFacade = objectFacade;
this.iqlFacade = iqlFacade;


I know it's bad. I don't like using ComponentAccessor either but I had to make my code work and that workaround seems ok.

I'm still working on this project so I can refactor. However it will take me some time since I have to complete another part before making these changes. I'll let you know in the next weeks.

Sure, no problem :). Good luck with the project :)

Suggest an answer

Log in or Sign up to answer
Community showcase
Published in Marketplace Apps & Integrations

Why you should move agile planning to Lucidspark’s digital whiteboard

During my 17 years as a coach, mentor, and trainer of Agile teams, I’ve participated in hundreds of Agile planning meetings. The end result was a wall of backlog items annotated by an explosion of co...

116 views 0 5
Read article

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