Дано: приложение в war-архиве, стартующее на jboss 7.x.
Чтобы достучаться до сервлета, в url по дефолту должно присутствовать название архива, что-то вроде:
http://localhost:8080/war_name/uri
Но по понятным причинам название war'а выносить в url вовсе не хочется.
Что делать?
Ок, создаём файл 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>
Рестартуем и получаем удовольствие от деплоя :).
Комментариев нет:
Отправить комментарий