通过@Inject最佳地将业务逻辑暴露给RESTful服务的方式是什么?

4
我在Stack Overflow和网络上阅读了很多关于这个主题的内容,但是在处理旧帖子时似乎存在问题...
我想将我的EJB业务逻辑公开为rest api / 将EJB注入Jersey资源。
使用@EJB可以正常工作,但有人建议不要在本地bean中使用@EJB。
使用@Inject注入服务中的bean有不同的方法。 对我来说最容易的方法似乎是以下方式:
@RequestScoped // This line is important!
@Path("service")
    public class Rest {

    @Inject Bean beany;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String get () {
        return beany.saySomething();
    }

}

将资源标注为CDI即可完成任务。
这个讨论给出了解决方案,但也指出了问题(行为未指定)。我想知道现在情况是否更清晰。
我正在使用与Glassfish 4一起提供的库。
有没有一种JEE-7最佳实践方法来实现这一点?挖掘过时的讨论真的很困难。
提前感谢!
1个回答

1

这是一个非常好的问题(+1),目前Java EE 7更加精简和易用,但是SO并不是那么更新。有一个新的模式可能对你有用。边界模式,是一个带有@Stateless注解的POJO -在SOA环境中首选- 或者@Stateful,你开始思考...为什么?。

首先,边界是您的应用程序的起点,并公开您的服务,在REST哲学中,您应该执行诸如CRUD(记住:get、post、put、delete)之类的操作,而EJB正是您想要的那种边界(Session Facade),用于事务操作(或其他强大的服务,如异步、消息驱动的Bean等)。

因此,EJB是您的服务,您可以将其注入到任何地方 -rest、soap、RMI、其他CDI POJOS-。由于规范现在允许您只使用@Inject注入EJB,容器会自动确定它是真正强大的EJB!更加精简?...不可能。您的例子是正确的方法,尽可能多地使用@Inject,无论我们是否正在谈论向JSF页面公开的bean。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接