【发布时间】:2016-09-16 02:53:34
【问题描述】:
我在寻找如何让 JAX-RS 2.0 与 Wildfly 10 上的 CDI 一起工作时遇到一些问题。我在另一个 post 上得到了一些答案,它是 JAX-RS 1.0/2.0 的混合体,他们使用了其他依赖项而不是Wildfly 中包含的库。
我的目标是将一个封装了驻留在同一个 jar 中的业务逻辑的单例企业 bean 注入到我的 REST 资源中。 REST 资源类应该是请求范围的,并且只处理 REST 功能(请求和响应)。我的 POJO 类是用 JAXB 表示的。
如何在 Wildfly 10 中将 JAX-RS 2.0 与包含 CDI 库一起使用?
bean 接口
@Local
public interface DateBean {
Date getLocalFormatDate();
}
豆子
@Singleton
public class DateBeanImpl implements DateBeanLocal {
private static final Logger LOG = Logger.getLogger("org.test.logger");
public DateBean() {
LOG.fine("DateBean");
}
@Override
public Date getLocalFormatDate() {
Calendar cal = Calendar.getInstance();
TimeZone localZone = TimeZone.getDefault();
cal.setTimeZone(localZone);
Date localTime = cal.getTime();
return localTime;
}
}
REST 资源
@Path("classroom")
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class ClassRoomResource {
private static final Logger LOG = Logger.getLogger("org.clearbyte.logger");
@Inject private DateBean dateBean;
public ClassRoomResource() {
LOG.fine("ClassRoomResource");
}
@GET
@Path("{id}/getDummy")
public ClassRoom getDummy(@PathParam("id") long id) {
ClassRoom room = new ClassRoom();
room.setRoomName("Dummy");
room.setRoomNr(id);
return room;
}
@GET
@Path("localDate")
@Produces({MediaType.TEXT_HTML})
public Response getLocalformatDate() {
LOG.fine("DateBean variable: " +dateBean);
Date localDate = dateBean.getLocalDate();
LOG.fine("Local date: " +localDate);
return Response.status(Response.Status.OK)
.entity(localDate.toString())
.build();
}
}
【问题讨论】:
-
我不明白这个问题的重点。 JAX-RS 开箱即用地支持 CDI。
-
我也不明白你的意思。要在 Java EE 7 容器中启用 JAX-RS 资源,您只需使用 JAX-RS 注释(取决于您的 Maven 依赖项中示例的 Java EE 规范),然后注入您想要注入的任何内容(会话 bean、托管豆,...) 使用 CDI。也无需依赖 Resteasy 库(除非您使用 Resteasy 特定功能)
-
是的,不需要为 JAX-RS 2.0 添加依赖项。编辑了答案。
标签: rest jax-rs cdi wildfly resteasy