【问题标题】:Jetty+Jersey servlet+Weld: Weld injection not initialized, what is wrong?Jetty+Jersey servlet+Weld:焊接注入未初始化,怎么回事?
【发布时间】:2012-06-20 20:28:18
【问题描述】:

我正在尝试从 Glassfish+Jersey+Weld 迁移到 Jetty。

我有这样的设置:gist of pom.xml, web.xml and Java launcher

应用程序似乎可以正常启动,但在处理任何请求时,我看到应该由 Weld (logger) 注入的字段为空。

@RequestScoped
@Path("/foobar")
@Consumes({ ExtendedMediaType.APPLICATION_JSON, 
    ExtendedMediaType.APPLICATION_JAVASCRIPT })
@Produces({ ExtendedMediaType.APPLICATION_JSON, 
    ExtendedMediaType.APPLICATION_JAVASCRIPT })
public class EmailResource extends {

    @Inject
    private Logger logger;

    @Override @POST
    public Response create(EmailJob document) 
        throws URISyntaxException, ResourceException 
    {
       logger.debug("Hi there!");
    }
}

有什么问题?

更新: Logger producer 看起来很可疑,但它甚至没有被调用:

/** This class uses CDI to alias Java EE resources into CDI beans. **/
public class Resources {

    @Produces
    public Logger produceLog(InjectionPoint injectionPoint) {
        return LoggerFactory.getLogger(
            injectionPoint.getMember().getDeclaringClass().getName());
    }
}

【问题讨论】:

    标签: java jetty jersey jboss-weld


    【解决方案1】:

    嗨,维克多,我按照要求回答了我的问题,我已经 blogged 关于嵌入式码头的这个问题。我还向github 推送了一个完整的示例,您可以克隆它。

    我认为你的要点没有任何问题,但是你能告诉你的 Logger 生产者吗?

    更新:

    我在您的代码中看到一个拼写错误“BeanMnanager”,但不确定是否是原因

    new Resource("BeanManager", new Reference("javax.enterprise.inject.spi.BeanMnanager",
            "org.jboss.weld.resources.ManagerObjectFactory", null));
    

    【讨论】:

    • 我只是想知道为什么AppServlet 在第 2 部分。它不应该只与 Jersey servlet 一起工作吗?这看起来不太干净。
    • 顺便说一句,你可以使用com.sun.jersey.config.property.packages,而不要使用RestConfig.getClasses()
    • @VictorSergienko AppServlet 只是为了在 Jetty 启动后展示一个 CDI 入口点,以防你想做任何启动后配置或其他事情,根本不需要。至于 RestConfig 不确定...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多