Jetty Embedded,Jersey 2,Weld

时间:2014-01-08 15:08:31

标签: java jetty jersey-2.0 weld

我正在使用Jetty 9.1和Jersey 2.5.1。 Jersey内置了对Jetty的支持,所以我就像这样启动我的服务器:

public static void main(String[] args) {

    URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
    ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);

    Server server = JettyHttpContainerFactory.createServer(baseUri, config);
}

MyApplication只需调用this.packages(...)来查找我的REST api类。

但是,REST api类包含一个@Inject带注释的字段,应由WELD注入。显然WELD没有启动(CDI支持未启用),而且更奇怪的是,它看起来像HK2(泽西2使用)正在尝试执行注入。

(点击REST端点时我有org.glassfish.hk2.api.UnsatisfiedDependencyException。)

如何正确设置WELD(最好以编程方式)?

1 个答案:

答案 0 :(得分:3)

我使用了Weld SE:

import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

然后简单地

Weld weld = new Weld();
try {
    WeldContainer container = weld.initialize();

    URI baseUri = UriBuilder.fromUri("http://localhost/").port(8080).build();
    ResourceConfig config = ResourceConfig.forApplicationClass(MyApplication.class);

    Server server = JettyHttpContainerFactory.createServer(baseUri, config);

    server.join();

} catch (Exception e) {
    e.printStackTrace();
} finally {
    weld.shutdown();
}

请注意,HK2将处理REST类,因此我必须编写一个binder来使注入在这些类中工作。 This question helped me a lot