2014-01-08 102 views
6

我使用的是Jetty 9.1和Jersey 2.5.1。新澤西州已經內置了對碼頭的支持,所以我開始我的服務器這樣的:Jetty Embedded,澤西島2,焊接

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(最好以編程方式)?

+0

確保您使用的是Weld 2.2+,因爲它只是修復了Jetty 9.1+的一些CDI集成bug。 –

回答

3

我用焊接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類,所以我不得不寫的粘合劑,使注射工作在這些類。 This question helped me a lot