Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌入Tomcat 9以执行@PostConstruct_Java_Myfaces_Tomcat9 - Fatal编程技术网

Java 嵌入Tomcat 9以执行@PostConstruct

Java 嵌入Tomcat 9以执行@PostConstruct,java,myfaces,tomcat9,Java,Myfaces,Tomcat9,我正在创建一个可执行jar,其中使用Jsf myfaces 2.3和Tomcat 9嵌入,因此当我执行jar时,它将读取war文件并将其部署到嵌入式服务器上,读取bean并正确显示内容。 但是,tomcat似乎没有执行@PostConstruct注释 例如:我在一个bean中有以下内容: @PostConstruct public void init() { System.out.println("init bean called..........");

我正在创建一个可执行jar,其中使用Jsf myfaces 2.3和Tomcat 9嵌入,因此当我执行jar时,它将读取war文件并将其部署到嵌入式服务器上,读取bean并正确显示内容。 但是,tomcat似乎没有执行@PostConstruct注释

例如:我在一个bean中有以下内容:

    @PostConstruct
    public void init() {
        System.out.println("init bean called..........");
    }
但它并没有执行调用该bean的voidbean

我已将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。任何帮助都将不胜感激。

收到了。。只需要启用命名

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


因为PostConstruct在类的对象创建之后被调用。请检查是否为具有PostConstruct方法的类创建了对象。如果类中有构造函数,请将日志放在构造函数中进行检查。是的,对象已创建。我可以在该类中执行其他方法和其他变量。您选择使用哪个CDI实现。