我在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最佳实践方法来实现这一目标?挖掘过时的讨论真的很难。
提前致谢!
答案 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页面。