Jar Deployment Exception in Production during database initialization

I am deploying my CUBA application to an existing production MSSQL database. I have done this before on our QA database without any issue. My production database has tables from another application written in another technology, so I am just adding to it the CUBA tables and my tables for my CUBA entities.

I have cuba.automaticDatabaseUpdate set to true. My CUBA platform version is 6.9.2.

I am running my .jar file from terminal using - java -jar fins-gfal-web-fins1p.jar -contextName fins

After the Initialize database message: -

14:25:46.130 INFO c.h.c.c.sys.dbupdate.DbUpdaterEngine - Initializing database

I get the following message below and only an empty SYS_DB_CHANGELOG table is created

java.lang.IllegalStateException: Duplicate key file:/Users/mwhy/Documents/dev/cuba/fish-surveys-admin/uberJarBuild/prod/fins-gfal-web-fins1p.jar!/LIB-INF/app-core/WEB-INF/db/50-FINS/init/mssql/20.create-db.sql
	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133) ~[na:1.8.0_152]
	at java.util.HashMap.merge(HashMap.java:1254) ~[na:1.8.0_152]
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320) ~[na:1.8.0_152]
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) ~[na:1.8.0_152]
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_152]
	at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_152]
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_152]
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_152]
	at com.haulmont.cuba.core.sys.dbupdate.ScriptScanner.findResourcesByUrlPattern(ScriptScanner.java:145) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.ScriptScanner.getScripts(ScriptScanner.java:75) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.getScripts(DbUpdaterEngine.java:83) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.getInitScripts(DbUpdaterEngine.java:442) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.lambda$getInitScripts$3(DbUpdaterEngine.java:437) ~[classes/:na]
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:267) ~[na:1.8.0_152]
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_152]
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_152]
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_152]
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_152]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.getInitScripts(DbUpdaterEngine.java:438) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.doInit(DbUpdaterEngine.java:196) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterEngine.updateDatabase(DbUpdaterEngine.java:93) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterImpl.updateDatabaseOnStart(DbUpdaterImpl.java:87) ~[classes/:na]
	at com.haulmont.cuba.core.sys.dbupdate.DbUpdaterImpl.applicationInitialized(DbUpdaterImpl.java:79) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_152]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_152]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_152]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_152]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:256) ~[shared/:na]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:177) ~[shared/:na]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:140) ~[shared/:na]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[shared/:na]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[shared/:na]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[shared/:na]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) ~[shared/:na]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) ~[shared/:na]
	at com.haulmont.cuba.core.sys.EventsImpl.publish(EventsImpl.java:33) ~[classes/:na]
	at com.haulmont.cuba.core.sys.AbstractAppContextLoader.initAppContext(AbstractAppContextLoader.java:66) ~[classes/:na]
	at com.haulmont.cuba.core.sys.AbstractWebAppContextLoader.contextInitialized(AbstractWebAppContextLoader.java:75) ~[classes/:na]
	at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:800) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:444) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:791) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:294) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.Server.start(Server.java:387) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.server.Server.doStart(Server.java:354) [fins-gfal-web-fins1p.jar:na]
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) [fins-gfal-web-fins1p.jar:na]
	at com.haulmont.cuba.uberjar.CubaJettyServer.start(CubaJettyServer.java:121) [fins-gfal-web-fins1p.jar:na]
	at com.haulmont.cuba.uberjar.ServerRunner.execute(ServerRunner.java:249) [fins-gfal-web-fins1p.jar:na]
	at com.haulmont.cuba.uberjar.ServerRunner.main(ServerRunner.java:39) [fins-gfal-web-fins1p.jar:na]

Any ideas what could be causing the DbUpdaterEngine to fail initializing CUBA?

Would removing my db/50-FINS directory temporarily help the DBUpdaterEngine get past this error and allow the CUBA DDL execute.

Any other suggestions? This is critical as setting up the production CUBA web application is on hold until this is resolved.

Hi,

Could you execute find db/50-FINS and share the output?
The error occurs when there are several files with the same name (but different path) inside the module folder. For instance:

...
/db/50-proj/init/mssql/somefolder/20.create-db.sql
/db/50-proj/init/mssql/20.create-db.sql
...

Thank you Rostislav for your guidance. After digging around I couldn’t find any duplicates of 20.create-db.sql other than in the core/build/db/50-proj/init/mssql/ folder. I decided to delete the core/build folder and build my uberJar fiile again.

When I ran my jar file the CUBA DDL was executed successfully.

My guess is that something was left over from a previous failed build triggering the duplicate keys.

Thanks again.