Jakarta ee 在JavaEE7中将JAX-RS层、EJB层和JSF层合并到一个POJO中?

Jakarta ee 在JavaEE7中将JAX-RS层、EJB层和JSF层合并到一个POJO中?,jakarta-ee,jax-rs,ejb-3.1,java-ee-7,Jakarta Ee,Jax Rs,Ejb 3.1,Java Ee 7,我正在学习javaee7教程,该教程随GlassFish提供。 据我所知,CDI注入在JAX-RS层中是可能的,这在以前的版本中是不可能的 EE版本-如果我错了,请纠正我 此外,单个bean可以是EJB、WebService和managedbean(用于JSF处理) 下面的示例直接来自。如您所见,通过使用三个注释@Named、@Stateless和@Path,三个层被组合成一个层。我想这在早期版本的EE中是不可能的。这一切都很棒,减少了大量代码。但是应用程序的设计没有任何严重的影响。例如,我目前

我正在学习
javaee7
教程,该教程随
GlassFish
提供。 据我所知,
CDI注入在
JAX-RS层
中是可能的,这在以前的版本中是不可能的 EE版本-如果我错了,请纠正我

此外,单个bean可以是
EJB
WebService
managedbean
(用于JSF处理)

下面的示例直接来自。如您所见,通过使用三个注释
@Named、@Stateless和@Path
,三个层被组合成一个层。我想这在早期版本的EE中是不可能的。这一切都很棒,减少了大量代码。但是应用程序的设计没有任何严重的影响。例如,我目前使用EE5,其中表示层(JSF)、业务层(EJB)和web服务层(JAX-RS)被清楚地分开。三个不同的类和容器管理依赖项注入。如下图所示,三合一的“糖果”版本是否存在安全漏洞

/**
 * @author Arun Gupta
 */
@Named
@Stateless
@Path("movie")
public class MovieFacadeREST extends AbstractFacade<Movie> {
    @PersistenceContext
    protected EntityManager em;

    public MovieFacadeREST() {
        super(Movie.class);
    }

    @POST
    @Override
    @Consumes({"application/xml", "application/json"})
    public void create(Movie entity) {
        super.create(entity);
    }

    @PUT
    @Override
    @Consumes({"application/xml", "application/json"})
    public void edit(Movie entity) {
        super.edit(entity);
    }

    @DELETE
    @Path("{id}")
    public void remove(@PathParam("id") Integer id) {
        super.remove(super.find(id));
    }

    @GET
    @Path("{id}")
    @Produces({"application/xml", "application/json"})
    public Movie find(@PathParam("id") Integer id) {
        return super.find(id);
    }

    @GET
    @Override
    @Produces({"application/xml", "application/json"})
    public List<Movie> getAll() {
        return super.getAll();
    }

    @GET
    @Path("{from}/{to}")
    @Produces({"application/xml", "application/json"})
    public List<Movie> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
        return super.findRange(new int[]{from, to});
    }

    @GET
    @Path("count")
    @Produces("text/plain")
    public String countREST() {
        return String.valueOf(super.count());
    }

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

}
/**
*@作者阿伦·古普塔
*/
@命名
@无国籍
@路径(“电影”)
公共类MovieFacadeREST扩展了AbstractFacade{
@持久上下文
受保护的实体管理器em;
公共电影导演(){
超级(电影类);
}
@职位
@凌驾
@使用({“application/xml”、“application/json”})
公共void创建(电影实体){
超级创建(实体);
}
@放
@凌驾
@使用({“application/xml”、“application/json”})
公共无效编辑(电影实体){
超级编辑(实体);
}
@删除
@路径(“{id}”)
公共无效删除(@PathParam(“id”)整数id){
super.remove(super.find(id));
}
@得到
@路径(“{id}”)
@产生({“application/xml”、“application/json”})
公共电影查找(@PathParam(“id”)整数id){
返回super.find(id);
}
@得到
@凌驾
@产生({“application/xml”、“application/json”})
公共列表getAll(){
返回super.getAll();
}
@得到
@路径(“{from}/{to}”)
@产生({“application/xml”、“application/json”})
公共列表findRange(@PathParam(“from”)整型from,@PathParam(“to”)整型to){
返回super.findRange(新的int[]{from,to});
}
@得到
@路径(“计数”)
@生成(“文本/纯文本”)
公共字符串countREST(){
返回字符串.valueOf(super.count());
}
@凌驾
受保护的EntityManager getEntityManager(){
返回em;
}
}
包括CDI(aka)所需支持的1.1和勘误表C002:

在同样支持托管bean的产品中,实现必须 支持将托管bean用作根资源类、提供程序和 应用程序子类。在同样支持JSR 299的产品中, 实现必须同样支持使用JSR299样式的托管 豆。提供者和应用程序子类必须是Singleton或use 适用范围


所以,这种事情以前是可能的。请参阅,它将许多EE 6技术合并到一个类中。

教程在哪里?你所问的问题也应该在该教程中提及。@Tiny:代码的源代码链接在上面