Start of webapp hangs if there are request while starting
Description
Environment
None
is caused by
Sebastian Hofmann
Activity
Sebastian Hofmann July 12, 2022 at 4:44 PM
Sebastian Hofmann
July 12, 2022 at 4:44 PM
You can Reproduce the Error consistently by spamming F5 on a static page like: mir/content/brand/impressum.xml
The Java Doc of ServiceLoader says:
Concurrency
Instances of this class are not safe for use by multiple concurrent threads.
If i move the Initialization of TRANSACTION_SERVICE_LOADER
to a private static final class it doesnt help.
The Problem ist that the ServiceLoader.load()
creates as complete lazy instance of the ServiceLoader i change to Code to
private static final class InstanceHolder {
public static final ServiceLoader<MCRPersistenceTransaction> TRANSACTION_SERVICE_LOADER = ServiceLoader
.load(MCRPersistenceTransaction.class, MCRClassTools.getClassLoader());
}
and added
static {
isDatabaseAccessEnabled();
}
to the MCRTransactionHelper
And now i can not longer reproduce the error.
Sebastian Hofmann July 12, 2022 at 4:03 PM
Sebastian Hofmann
July 12, 2022 at 4:03 PM
Sometime i get another error. Maybe a initialization error?
] [talledLocalContainer] java.util.NoSuchElementException
[INFO] [talledLocalContainer] at java.base/java.util.LinkedHashMap$LinkedHashIterator.nextNode(LinkedHashMap.java:758)
[INFO] [talledLocalContainer] at java.base/java.util.LinkedHashMap$LinkedKeyIterator.next(LinkedHashMap.java:778)
[INFO] [talledLocalContainer] at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass(ServiceLoader.java:1215)
[INFO] [talledLocalContainer] at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1228)
[INFO] [talledLocalContainer] at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
[INFO] [talledLocalContainer] at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
[INFO] [talledLocalContainer] at java.base/java.util.ServiceLoader$ProviderSpliterator.tryAdvance(ServiceLoader.java:1491)
[INFO] [talledLocalContainer] at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
[INFO] [talledLocalContainer] at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
[INFO] [talledLocalContainer] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
[INFO] [talledLocalContainer] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
[INFO] [talledLocalContainer] at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
[INFO] [talledLocalContainer] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[INFO] [talledLocalContainer] at java.base/java.util.stream.ReferencePipeline.findAny(ReferencePipeline.java:652)
[INFO] [talledLocalContainer] at org.mycore.common.MCRTransactionHelper.isDatabaseAccessEnabled(MCRTransactionHelper.java:45)
[INFO] [talledLocalContainer] at org.mycore.common.MCRTransactionHelper.beginTransaction(MCRTransactionHelper.java:93)
[INFO] [talledLocalContainer] at org.mycore.frontend.servlets.MCRServlet.getSession(MCRServlet.java:239)
[INFO] [talledLocalContainer] at org.mycore.frontend.servlets.MCRServlet.initializeMCRSession(MCRServlet.java:372)
[INFO] [talledLocalContainer] at org.mycore.frontend.servlets.MCRServlet.doGetPost(MCRServlet.java:296)
[INFO] [talledLocalContainer] at org.mycore.frontend.servlets.MCRServlet.doGet(MCRServlet.java:147)
[INFO] [talledLocalContainer] at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
[INFO] [talledLocalContainer] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.mycore.frontend.filter.MCRUserAgentFilter.doFilter(MCRUserAgentFilter.java:67)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.mycore.common.xml.MCRURIResolverFilter.doFilter(MCRURIResolverFilter.java:75)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.mycore.frontend.filter.MCRWebAppBaseFilter.doFilter(MCRWebAppBaseFilter.java:41)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.mycore.frontend.filter.MCRRequestAuthenticationFilter.doFilter(MCRRequestAuthenticationFilter.java:57)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.mycore.frontend.filter.MCRRequestDebugFilter.doFilter(MCRRequestDebugFilter.java:75)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
[INFO] [talledLocalContainer] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
[INFO] [talledLocalContainer] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
[INFO] [talledLocalContainer] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
[INFO] [talledLocalContainer] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
[INFO] [talledLocalContainer] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
[INFO] [talledLocalContainer] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)
[INFO] [talledLocalContainer] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
[INFO] [talledLocalContainer] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
[INFO] [talledLocalContainer] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890)
[INFO] [talledLocalContainer] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1787)
[INFO] [talledLocalContainer] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
[INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
[INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
[INFO] [talledLocalContainer] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
[INFO] [talledLocalContainer] at java.base/java.lang.Thread.run(Thread.java:833)
Kathleen Neumann July 12, 2022 at 3:21 PM(edited)
Kathleen Neumann
July 12, 2022 at 3:21 PM
(edited)
perhaps related to https://mycore.atlassian.net/browse/MCR-2364 ?
or https://mycore.atlassian.net/browse/MCR-2429 ?
Fixed
Details
Details
Assignee
Thomas Scheffler
Thomas SchefflerReporter
Kathleen Neumann
Kathleen NeumannComponents
Priority
Created July 12, 2022 at 3:20 PM
Updated July 29, 2022 at 7:13 AM
Resolved July 14, 2022 at 1:38 PM
Wenn man eine MyCoRe-Anwendung startet und während des Starts bereits Zugriffe auf die Anwendung reinkommen, wird der Start unterbrochen. Workaround-Möglichkeiten:
So lange neu starten bis es geht
Apache/Nxings stoppen, dann Anwendung starten und erst danach Apache/Nginx wieder starten
ESC[mESC[1;31m2022-07-11T13:37:42,276 ERROR MCRErrorServlet: /servlets/MCRLoginServlet;jsessionid=100D20EB032CAD3BEAC9D8B2D8C011C3: Error 500 occured. The following message was given: Transaction already active java.lang.IllegalStateException: Transaction already active at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:74) at org.mycore.backend.jpa.MCREntityTransaction.begin(MCREntityTransaction.java:32) at java.base/java.lang.Iterable.forEach(Iterable.java:75) at org.mycore.common.MCRTransactionHelper.beginTransaction(MCRTransactionHelper.java:94) at org.mycore.frontend.servlets.MCRServlet.getSession(MCRServlet.java:239) at org.mycore.frontend.servlets.MCRServlet.initializeMCRSession(MCRServlet.java:372) at org.mycore.frontend.servlets.MCRServlet.doGetPost(MCRServlet.java:296) at org.mycore.frontend.servlets.MCRServlet.doGet(MCRServlet.java:147) at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.mycore.frontend.filter.MCRWebAppBaseFilter.doFilter(MCRWebAppBaseFilter.java:41) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.mycore.frontend.filter.MCRRequestAuthenticationFilter.doFilter(MCRRequestAuthenticationFilter.java:57) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.mycore.frontend.filter.MCRRequestDebugFilter.doFilter(MCRRequestDebugFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:688) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:508) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:829)