Summary
Even though Crucible and Jira are integrated with each other through application links and it says "Connected" in both sides and the user has permissions to do so, no Create Issue link is displayed in Crucible review comments
Environment
- Crucible 4.4.5 integrated with Jira 7.6.0
- No proxy
- No SSL
- Using PostgreSQL 9.4 in Crucible with the bundled drivers
Steps to Reproduce
- Make sure to be using PostgreSQL 9.4 with the bundled driver in Crucible
- Create an application link between Crucible and Jira
- Go through the checklist mentioned here to make sure that everything is configured correctly.
- Create a review, making sure it has a Linked Issue
- Add a General Comment
- Notice that the Create Issue link is not displayed.
Actual Results
The below exception is thrown in the atlassian-fisheye.log file:
2018-05-24 11:00:11,262 ERROR [CommitNotifier1 ] com.atlassian.event.internal.AsynchronousAbleEventDispatcher AsynchronousAbleEventDispatcher$1$1-run - There was an exception thrown trying to dispatch event [CommitEventImpl{changeSetId='fbbd5ffa847cd3c0e90b585f4a91464dc9c5e73b', repositoryName='TEST'}] from the invoker [SingleParameterMethodListenerInvoker{method=public void com.atlassian.fecru.plugin.commithook.internal.DefaultCommitHookManager.handleCommit(com.atlassian.fisheye.event.CommitEvent), listener=com.atlassian.fecru.plugin.commithook.internal.DefaultCommitHookManager@18e78848}]
java.lang.RuntimeException: bundle [com.atlassian.fecru.plugin.commithook.fecru-commithooks-plugin]. Listener: com.atlassian.fecru.plugin.commithook.internal.DefaultCommitHookManager event: com.atlassian.fisheye.event.DvcsCommitEventImpl
at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:55) [atlassian-event-3.1.3.jar:?]
at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1$1.run(AsynchronousAbleEventDispatcher.java:38) [atlassian-event-3.1.3.jar:?]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299) [guava-18.0.jar:?]
at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:88) [atlassian-event-3.1.3.jar:?]
at com.atlassian.event.internal.LockFreeEventPublisher$Publisher.dispatch(LockFreeEventPublisher.java:222) [atlassian-event-3.1.3.jar:?]
at com.atlassian.event.internal.LockFreeEventPublisher.publish(LockFreeEventPublisher.java:95) [atlassian-event-3.1.3.jar:?]
at com.atlassian.fisheye.event.FisheyeEventPublisher$EventPublication.publish(FisheyeEventPublisher.java:63) [fisheye.jar:?]
at com.atlassian.fisheye.event.FisheyeEventPublisher.publish(FisheyeEventPublisher.java:35) [fisheye.jar:?]
at com.cenqua.fisheye.rep.CommitEventGenerator$CommitEventNotifier$1.apply(CommitEventGenerator.java:296) [fisheye.jar:?]
at com.cenqua.fisheye.rep.CommitEventGenerator$CommitEventNotifier$1.apply(CommitEventGenerator.java:273) [fisheye.jar:?]
at com.cenqua.fisheye.rep.RepositoryHandle.withEngine(RepositoryHandle.java:509) [fisheye.jar:?]
at com.cenqua.fisheye.rep.CommitEventGenerator$CommitEventNotifier.run(CommitEventGenerator.java:273) [fisheye.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_151]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_151]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
Caused by: com.atlassian.activeobjects.internal.ActiveObjectsInitException: bundle [com.atlassian.fecru.plugin.commithook.fecru-commithooks-plugin]
at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiveObjects.java:95) [?:?]
at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiveObjects.java:86) [?:?]
at com.atlassian.sal.core.executor.ThreadLocalDelegateCallable.call(ThreadLocalDelegateCallable.java:38) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_151]
... 3 more
Caused by: java.lang.RuntimeException: Could not get unique fields for table 'AO_8219D4_COMMIT_HOOK_CONFIG'
at net.java.ao.schema.helper.DatabaseMetaDataReaderImpl.getUniqueFields(DatabaseMetaDataReaderImpl.java:189) [?:?]
at net.java.ao.schema.helper.DatabaseMetaDataReaderImpl.getFields(DatabaseMetaDataReaderImpl.java:83) [?:?]
at net.java.ao.schema.ddl.SchemaReader.readFields(SchemaReader.java:126) [?:?]
at net.java.ao.schema.ddl.SchemaReader.readTable(SchemaReader.java:110) [?:?]
at net.java.ao.schema.ddl.SchemaReader.access$000(SchemaReader.java:62) [?:?]
at net.java.ao.schema.ddl.SchemaReader$1.apply(SchemaReader.java:99) [?:?]
at net.java.ao.schema.ddl.SchemaReader$1.apply(SchemaReader.java:97) [?:?]
at com.google.common.collect.Iterators$8.transform(Iterators.java:799) [guava-18.0.jar:?]
at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) [guava-18.0.jar:?]
at com.google.common.collect.Iterators.addAll(Iterators.java:362) [guava-18.0.jar:?]
at com.google.common.collect.Lists.newArrayList(Lists.java:160) [guava-18.0.jar:?]
at com.google.common.collect.Lists.newArrayList(Lists.java:144) [guava-18.0.jar:?]
at net.java.ao.schema.ddl.SchemaReader.readSchema(SchemaReader.java:97) [?:?]
at net.java.ao.schema.ddl.SchemaReader.readSchema(SchemaReader.java:88) [?:?]
at net.java.ao.schema.ddl.SchemaReader.readSchema(SchemaReader.java:81) [?:?]
at net.java.ao.schema.SchemaGenerator.generateImpl(SchemaGenerator.java:107) [?:?]
at net.java.ao.schema.SchemaGenerator.migrate(SchemaGenerator.java:84) [?:?]
at net.java.ao.EntityManager.migrate(EntityManager.java:128) [?:?]
at com.atlassian.activeobjects.internal.EntityManagedActiveObjects.migrate(EntityManagedActiveObjects.java:51) [?:?]
at com.atlassian.activeobjects.internal.AbstractActiveObjectsFactory$1.doInTransaction(AbstractActiveObjectsFactory.java:77) [?:?]
at com.atlassian.activeobjects.internal.AbstractActiveObjectsFactory$1.doInTransaction(AbstractActiveObjectsFactory.java:72) [?:?]
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate$1.doInTransaction(HostContextTransactionTemplate.java:21) [?:?]
at com.atlassian.sal.spring.component.SpringHostContextAccessor$1.doInTransaction(SpringHostContextAccessor.java:71) [sal-spring-3.1.0.jar:?]
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) [spring-tx-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at com.atlassian.sal.spring.component.SpringHostContextAccessor.doInTransaction(SpringHostContextAccessor.java:68) [sal-spring-3.1.0.jar:?]
at com.atlassian.fisheye.plugin.FisheyeHostContextAccessor.doInTransaction(FisheyeHostContextAccessor.java:27) [fisheye.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) [?:1.8.0_151]
at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) [atlassian-plugins-core-4.4.3.jar:?]
at com.sun.proxy.$Proxy224.doInTransaction(Unknown Source) [?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) [?:1.8.0_151]
at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136) [?:?]
at com.sun.proxy.$Proxy224.doInTransaction(Unknown Source) [?:?]
at com.atlassian.sal.core.transaction.HostContextTransactionTemplate.execute(HostContextTransactionTemplate.java:18) [?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [?:1.8.0_151]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [?:1.8.0_151]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [?:1.8.0_151]
at java.lang.reflect.Method.invoke(Method.java:498) [?:1.8.0_151]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56) [?:?]
at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60) [?:?]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70) [?:?]
at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53) [?:?]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57) [?:?]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) [spring-aop-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at com.sun.proxy.$Proxy377.execute(Unknown Source) [?:?]
at com.atlassian.activeobjects.internal.AbstractActiveObjectsFactory.create(AbstractActiveObjectsFactory.java:72) [?:?]
at com.atlassian.activeobjects.internal.DelegatingActiveObjectsFactory.create(DelegatingActiveObjectsFactory.java:32) [?:?]
at com.atlassian.activeobjects.osgi.TenantAwareActiveObjects$1$1$1.call(TenantAwareActiveObjects.java:91) [?:?]
... 6 more
Caused by: org.postgresql.util.PSQLException: ERROR: column am.amcanorder does not exist
Position: 407
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2161) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1890) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:559) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:283) [postgresql-9.3-1101-jdbc4.jar:?]
at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getIndexInfo(AbstractJdbc2DatabaseMetaData.java:4234) [postgresql-9.3-1101-jdbc4.jar:?]
at net.java.ao.DatabaseProvider.getIndexes(DatabaseProvider.java:506) [?:?]
at net.java.ao.schema.helper.DatabaseMetaDataReaderImpl.getUniqueFields(DatabaseMetaDataReaderImpl.java:178) [?:?]
... 68 more
Root Cause
This is caused by a PostgreSQL JDBC driver mismatch. Even though we support PostgreSQL 9.4 (CRUC-7127), the 9.4 JDBC driver is not bundled with Fisheye/Crucible.
Expected Results
The Create Issue review should be displayed.
Workaround
As mentioned at Migrating to PostgreSQL the following should be done:
- Stop Fisheye/Crucible
- Download the 9.4 JDBC driver from PostgreSQL website
- Move it to FISHEYE_INST/lib (creating the lib directory if needed)
- Delete the bundled drivers from FISHEYE_HOME/lib/dbdrivers/postgresql, or move them to somewhere outside of Fisheye/Crucible
- Start Fisheye/Crucible to have it pick up the new driver