使用CDI将战争部署到Jetty

 手机用户2702933671_440 发布于 2023-02-11 19:42

我在IntelliJ中有一个maven项目,我试图将war文件部署到jetty容器中.这样做的目的是对所述war文件中的一些功能进行快速集成测试.

由于开箱即用Jetty没有附带CDI或JNDI,我试图添加对这些的支持,但遇到了一些问题.例如,我在启动时收到以下错误:

15:30:50 [34mINFO [0;39m o.a.s.c.CdiObjectFactory - [lookup]: Checking for BeanManager under JNDI key java:comp/BeanManager 
15:30:50 [39mDEBUG[0;39m o.a.s.c.CdiObjectFactory - [lookup]: BeanManager lookup failed for JNDI key java:comp/BeanManager 

我已将焊接servlet jar包含在我的pom中,并且还将焊接侦听器添加到web.xml中,但它仍然无效.我正在使用Jetty 9.有什么想法吗?

的pom.xml

    
        org.jboss.weld.servlet
        weld-servlet-core
        2.0.4.Final
    

web.xml中


  org.jboss.weld.environment.servlet.Listener


   Object factory for the CDI Bean Manager
   BeanManager
   javax.enterprise.inject.spi.BeanManager

Antoine Sabo.. 9

以下配置适用于Jetty 8.x和9.0.x(目前不是9.1+)

以下是所需的配置:

在Pom.xml中添加依赖项

....

    org.jboss.weld.servlet
    weld-servlet
    2.1.0.Final

....

请注意我正在使用weld-servlet依赖项,其中包含所有需要的Weld和CDI类.

jetty-env.xml你声明JNDI资源



    
        
            
        
        BeanManager
        
            
                javax.enterprise.inject.spi.BeanManager
                org.jboss.weld.resources.ManagerObjectFactory
                
            
        
    

web.xml您添加侦听器并公开JNDI资源:

...

    org.jboss.weld.environment.servlet.Listener

...

    BeanManager
    
        javax.enterprise.inject.spi.BeanManager
    

...

最后,如果你想能够在servlet中注入bean,你需要让Jetty通过jetty-web.xml在你的WEB-INF目录中创建以下文件来公开它的一些内部类



    
        
            -org.eclipse.jetty.servlet.ServletContextHandler.Decorator
        
    

不要错过了-,它告诉码头一个类是没有更多的内部类,可以由Web应用程序可以看到的方式.有了这个,Weld将能够装饰Jetty内部servlet类,在其中添加CDI Injection支持.

额外奖励:使用Maven的jetty插件

这是很容易,你只需要添加一个run配置文件,您pom.xml喜欢这个


    run
    
        clean jetty:run-forked
        
            
                org.eclipse.jetty
                jetty-maven-plugin
                9.0.7.v20131107
                
                    1353
                    quit
                    src/main/webapp/WEB-INF/jetty-web.xml
                
            
        
    

之后,您只需键入mvn -Prun以构建应用程序,启动Jetty并在其中部署应用程序.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有