我打算在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的实例。
你更喜欢哪一个?为什么?答案 0 :(得分:2)
没关系。 REST不是在不同的布线依赖方式之间进行选择。这两个类在与REST相关的所有内容中都是相同的。