Java EE中的RESTful设计模式

时间:2016-11-25 10:27:09

标签: java rest java-ee jax-rs

我打算在Java EE中开发Restful API设计,但我面临着Restful服务的两种不同的实现模式。

第一个模型在其余类中使用@EJB来检索数据:

@Path("/users")
public class UserResource 
{   
    @EJB
    UsersFacade em;

    @GET
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON } )
    @Path("{name}")
    public User getUser( @PathParam("name") String _name ) 
    {
        UsersBean u = em.findByName(_name );

        if ( u == null )
        {
            throw new WebApplicationException( 404 );
        }
        return User.fromEntity( u );
    }

   ....
}

和NetBeans生成的第二个是这样的:

@Stateless
@Path("entities.customer")
public class CustomerFacadeREST extends AbstractFacade<Customer> {
    @PersistenceContext(unitName = "CustomerDBPU")
    private EntityManager em;

    public CustomerFacadeREST() {
        super(Customer.class);
    }

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

    ....
}

正如您可能已经注意到的,这里的区别在于,在第二种方法中,Rest类实现是SLJB(无状态Java Bean),它使用@PersistenceContext来获取JPA的实例,并且它还扩展了AbstractFacade。

但是在第一种方法中它只使用@EJB来检索Bean的实例。

你更喜欢哪一个?为什么?

1 个答案:

答案 0 :(得分:2)

没关系。 REST不是在不同的布线依赖方式之间进行选择。这两个类在与REST相关的所有内容中都是相同的。