Как вы узнали, существует множество способов их моделирования.Я не уверен в общей наилучшей практике, но я лично предпочитаю использовать управляемые bean-компоненты CDI, которые я внедряю с EJB-бинами.
Так что это немного похоже на ваш второй вариант: создавать новые бины, нои делать их EJB тоже.
Например,
@Produces("application/xml")
@Path("xml")
@javax.enterprise.context.RequestScoped // CDI one, not JSF one
public class MyResource {
@Context
private SecurityContext securityContext;
@Inject
private MyDAO myDAO; // MyDAO = EJB Bean
@GET
@Path("some/path")
public Foo getFoo() {
return myDAO.getFooByUserName(securityContext.getUserPrincipal().getName());
}
}
Это также зависит от того, существуют ли методы, которые используются только для JAX-RS.Приведенный выше пример не показывает этого, но я обнаружил, что он часто всплывает, и когда это происходит, отдельные бины становятся немного лучше.