[
https://issues.apache.org/jira/browse/AMQ-8591?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17533195#comment-17533195
]
Jean-Baptiste Onofré commented on AMQ-8591:
-------------------------------------------
Already answered in AMQ-8563: it's not related to ActiveMQ, it's a change in
Jetty (for security reason). I think I can workaround by a configuration at
Jetty level. I will take a look.
> ActiveMQ 5.17.0 can not start when in symlinked directory (docker)
> ------------------------------------------------------------------
>
> Key: AMQ-8591
> URL: https://issues.apache.org/jira/browse/AMQ-8591
> Project: ActiveMQ
> Issue Type: Bug
> Affects Versions: 5.17.0
> Reporter: Petr Újezdský
> Assignee: Jean-Baptiste Onofré
> Priority: Major
>
> Up to version 5.16 this Docker file (with only version changed) worked fine
> [https://github.com/rmohr/docker-activemq/blob/master/5.15.9/Dockerfile]
> Since version 5.17.0 the command
> {code:java}
> ln -s /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
> {code}
> must be rewritten into simple {{mv}}
> {code:java}
> mv /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
> {code}
> and the command {{chown -R activemq:activemq /opt/$ACTIVEMQ}} removed.
> Otherwise the startup fails on:
> {code:java}
> WARN | Failed startup of context o.e.j.w.WebAppContext@5d1b1c2a{ActiveMQ
> Console,/admin,file:///opt/activemq/webapps/admin/,UNAVAILABLE}
> org.springframework.beans.factory.BeanDefinitionStoreException: IOException
> parsing XML document from ServletContext resource
> [/WEB-INF/webconsole-embedded.xml]; nested exception is
> java.io.FileNotFoundException: Could not open ServletContext resource
> [/WEB-INF/webconsole-embedded.xml]
> at
> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:196)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:232)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:203)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
> ~[spring-web-5.3.16.jar:5.3.16]
> at
> org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
> ~[spring-web-5.3.16.jar:5.3.16]
> at
> org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
> ~[spring-context-5.3.16.jar:5.3.16]
> at
> org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:671)
> ~[spring-context-5.3.16.jar:5.3.16]
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
> ~[spring-context-5.3.16.jar:5.3.16]
> at
> org.apache.activemq.web.WebConsoleStarter.createWebapplicationContext(WebConsoleStarter.java:71)
> ~[?:?]
> at
> org.apache.activemq.web.WebConsoleStarter.contextInitialized(WebConsoleStarter.java:44)
> ~[?:?]
> at
> org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:1073)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:572)
> ~[jetty-servlet-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.ContextHandler.contextInitialized(ContextHandler.java:1002)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:746)
> ~[jetty-servlet-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:379)
> ~[jetty-servlet-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1449)
> ~[jetty-webapp-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1414)
> ~[jetty-webapp-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:916)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:288)
> ~[jetty-servlet-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524)
> ~[jetty-webapp-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.security.SecurityHandler.doStart(SecurityHandler.java:411)
> ~[jetty-security-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.security.ConstraintSecurityHandler.doStart(ConstraintSecurityHandler.java:417)
> ~[jetty-security-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:117)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at org.eclipse.jetty.server.Server.start(Server.java:423)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at org.eclipse.jetty.server.Server.doStart(Server.java:387)
> ~[jetty-server-9.4.45.v20220203.jar:9.4.45.v20220203]
> at
> org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73)
> ~[jetty-util-9.4.45.v20220203.jar:9.4.45.v20220203]
> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method) ~[?:?]
> at
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:?]
> at
> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:?]
> at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
> at
> org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:283)
> ~[spring-core-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.config.MethodInvokingBean.invokeWithTargetException(MethodInvokingBean.java:123)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.config.MethodInvokingFactoryBean.afterPropertiesSet(MethodInvokingFactoryBean.java:108)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
> ~[spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
> [spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
> [spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
> [spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:934)
> [spring-beans-5.3.16.jar:5.3.16]
> at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
> [spring-context-5.3.16.jar:5.3.16]
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
> [spring-context-5.3.16.jar:5.3.16]
> at
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)
> [xbean-spring-4.20.jar:4.20]
> at
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)
> [xbean-spring-4.20.jar:4.20]
> at
> org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:104)
> [activemq-spring-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:104)
> [activemq-spring-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:67)
> [activemq-spring-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)
> [activemq-broker-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
> [activemq-broker-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:87)
> [activemq-console-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63)
> [activemq-console-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:154)
> [activemq-console-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:63)
> [activemq-console-5.17.0.jar:5.17.0]
> at
> org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:104)
> [activemq-console-5.17.0.jar:5.17.0]
> at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method) ~[?:?]
> at
> jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:?]
> at
> jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:?]
> at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
> at org.apache.activemq.console.Main.runTaskClass(Main.java:262)
> [activemq.jar:5.17.0]
> at org.apache.activemq.console.Main.main(Main.java:115)
> [activemq.jar:5.17.0]
> Caused by: java.io.FileNotFoundException: Could not open ServletContext
> resource [/WEB-INF/webconsole-embedded.xml]
> at
> org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:159)
> ~[spring-web-5.3.16.jar:5.3.16]
> at
> org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:333)
> ~[spring-beans-5.3.16.jar:5.3.16]
> ... 78 more
> {code}
> This {{Dockerfile}} does not work (AMQ is inside symlinked directory):
> {code:java}
> FROM openjdk:11-jre
> ENV ACTIVEMQ_VERSION 5.17.0
> ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION
> ENV ACTIVEMQ_TCP=61616 ACTIVEMQ_AMQP=5672 ACTIVEMQ_STOMP=61613
> ACTIVEMQ_MQTT=1883 ACTIVEMQ_WS=61614 ACTIVEMQ_UI=8161
> ENV
> SHA512_VAL=d3252df7528b7000fceaf0a8b45c65216010467fea775bb3219ef04aaa659156f4c87982eb11a6982204d2737b9cc2b93efac88b651f1447270528bf62b1e238
> ENV ACTIVEMQ_HOME /opt/activemq
> RUN curl
> "https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz"
> -o $ACTIVEMQ-bin.tar.gz
> # Validate checksum
> RUN if [ "$SHA512_VAL" != "$(sha512sum $ACTIVEMQ-bin.tar.gz | awk
> '{print($1)}')" ];\
> then \
> echo "sha512 values doesn't match! exiting." && \
> exit 1; \
> fi;
> RUN tar xzf $ACTIVEMQ-bin.tar.gz -C /opt && \
> ln -s /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
> mv /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
> useradd -r -M -d $ACTIVEMQ_HOME activemq && \
> chown -R activemq:activemq /opt/$ACTIVEMQ && \
> chown -h activemq:activemq $ACTIVEMQ_HOME
> USER activemq
> WORKDIR $ACTIVEMQ_HOME
> EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_AMQP $ACTIVEMQ_STOMP $ACTIVEMQ_MQTT
> $ACTIVEMQ_WS $ACTIVEMQ_UI
> CMD ["/bin/sh", "-c", "bin/activemq console"]
> {code}
> This {{Dockerfile}} works (directory insted of symlink):
> {code:java}
> FROM openjdk:11-jre
> ENV ACTIVEMQ_VERSION 5.17.0
> ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION
> ENV ACTIVEMQ_TCP=61616 ACTIVEMQ_AMQP=5672 ACTIVEMQ_STOMP=61613
> ACTIVEMQ_MQTT=1883 ACTIVEMQ_WS=61614 ACTIVEMQ_UI=8161
> ENV
> SHA512_VAL=d3252df7528b7000fceaf0a8b45c65216010467fea775bb3219ef04aaa659156f4c87982eb11a6982204d2737b9cc2b93efac88b651f1447270528bf62b1e238
> ENV ACTIVEMQ_HOME /opt/activemq
> RUN curl
> "https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz"
> -o $ACTIVEMQ-bin.tar.gz
> # Validate checksum
> RUN if [ "$SHA512_VAL" != "$(sha512sum $ACTIVEMQ-bin.tar.gz | awk
> '{print($1)}')" ];\
> then \
> echo "sha512 values doesn't match! exiting." && \
> exit 1; \
> fi;
> RUN tar xzf $ACTIVEMQ-bin.tar.gz -C /opt && \
> mv /opt/$ACTIVEMQ $ACTIVEMQ_HOME && \
> useradd -r -M -d $ACTIVEMQ_HOME activemq && \
> chown -h activemq:activemq $ACTIVEMQ_HOME
> USER activemq
> WORKDIR $ACTIVEMQ_HOME
> EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_AMQP $ACTIVEMQ_STOMP $ACTIVEMQ_MQTT
> $ACTIVEMQ_WS $ACTIVEMQ_UI
> CMD ["/bin/sh", "-c", "bin/activemq console"]
> {code}
--
This message was sent by Atlassian Jira
(v8.20.7#820007)