kitodo / kitodo-production

Kitodo.Production is a workflow management tool for mass digitization and is part of the Kitodo Digital Library Suite.
http://www.kitodo.org/software/kitodoproduction/
GNU General Public License v3.0
60 stars 64 forks source link

"No suitable driver" in the Docker image #621

Open funkyfuture opened 7 years ago

funkyfuture commented 7 years ago

we want to evaluate Kitodo and therefore i went with a deployment with Docker and the images provided by https://hub.docker.com/r/kitodo

this docker-compose.yml is used to start an instance:

version : '2'

services:
  web:
    image: kitodo/production
    ports:
      - "8001:8080"
    links:
      - db:mysql

  db:
    image: kitodo/database

when opening the webinterface (after the database has been initialised), it takes about 2 minutes until this stack trace is rendered:

                            java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
                            de.sub.goobi.helper.exceptions.GUIExceptionWrapper: Unexpected Error.
You may ignore the stack trace and continue your work with a click here.
If this doesn't work you may have to use the navigation or even restart the application by logging out and back in. zzz

The feature to notify the development team by email from here is disabled.
    at de.sub.goobi.helper.servletfilter.HibernateSessionFilter2.doFilter(HibernateSessionFilter2.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at de.sub.goobi.helper.servletfilter.SecurityCheckFilter.doFilter(SecurityCheckFilter.java:77)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at de.sub.goobi.helper.servletfilter.RequestControlFilter.doFilter(RequestControlFilter.java:147)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:341)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.servlet.ServletException: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /newpages/Main.jsp][Class: com.exadel.htmLib.components.UITable,Id: _idJsp42][Class: com.exadel.htmLib.components.UITr,Id: _idJsp43][Class: com.exadel.htmLib.components.UITd,Id: _idJsp141][Class: javax.faces.component.html.HtmlForm,Id: useform][Class: javax.faces.component.html.HtmlPanelGrid,Id: id511][Class: javax.faces.component.html.HtmlPanelGrid,Id: id10][Class: com.exadel.htmLib.components.UITable,Id: _idJsp147][Class: com.exadel.htmLib.components.UITr,Id: _idJsp151][Class: com.exadel.htmLib.components.UITd,Id: _idJsp152][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp153][Class: javax.faces.component.html.HtmlOutputText,Id: _idJsp163]}
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:154)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at de.sub.goobi.helper.servletfilter.SessionCounterFilter.doFilter(SessionCounterFilter.java:74)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at de.sub.goobi.helper.servletfilter.HibernateSessionFilter2.doFilter(HibernateSessionFilter2.java:75)
    ... 27 more
Caused by: javax.faces.FacesException: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /newpages/Main.jsp][Class: com.exadel.htmLib.components.UITable,Id: _idJsp42][Class: com.exadel.htmLib.components.UITr,Id: _idJsp43][Class: com.exadel.htmLib.components.UITd,Id: _idJsp141][Class: javax.faces.component.html.HtmlForm,Id: useform][Class: javax.faces.component.html.HtmlPanelGrid,Id: id511][Class: javax.faces.component.html.HtmlPanelGrid,Id: id10][Class: com.exadel.htmLib.components.UITable,Id: _idJsp147][Class: com.exadel.htmLib.components.UITr,Id: _idJsp151][Class: com.exadel.htmLib.components.UITd,Id: _idJsp152][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp153][Class: javax.faces.component.html.HtmlOutputText,Id: _idJsp163]}
    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:425)
    at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
    at org.jenia.faces.template.handler.ViewHandler.renderView(ViewHandler.java:76)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:216)
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
    ... 40 more
Caused by: org.apache.jasper.JasperException: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /newpages/Main.jsp][Class: com.exadel.htmLib.components.UITable,Id: _idJsp42][Class: com.exadel.htmLib.components.UITr,Id: _idJsp43][Class: com.exadel.htmLib.components.UITd,Id: _idJsp141][Class: javax.faces.component.html.HtmlForm,Id: useform][Class: javax.faces.component.html.HtmlPanelGrid,Id: id511][Class: javax.faces.component.html.HtmlPanelGrid,Id: id10][Class: com.exadel.htmLib.components.UITable,Id: _idJsp147][Class: com.exadel.htmLib.components.UITr,Id: _idJsp151][Class: com.exadel.htmLib.components.UITd,Id: _idJsp152][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp153][Class: javax.faces.component.html.HtmlOutputText,Id: _idJsp163]}
    at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:591)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
    ... 47 more
Caused by: javax.faces.FacesException: Could not retrieve value of component with path : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /newpages/Main.jsp][Class: com.exadel.htmLib.components.UITable,Id: _idJsp42][Class: com.exadel.htmLib.components.UITr,Id: _idJsp43][Class: com.exadel.htmLib.components.UITd,Id: _idJsp141][Class: javax.faces.component.html.HtmlForm,Id: useform][Class: javax.faces.component.html.HtmlPanelGrid,Id: id511][Class: javax.faces.component.html.HtmlPanelGrid,Id: id10][Class: com.exadel.htmLib.components.UITable,Id: _idJsp147][Class: com.exadel.htmLib.components.UITr,Id: _idJsp151][Class: com.exadel.htmLib.components.UITd,Id: _idJsp152][Class: javax.faces.component.html.HtmlPanelGrid,Id: _idJsp153][Class: javax.faces.component.html.HtmlOutputText,Id: _idJsp163]}
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:227)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput(HtmlTextRendererBase.java:69)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd(HtmlTextRendererBase.java:57)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:419)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:229)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:101)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:419)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChildren(RendererUtils.java:400)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:417)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChildren(RendererUtils.java:400)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:417)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChildren(RendererUtils.java:400)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:417)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:229)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:101)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:419)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:229)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:101)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:539)
    at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:498)
    at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:366)
    at org.apache.myfaces.shared_impl.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:57)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_h_005fpanelGrid_005f6(Main_jsp.java:7062)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_h_005fform_005f3(Main_jsp.java:6878)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_htm_005ftd_005f9(Main_jsp.java:6835)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_htm_005ftr_005f3(Main_jsp.java:1938)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_htm_005ftable_005f2(Main_jsp.java:1890)
    at org.apache.jsp.newpages.Main_jsp._jspx_meth_f_005fview_005f0(Main_jsp.java:498)
    at org.apache.jsp.newpages.Main_jsp._jspService(Main_jsp.java:382)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
    ... 60 more
Caused by: javax.faces.el.EvaluationException: Cannot get value for expression '#{StatistikForm.anzahlVorlagen}'
    at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:405)
    at javax.faces.component.UIOutput.getValue(UIOutput.java:80)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue(RendererUtils.java:223)
    ... 94 more
Caused by: javax.faces.el.EvaluationException: Exception getting value of property anzahlVorlagen of base of type : de.sub.goobi.forms.StatistikForm
    at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:99)
    at org.apache.myfaces.custom.security.SecurityContextPropertyResolver.getValue(SecurityContextPropertyResolver.java:101)
    at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:535)
    at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
    at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:386)
    ... 96 more
Caused by: javax.faces.el.EvaluationException: Bean: de.sub.goobi.forms.StatistikForm, property: anzahlVorlagen
    at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:461)
    at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:85)
    ... 100 more
Caused by: java.lang.reflect.InvocationTargetException
    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.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:457)
    ... 101 more
Caused by: org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:124)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:221)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:157)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:56)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:159)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:183)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:157)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1881)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1858)
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838)
    at org.hibernate.loader.Loader.doQuery(Loader.java:906)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:348)
    at org.hibernate.loader.Loader.doList(Loader.java:2550)
    at org.hibernate.loader.Loader.doList(Loader.java:2536)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2366)
    at org.hibernate.loader.Loader.list(Loader.java:2361)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:198)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1230)
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
    at org.hibernate.internal.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:909)
    at de.sub.goobi.forms.StatistikForm.getAnzahlVorlagen(StatistikForm.java:129)
    ... 106 more
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:692)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:84)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:301)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:214)
    ... 127 more
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1469)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:758)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685)
    ... 131 more
Caused by: java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)

it would be great if the source Dockerfile was made available in this repository ino order to make investigation and troubleshooting easily accessible.

stweil commented 7 years ago

The Docker images were created by @UB-Mannheim, the source Dockerfile is available at https://github.com/UB-Mannheim/kitodo-production/tree/docker. Please post issues and pull requests for improvements also at https://github.com/UB-Mannheim/kitodo-production.

stweil commented 7 years ago

The problem is caused by docker-compose and a configuration file docker-compose.yml which does not connect the database to the Tomcat process running Kitodo.

There remains something which could be improved in Kitodo.Production (unrelated to docker): database failures are always possible (for example because the database server was not restarted after an update of the database software). It would be nice to have a user friendly message for this case.

funkyfuture commented 7 years ago

How is this caused by Docker Compose when the configuration file contains the same options to create the containers as documented in the Usage section?

stweil commented 7 years ago

I'm not an expert for docker-compose, but I see that the services don't get the same names when they are startet from docker-compose as they get by a direct start via docker. Instead of web, I get something like docker_web_1, for example.

funkyfuture commented 7 years ago

Docker Compose is just an orchestration wrapper around Docker.

Beside the fact that a container's name must not affect the behaviour of an application running in that container (this should'n also be the case since the database is addressed by ip), setting names excplicitly yields the same error:

version : '2'

services:
  web:
    image: kitodo/production
    container_name: kitodo-production
    ports:
      - "8001:8080"
    links:
      - db:mysql

  db:
    image: kitodo/database
    container_name: kitodo-database

my suspicion is that this is a race condition as the kitodo-production container doesn't wait to start the application until the database is initialized (as observed in the logs).

such delay is usually coded in the application's entrypoint script which as well should take care of necessary schema initialization and migrations, and thus make the kitodo-database image unnecessary and - if supported by the application - allow the usage of various sql-backends.

this may give you an idea, in particular this routine to wait for a database. here's another example that uses the application's language from the official wordpress image.

stweil commented 7 years ago

Maybe Kitodo.Production fails to work if the database is started after Tomcat. As I already wrote above, the user interface is not robust (no user friendly handling of problems with the database). Maybe other parts of the code could also be improved to handle late availability of the database or short outages of the database connection. My experience shows that such improvements are valuable for a stable production environment.

Working around missing robustness of Kitodo.Production in the Docker file is possible. I'll have a look as soon as time permits, but will of course also accept pull requests for the UB Mannheim docker file. There should also be an updated Docker image with Kitodo.Production 2.0.0.

henning-gerhardt commented 7 years ago

This kind of error is related to docker as I can't reproduce this error on a normal server system setting (real and virtual machine servers).

I stopped my local database instance, started a tomcat instance and deployed the application. Browsing to application URI I got displayed loading screen. After one minute I restarted my database and 2 seconds later I got normal login screen of the application.

Even on a running application and database gone away and come back a few minutes later the application runs fine after database is available again. If any database action is done while database is away then errors displayed to users which could be improved.

stweil commented 7 years ago

Error handling can also be improved for the case of a tomcat service restart when a user was connected. That user should be redirected to the login page at least. Ideally there would also be a message like "lost session, please log in again".

matthias-ronge commented 7 years ago

By default, Tomcat will serialize open sessions during shut-down and restore them on start-up. Best solution to the last point would be to put this back to service. Would you create a separate ticket for that? It’s going away from database driver problem.

funkyfuture commented 5 years ago

fyi, for the current 3.0.0-beta.1, i put together a working setup for a deployment w/ Docker-Compose. it's not production-ready, but we use it to provide evaluation instances. you may use this as a base to provide a software package that is easy to deploy.

kitodo-suite.tar.gz