Uploaded image for project: 'Jira Software Data Center'
  1. Jira Software Data Center
  2. JSWSERVER-25972

Advanced Roadmaps for Jira is disabled due to class dependency issues caused by custom jar files

      Issue Summary

      In some cases, the Advanced Roadmap application fails to be loaded at Jira startup due class dependency errors, and as a result:

      • The Advanced Roadmaps for Jira application is disabled and can't be enabled from the UI
      • All Advanced Roadmaps features are missing, such as the Plans tab (which is normally listed in the Top Bar menu)

      Environment

      • This issue is usually observed after an upgrade to Jira Software 9.4.x or 9.12.x.
      • This issue is not replicable in a fresh vanilla Jira Software installation. However, it is replicable by customers who are using in house custom plugins

      Steps to replicate

      • Install a fresh vanilla Jira Software 9.12.6 application
      • Observe that the Advanced Roadmaps is enabled (in Manage Apps), and that the Plans tab is listed in the Top Bar menu
      • Add some custom jar files to the folder <JIRA_HOME>/plugins/installed-plugins/
      • Restart the Jira application

      Expected results

      In most cases, the Advanced Roadmaps app is successfully loaded at Jira startup

      Actual results

      In some cases, the following happens:

      • The Advanced Roadmaps for Jira application is disabled and can't be enabled from the UI
      • The following errors can be found in the Jira logs during startup time:
        • Error 1
          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
          
        • Error 2
              ********************************************************************************************************************************************************************************************************
              ___ 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.12.6.jar
          

      Workaround

      To fix this issue, it is necessary to identify which jar file(s) is/are causing the dependency issue at Jira startup.

      Please refer to the KB article Advanced Roadmaps for Jira is disabled and the Plans tab is missing for the detailed steps on how to achieve this.

      Notes

      • Even though the "bug" is not replicable in a fresh vanilla Jira application, Jira should still find a way to load all the Jar files successfully despite the class dependency issues
      • This bug ticket was raised for Advanced Roadmap, but this type of "class dependency" issue can also affect the loading of other applications/plugins such as Jira Service Management
      • When a customer is impacted by this issue, the issue is usually intermittent: sometimes Advanced Roadmap is successfully loaded, sometimes it is not. It depends on which order the jar files are loaded at Jira startup (and this order is random)

        1. ARJ_Disabled.png
          ARJ_Disabled.png
          484 kB
        2. PLanTabMissing.png
          PLanTabMissing.png
          134 kB
        3. PlanTabNotMissing.png
          PlanTabNotMissing.png
          120 kB

            [JSWSERVER-25972] Advanced Roadmaps for Jira is disabled due to class dependency issues caused by custom jar files

            There are no comments yet on this issue.

              Unassigned Unassigned
              jrey Julien Rey
              Affected customers:
              2 This affects my team
              Watchers:
              8 Start watching this issue

                Created:
                Updated: