通过@Inject将业务逻辑暴露给宁静服务的最佳方式

时间:2014-01-26 19:05:25

标签: java rest java-ee ejb-3.1

我在SO和网络上阅读了很多关于这个主题但在处理旧帖子时似乎有问题...

我想将我的EJB业务逻辑公开给一个rest api /将一个ejb注入一个jersey资源。

使用@EJB工作正常,但有些人建议不要将@EJB用于本地bean。

使用@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可以完成工作。

This讨论让我了解了解决方案,但也指出了问题(未指明行为)。我想知道现在情况是否更清楚。

我正在使用glassfish 4附带的库。

是否有JEE-7最佳实践方法来实现这一目标?挖掘过时的讨论真的很难。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

首先,边界是你的应用程序的起点并公开你的服务,在REST phisolophy中你应该做像CRUD这样的操作(记住:get,post,put,delete),而ejb就是那种边界( Session Facade)您想要进行事务操作(或其他强大的服务,如异步,消息驱动Bean等)。

因此,EJB是您的服务,您可以将它注入到您想要的任何地方 - 肥皂,RMI,其他CDI POJOS-。现在感谢spec,你可以用@Inject注入一个EJB,容器会发现它真的是一个超级强大的EJB!更精简?......不可能。你的例子是正确的方法,尽可能多地尝试使用@Inject,无论我们是否在讨论暴露的bean到JSF页面。