Встроенный Tomcat 9 для выполнения @PostConstruct - PullRequest
0 голосов
/ 07 октября 2019

Я создаю исполняемый jar-файл, в котором использую Jsf myfaces 2.3 со встроенным Tomcat 9, поэтому при выполнении jar-файла он будет читать файл war и развертывать его на встроенном сервере. Он читает бин и правильно отображает содержимое. Однако tomcat, похоже, не выполняет аннотацию @PostConstruct.

Например: у меня есть следующее в bean-компоненте:

    @PostConstruct
    public void init() {
        System.out.println("init bean called..........");
    }

Но он не выполняет void-компонент, который называется bean-компонентом.

Я включил javax.annotation-api-1.3.2 jar в папку WEB-INF \ Lib.

String contextPath = "/Test";     
        String warFilePath = "D:\\Test\\embedded\\Test.war";
StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, warFilePath);
((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);
((StandardJarScanner) ctx.getJarScanner()).setScanAllFiles(true);
((StandardJarScanner) ctx.getJarScanner()).setScanClassPath(true);

tomcat.start();
tomcat.getServer().await();

Нет сообщений об ошибках ... на консоли. Просто не выполняется @PostConstruct init void. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 07 октября 2019

Понятно .. просто нужно включить именование.

tomcat.enableNaming();

в моем основном пустоте:

Tomcat tomcat = new Tomcat();
tomcat.setBaseDir("temp");
tomcat.setPort(8080);
tomcat.enableNaming();
tomcat.getConnector(); // Tomcat 9 we need to get the connector. it not by default.

String contextPath = "/Test";     
String warFilePath = "D:\\Test\\embedded\\Test.war";

tomcat.getHost().setAppBase(".");
StandardContext ctx = (StandardContext) tomcat.addWebapp(contextPath, warFilePath);
((StandardJarScanner) ctx.getJarScanner()).setScanAllDirectories(true);
((StandardJarScanner) ctx.getJarScanner()).setScanAllFiles(true);
((StandardJarScanner) ctx.getJarScanner()).setScanClassPath(true);

tomcat.start();
tomcat.getServer().await();

...