Java SE中的Weld(CDI)和Jersey-Server(JAX-RS)Bootstrap

时间:2017-05-26 06:47:29

标签: rest jersey cdi bootstrapping weld

我试图找出如何正确地将Weld(3.0.0)与Jersey-Server(1.19.3)一起引导以与Java SE建立Rest服务器。我不是!谈论JEE解决方案。应用程序服务器在这里做得很好。 我想让它独立,没有我不需要的所有库。 我的问题是,泽西服务器以他自己的方式实例化所有REST服务类而不使用焊接。因此@Inject当然不起作用。 IoCInstantiatedComponentProvider在这里有帮助吗?

1 个答案:

答案 0 :(得分:1)

这是Hammock提供的东西,但是如果你只想利用那些没问题的代码。这就是开源之美 - https://github.com/hammock-project/hammock/tree/master/rest-jersey/src/main/java/ws/ament/hammock/rest/jersey

具体而言,您需要实例化JerseyServlet并提供名称为ServletContextAttribute的{​​{1}},其中指向jersey.config.servlet.internal.resourceConfig_JerseyServlet对象,该对象指向您的ResourceConfig Application对象,或者在其中注册所有类。我们使用CDI extension来抓取这些类。我会说我使用泽西2而不是泽西1,我怀疑这将适用于泽西1(这是为CDI 1.0制作)。请注意,您还需要一个servlet容器。

如果您想利用Hammock,只需将这些依赖项添加到您的项目中(我在下面使用Jetty,但您也可以使用嵌入式tomcat或下载):

<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>rest-jersey</artifactId>
</dependency>
<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>bootstrap-weld3</artifactId>
</dependency>
<dependency>
 <groupId>ws.ament.hammock</groupId>
 <artifactId>web-jetty</artifactId>
</dependency>

然后你只需提供一些带注释的休息资源和一个beans.xml