Advanced Roadmaps for Jira is disabled and the Plans tab is missing

Still need help?

The Atlassian Community is here for you.

Ask the community

Platform Notice: Data Center - This article applies to Atlassian products on the Data Center platform.

Note that this knowledge base article was created for the Data Center version of the product. Data Center knowledge base articles for non-Data Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

The purpose of this knowledge article is to describe a scenario where the Plans tab is missing due to the fact that the application Advanced Roadmaps For Jira is disabled, and how to fix it.

Normally, when Advanced Roadmaps For Jira is enabled, the Plans tab should be visible in the top bar menu as illustrated below:

However, in the scenario described in this article, the Plans tab is missing:

Other Known Root Causes

There are other known scenarios where the Plans tab will be missing:

  • Root Cause 1: The Jira Software Application is not installed in the page ⚙ > Applications > Versions & Licenses
    • From the Jira Software (JSW) version 8.15.0, the Advanced Roadmaps application is bundled with Jira.
    • If JSW is not installed, then all the Advanced Roadmaps functionalities including the Plans tab will be missing
  • Root Cause 2: The Jira Software application is disabled

Once you verified that neither Root Cause listed below is relevant, then you can go through the diagnosis steps from this article.


Environment

Jira Software on Server/Data Center on any version from 8.15.0.

Diagnosis

  • When going to the page ⚙ > Manage Apps > Manage Apps and searching for "Roadmaps" using the "All Apps" filter, we can see that the app Advanced Roadmaps for Jira is disabled:
  • When clicking on the link XX or YY modules enabled next to this app, we can see that all the modules are disabled and that they can't be enabled from the UI (there is no button available to enable them):
  • The behavior can be intermittent, meaning that:
    • after some Jira startups, the problem might not happen (and the Advanced Roadmaps for Jira app might be enabled)
    • after some other Jira startups, the problem will happen (and the app will be disabled)
  • No row is returned when running either of the 3 SQL queries below, which indicates that none of the Advanced Roadmaps component was disabled from the Database (via the pluginstate table):

    select * from pluginstate where pluginkey like '%com.atlassian.jpo%' and pluginenabled = 'false';
    select * from pluginstate where pluginkey like '%com.radiantminds.roadmaps%' and pluginenabled = 'false';
    select * from pluginstate where pluginkey like '%com.atlassian.teams%' and pluginenabled = 'false';
  • Checking the Jira logs, we can see the error and failure listed below:
    • An error showing that Jira was unable to create an Application Context for the class com.radiantminds.roadmaps-jira, which belongs to Advanced Roadmaps for Jira:

      2024-05-22 13:13:56,992+0000 ThreadPoolAsyncTaskExecutor::Thread 12 ERROR      [o.e.g.b.e.i.dependencies.startup.DependencyWaiterApplicationContextExecutor] Unable to create application context for [com.radiantminds.roadmaps-jira], unsatisfied dependencies: none
      org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'exportedSyncService': Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'portfolioActiveObjectsWorkItemPersistence': Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jiraWorkItemExtension': Unsatisfied dependency expressed through constructor parameter 7; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.DefaultIssueLinkServiceBridgeProxy': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.IssueLinkServiceBridgeImpl': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atlassian.jira.config.properties.ApplicationProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value="")}
      	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
      	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
      	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
      	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
      	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:921)
      	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:57)
      	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:322)
      	at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
      	at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:287)
      	at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137)
      	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      	at java.base/java.lang.Thread.run(Thread.java:829)
      Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'portfolioActiveObjectsWorkItemPersistence': Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jiraWorkItemExtension': Unsatisfied dependency expressed through constructor parameter 7; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.DefaultIssueLinkServiceBridgeProxy': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.IssueLinkServiceBridgeImpl': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atlassian.jira.config.properties.ApplicationProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value="")}
      	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
      	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
      	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
      	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
      	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
      	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
      	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
      	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
      	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
      	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
      	... 19 more
    • A failed plugin report showing that Jira failed to load Advanced Roadmaps for Jira at startup:

          ********************************************************************************************************************************************************************************************************
          ___ FAILED PLUGIN REPORT _____________________
          
          3 plugins failed to load during Jira startup.
          
          	'com.radiantminds.roadmaps-jira' - 'Advanced Roadmaps for Jira'  failed to load.
          		Error creating bean with name 'exportedSyncService': Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'portfolioActiveObjectsWorkItemPersistence': Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jiraWorkItemExtension': Unsatisfied dependency expressed through constructor parameter 7; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.DefaultIssueLinkServiceBridgeProxy': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.IssueLinkServiceBridgeImpl': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atlassian.jira.config.properties.ApplicationProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value="")}
          			Error creating bean with name 'portfolioActiveObjectsWorkItemPersistence': Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jiraWorkItemExtension': Unsatisfied dependency expressed through constructor parameter 7; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.DefaultIssueLinkServiceBridgeProxy': Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.atlassian.rm.common.bridges.jira.issue.link.IssueLinkServiceBridgeImpl': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atlassian.jira.config.properties.ApplicationProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@com.atlassian.plugin.spring.scanner.annotation.imports.ComponentImport(value="")}
          	
          	...
          
          		It was loaded from /var/atlassian/application-data/jira/plugins/installed-plugins/jira-portfolio-9.4.20.jar

Cause

The Jira application failed to load the Advanced Roadmap modules during startup time, due to some class dependency issue caused by incompatible jar files which are located in the <Jira_home>/plugins/installed-plugins directory (or the <Jira_shared_home>/plugins/installed-plugins directory, in case of a cluster of nodes).

The problematic JAR files might be coming from various sources:

  • 3rd party add-ons coming from the Atlassian Marketplace
  • Custom add-ons developed in house by customers
  • Some duplicate/old versions of jar files coming from Jira Software of Jira Service Management. This can happen when the ZDU upgrade method is used to upgrade Jira, as explained in the feature request https://jira.atlassian.com/browse/JRASERVER-72717

It is unfortunately difficult to pin point the exact add-ons (or jar files) that are causing the dependency problem, since various add-ons can load various classes and any of these classes could cause the issue.

The reason why the issue might be intermittent is because, whenever Jira is restarted, different add-ons might be loaded in different order (this order is random): depending on which add-on was loaded before Jira tries to load the Advanced Roadmaps for Jira app, the dependency issue might or might not occur, and Jira might or might not be able to load this app.

Solution

This solution consists into 3 main steps:

  • The Main Step 1 and 2 need to be performed on a Test/Clone Jira application
  • The Main Step 3 needs to be performed on the Production Jira application

Main Step 1 - Bringing back Advanced Roadmaps into a stable state on the Clone Jira instance

The 1st main step consists in bringing Advanced Roadmaps for Jira back into a stable state in the Clone Jira instance:

  1. Go to the page ⚙ > Manage Apps > Manage Apps and take notes of all the 3rd party add-ons that are installed in your Jira application
    1. (info) This step is very important, since the workaround consists in removing all add-ons from the home folder and re-installing them 1 by 1
  2. Stop the Jira application (or all the Jira nodes in case of a cluster)
  3. Rename the folder <Jira_home>/plugins/installed-plugins (or the folder <Jira_shared_home>/plugins/installed-plugins in case of a cluster of nodes)
    1. (info) This step will force Jira to re-create the installed-plugins folder without any 3rd party add-on nor application
    2. (info) If you are using both Jira Software and Jira Service Management (JSM) together, one of these 2 applications will have to be re-installed from the UI
  4. Start the Jira application (or all the Jira nodes in case of a cluster)
  5. Go to the page ⚙ > Applications > Versions & Licenses 
    1. If you had Jira Software and JSM installed together before following the steps 2-3-4, one of these 2 apps might be missing from this page (depending on which application was installed first). Make sure to re-install from this page the missing application.
  6. Go to the page ⚙ > Manage Apps > Manage Apps and make sure that Advanced Roadmaps for Jira is now showing as enabled
  7. Verify that the Plans tab is now showing in the top bar menu

Main Step 2 - Identifying the problematic jar file(s) on the Clone Jira instance

Just like for Main Step 1, these steps need to be executed in the Clone Jira instance.

Now that we have an application that is functioning properly, we need to figure out what jar file or add-on was causing the issue. Otherwise, the problem might occur again later if we re-install the same add-ons that were there prior to Main Step 1.

Note that there is no easy way to identify which add-on was causing the issue in the 1st place. This is the reason why these steps can be quite tedious and time consuming (therefore the necessity to perform them on a Test Jira instance).

Here are the steps:

  1. Install one 3rd party add-on at a time via the page ⚙ > Manage Apps > Find new apps
  2. After installing each add-on:
    1. Re-start the Jira application a couple times, and make sure that each time, Advanced Roadmaps for Jira is showing as enabled in the page ⚙ > Manage Apps > Manage Apps. (warning) Note that it is important that you re-start the Jira application a few times, because the issue tends to be intermittent and might not be replicable after each re-start.
    2. If after a re-start, Advanced Roadmaps for Jira is showing as disabled:
      1. It means that the add-on that was installed last was one of the problematic add-on that was causing the issue
      2. Take note of this add-on and un-install it
    3. Move on to the next add-on

After you completed these steps, take notes of all the add-ons that had to remain un-installed to make sure that Advanced Roadmaps for Jira remains enabled after each Jira re-start.

(info) If after re-installing all the 3rd party add-ons, the issue is not replicable after multiple Jira restarts, then it means that the problem was not caused by a 3rd party/custom add-on, but by some left over of old jar files coming from older Jira or JSM installations.

Main Step 3 - Fixing the issue on the production Jira instance

These steps will be executed in the production Jira instance:

  1. Stop the Jira application (or all the Jira nodes in case of a cluster)
  2. Navigate to the folder <Jira_home>/plugins/installed-plugins (or the folder <Jira_shared_home>/plugins/installed-plugins in case of a cluster)
  3. Rename this folder to anything else (in order to keep a backup of that folder)
  4. Copy the entire folder <Jira_home>/plugins/installed-plugins (or <Jira_shared_home>/plugins/installed-plugins) from the Clone Jira instance into the Production Jira instance
  5. Start the Jira application (or all the Jira nodes in case of a cluster)
  6. Go to the page ⚙ > Manage Apps > Manage Apps and make sure that Advanced Roadmaps for Jira is now showing as enabled
  7. Verify that the Plans tab is now showing in the top bar menu

For the 3rd party add-ons that you had to remove from the installed-plugins folder to resolve this issue, we recommend reaching our to the respective add-on support teams if you still need to use them, since these are not supported by Atlassian.


Last modified on Aug 28, 2024

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.