Встроенный Tomcat 9 для выполнения @PostConstruct

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

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

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

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

Я включил jar javax.annotation-api-1.3.2 в папку 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. Любая помощь будет оценена.


person MnTanProject    schedule 07.10.2019    source источник
comment
поскольку PostConstruct вызывается после создания объекта класса. Не могли бы вы проверить, создан ли объект для класса, имеющего метод PostConstruct. Если у вас есть конструктор в классе, проверьте его, поместив логи внутрь конструктора.   -  person Piyush N    schedule 07.10.2019
comment
да, объект создан. я могу выполнить другой метод и другие переменные в этом классе.   -  person MnTanProject    schedule 07.10.2019
comment
Какую реализацию CDI вы выбрали? Для MyFaces 2.3 требуется CDI 2.0.   -  person Selaron    schedule 07.10.2019


Ответы (1)


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

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();

person MnTanProject    schedule 07.10.2019