When I set up Confluence, Synchrony kept failing to start. I turned up logging settings until it logged the error, which was this:
2017-12-08 13:28:50,156 WARN [synchrony-interop-executor:thread-2] [plugins.synchrony.bootstrap.DefaultSynchronyProcessManager] lambda$startProcess$2 Failed to setup Synchrony, turn on debug for stack trace: null
-- url: /confluence/rest/synchrony-interop/restart | referer: https://REDACTED/confluence/admin/confluence-collaborative-editor-plugin/configure.action | traceId: REDACTED | userName: REDACTED
2017-12-08 13:28:50,157 DEBUG [synchrony-interop-executor:thread-2] [plugins.synchrony.bootstrap.DefaultSynchronyProcessManager] lambda$startProcess$2
-- url: /confluence/rest/synchrony-interop/restart | referer: https://REDACTED/confluence/admin/confluence-collaborative-editor-plugin/configure.action | traceId: REDACTED | userName: REDACTED
java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:460)
at java.util.Properties.setProperty(Properties.java:166)
at com.atlassian.confluence.plugins.synchrony.bootstrap.DefaultSynchronyProcessManager.setupEnvironment(DefaultSynchronyProcessManager.java:340)
at com.atlassian.confluence.plugins.synchrony.bootstrap.DefaultSynchronyProcessManager.trySetup(DefaultSynchronyProcessManager.java:582)
at com.atlassian.confluence.plugins.synchrony.bootstrap.DefaultSynchronyProcessManager.lambda$startProcess$2(DefaultSynchronyProcessManager.java:494)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Looking at the source code, I think I see the problem. We're using PostgreSQL with non-password-based authentication, so we're not defining hibernate.connection.password in confluence.cfg.xml, so Confluence tries to set the password property to null, which crashes since properties are stored in a Hashtable, which isn't allowed to contain nulls.
Once I figured this out, I was able to work around it (by defining a dummy value for hibernate.connection.password), but since the rest of Confluence (and every other Atlassian product that I've set up so far) all work fine without defining a database password, this seems like a bug.