Hello, we are trying to setup broadsea to run against our MSSQL database and I am experiencing a problem that I hope someone here could assist with. I found that after downloading and configuring the files for MSSQL on github, I executed a ‘docker-compose up -d’ (apparently without error, we think) and then I ran ‘docker-compose down’ as described in the ‘Quickstart BROADSEA deployment’ instructions on github. After this I tried running my edited source-source-daimon.sql script in aqua data studio against our OMOP database, and we discovered that the schema ohdsi and the tables ‘source’ and ‘source-daimon’ were not successfully created when I ran the ‘docker-compose up -d’ command previously. We are unsure why these were not created due to the lack of an error in the log output.

This is what we see when I run the ‘docker-compose up -d’ and then the corresponding docker-compose down:
-bash-4.2$ docker-compose up -d
sqlserver_broadsea-webtools_1 is up-to-date
sqlserver_broadsea-methods-library_1 is up-to-date
-bash-4.2$ docker-compose down
Stopping sqlserver_broadsea-webtools_1 … done
Stopping sqlserver_broadsea-methods-library_1 … done
Removing sqlserver_broadsea-webtools_1 … done
Removing sqlserver_broadsea-methods-library_1 … done
Removing network sqlserver_default

we thought, perhaps our configuration is incorrect, however for some reason we are not seeing any errors regarding whether or not we are successfully connecting to our server. When we run docker compose up -d we expect that it is going to try to connect to our server, but the log output has no indication of that.

For reference, this is how our 3 files are currently configured (btw they are all in the same directory, with a path that does not have any spaces.):

@mjoss once you follow @lee_evans’s excellent advice please feel free to post the relevant excerpt from the tomcat logs here.

I would just add that this looks very much like a flyway configuration issue. WebAPI uses a package called flyway to manage and execute installation and subsequent modifications to the WebAPI application database. It appears that you did not set the flyway settings in the YAML file and therefore WebAPI does not know how to connect to the database, what schema the application tables should be created in, what the credentials for connecting are, etc. Based on your setting it looks like they should be something like

Thank you for your responses. We configured the flyway lines in the YAML file, and discovered a slight error in our prior configuration. We also put the jdbc driver jar files in with docker-compose file. Then I ran the docker-compose up -d, and I see the OHDSI schema and tables are created in our DB. This is good. I was then able to run our modified source source daimon script on our DB, which then inserted values into the source and source-daimon tables. However, when I go to check the status of the containers using a web browser, we see that Atlas and calypso are not working correctly.

We tried troubleshooting by following the instructions in the broadsea quickstart page:
We extracted the tails from stderr and stdout. These did have some vague errors, copid below, however we are not sure how to proceed this this information.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1017)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:993)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)

at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5669)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 10 more

at org.ohdsi.webapi.job.JobTemplate.launchTasklet(JobTemplate.java:77)
at org.ohdsi.webapi.service.CDMResultsService.warmCache(CDMResultsService.java:155)
at org.ohdsi.webapi.WebApi.lambda$warmCaches$18(WebApi.java:47)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.ohdsi.webapi.WebApi.warmCaches(WebApi.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
... 31 more

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1021)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:993)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

2018-09-10 17:08:47.143 INFO localhost-startStop-1 org.flywaydb.core.internal.dbsupport.sqlserver.SQLServerDbSupport - - SQLServer does not support setting the schema for the current session. Default schema NOT changed to [ohdsi]

2018-09-10 17:08:47.508 INFO localhost-startStop-1 org.flywaydb.core.internal.dbsupport.sqlserver.SQLServerDbSupport - - SQLServer does not support setting the schema for the current session. Default schema NOT changed to [dbo]

Hibernate: select source0_.SOURCE_ID as SOURCE_I1_34_, source0_.SOURCE_CONNECTION as SOURCE_C2_34_, source0_.SOURCE_DIALECT as SOURCE_D3_34_, source0_.SOURCE_KEY as SOURCE_K4_34_, source0_.SOURCE_NAME as SOURCE_N5_34_ from ohdsi.source source0_

Hibernate: select daimons0_.SOURCE_ID as SOURCE_I5_35_0_, daimons0_.SOURCE_DAIMON_ID as SOURCE_D1_35_0_, daimons0_.SOURCE_DAIMON_ID as SOURCE_D1_35_1_, daimons0_.DAIMON_TYPE as DAIMON_T2_35_1_, daimons0_.PRIORITY as PRIORITY3_35_1_, daimons0_.SOURCE_ID as SOURCE_I5_35_1_, daimons0_.TABLE_QUALIFIER as TABLE_QU4_35_1_ from ohdsi.source_daimon daimons0_ where daimons0_.SOURCE_ID=?

Hibernate: select daimons0_.SOURCE_ID as SOURCE_I5_35_0_, daimons0_.SOURCE_DAIMON_ID as SOURCE_D1_35_0_, daimons0_.SOURCE_DAIMON_ID as SOURCE_D1_35_1_, daimons0_.DAIMON_TYPE as DAIMON_T2_35_1_, daimons0_.PRIORITY as PRIORITY3_35_1_, daimons0_.SOURCE_ID as SOURCE_I5_35_1_, daimons0_.TABLE_QUALIFIER as TABLE_QU4_35_1_ from ohdsi.source_daimon daimons0_ where daimons0_.SOURCE_ID=?

at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151)
at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131)
at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5669)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1017)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:993)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2021)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)

at org.ohdsi.webapi.job.JobTemplate.launchTasklet(JobTemplate.java:77)
at org.ohdsi.webapi.service.CDMResultsService.warmCache(CDMResultsService.java:155)
at org.ohdsi.webapi.WebApi.lambda$warmCaches$18(WebApi.java:47)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at org.ohdsi.webapi.WebApi.warmCaches(WebApi.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
... 31 more

@mjoss OK, try doing that one more time and then try to connect to ATLAS in the Chrome browser and see what messages you get in the Chrome developer tools console.

On the Chrome developer tools networking tab you should see a reference to ‘sources/’ it’s a HTTP GET to ‘host ip address/WebAPI/source/sources’. Please post the output from that call here.

Another thing to verify is that your docker-compose.yml WEBAPI_URL references the correct server domain name or ip address where the Broadsea container is running - it may not be recognized when referenced as ‘localhost’.

It is appears that WebAPI is failing to during the cache warm up phase of the WebAPI start up sequence, which is fairly far along. It appears that query associated with creating the jobs cache is failing.
Can you confirm that the table BATCH_JOB_INSTANCE does in fact exist in the OHDSI application (aka WebAPI) database and test run a query similar to