среда, 4 июня 2014 г.

MSC00001 Failed to start service

Дано: приложение в war-архиве, стартующее на jboss 7.x.
Чтобы достучаться до сервлета, в url по дефолту должно присутствовать название архива, что-то вроде:
http://localhost:8080/war_name/uri
Но по понятным причинам название war'а выносить в url вовсе не хочется.
Что делать?

Надо изменить дефолтный "/war_name" на "/".

Ок, создаём файл WEB-INF/jboss-web.xml с таким содержанием:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd">

    <context-root>/</context-root>

</jboss-web>
Собираем и деплоим. У меня (впрочем, судя по и-нету, не только у меня) в логе - злой стектрейс:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-3)  jboss.web.deployment.default-host./: org.jboss.msc.service.StartException in service jboss.web.deployment.default-host./: Failed to start service
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_25]
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
  Caused by: java.lang.IllegalArgumentException: Child container with name  already exists
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:804)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:792)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:356)
    at org.jboss.as.web.deployment.WebContextInjector.inject(WebContextInjector.java:62)
    at org.jboss.as.web.deployment.WebContextInjector.inject(WebContextInjector.java:38)
    at org.jboss.msc.inject.CastingInjector.inject(CastingInjector.java:55) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl.doInject(ServiceControllerImpl.java:1549) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl.access$1900(ServiceControllerImpl.java:49) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.performInjections(ServiceControllerImpl.java:1780) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1741) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
    ... 3 more
Слова "Child container with name  already exists" говорят, что на этом шаблоне "/" уже кто-то "сидит". Проверяем все прочие приложения.
Ну, и про сам jboss не забываем. Потому как jboss app srv (что называется, "из коробки") сам такой шаблон занимает. Проверяем это - и при необходимости освобождаем шаблон: открываем standalone.xml, ищем там enable-welcome-root и сбрасываем его в false:
<subsystem xmlns="urn:jboss:domain:web:1.1" native="false" default-virtual-server="default-host">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="example.com"/>
    </virtual-server>
</subsystem>
Рестартуем и получаем удовольствие от деплоя :).

Комментариев нет:

Отправить комментарий