Tomcatembedded не выбрасывает FAILED LifeCycleState - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение для отдыха в виде трикотажа, подобное этому

@ApplicationPath("/rest")
public class HelloApp extends Application
{
    public HelloApp() throws Exception {
        //also tried throwing Runtimeexcpetion
        throw new Exception();
    }

  @Override
  public Set<Class<?>> getClasses()
  {
    Set<Class<?>> s = new HashSet<Class<?>>();
    s.add(HelloWorldService.class);
    return s;
  }
}

Это Интернет. xml file

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name>REST Web Application Demo</display-name>

    <servlet>
        <servlet-name>jersey.hello</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>rest.demo.HelloApp</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey.hello</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

</web-app>

Я упаковал вышеупомянутое в файл войны и затем использовал в следующая встроенная программа tomcat

public class WarExample {

    public static void main(String[] args) throws ServletException, LifecycleException {
        Tomcat tomcat = new Tomcat();
        tomcat.setBaseDir("temp");
        tomcat.setPort(8080);

        String contextPath = "/";     
        String warFilePath = "path to war file"; 
        tomcat.getHost().setAppBase(".");

        Context context = tomcat.addWebapp(contextPath, warFilePath);
        context.addLifecycleListener(new LifecycleListener() {

            public void lifecycleEvent(LifecycleEvent event) {
                System.out.println(event.getLifecycle().getStateName());
                //do something if event.getLifecycle().getState() ==  LifecycleState.FAILED
            }
        });
        tomcat.start();
        tomcat.getServer().await();

    }
}

Я добавил прослушиватель жизненного цикла в контекст, который возвращается, добавляя war как webapp. Я получаю стартовые и стартовые состояния, но не вижу здесь никаких других состояний. Несмотря на то, что я выбрасываю исключение / время выполнения из моего приложения отдыха на джерси, почему встроенный tomcat по-прежнему не выдает сбойное состояние.

1 Ответ

0 голосов
/ 18 апреля 2020

Мне пришлось добавить это для tomcat в publi sh Сбой состояния

        final Host host = tomcat.getHost();
        if (host instanceof StandardHost) {
            ((StandardHost) tomcat.getHost()).setFailCtxIfServletStartFails(true);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...