从JSF托管bean调用JAX-RS Web服务



我目前正在开发一个Web应用程序,它可以被Android应用程序或Web浏览器通过HTTP访问。这两个用户代理基本上提供相同的功能。Android应用程序调用用JAX-RS/Jersey构建的RESTful Web服务,而Web页面是由JSF托管bean支持的Facelets。因此,我认为有两种可能的Web应用程序入口点。Web服务完成所有必要的工作(访问资源、在dao内执行数据库操作等),最重要的是,它们必须独立行动。因此,它们构成了一个独立的层。

为了重用代码,从托管bean调用Web服务是一种好做法吗?它们的生命周期是否兼容?

其思想是将Resource对象注入托管bean(使用CDI,但不一定),并以编程方式调用其方法。Web服务将充当底层服务的业务委托(?)。

我在谷歌上广泛搜索了这个问题,但我没有得到明确的答案。我看到了一些代码片段,其中托管bean使用其URL调用Web服务,但由于我的所有组件都位于单个服务器应用程序中,因此我不知道是什么阻止我直接链接它们

关于错误处理的附属问题:我还对从Web服务捕获WebApplicationExceptions到我的托管bean以将错误消息返回给视图(使用FacesMessage)的想法感到恼火。我父亲总是告诉我,永远不要捕捉运行时异常……那么,是否有正确处理它们的好方法呢?

在这种情况下,您最好将业务逻辑从Web服务导出到"一些中央共享代码"中。然后,web服务和托管bean将调用共享代码。

我把术语"一些中央共享代码"放在引号中,因为您使用的代码取决于您的运行时环境。如果您正在使用JavaEE容器(如Glassfish或JBoss),这听起来像是EJB和无状态会话bean(旨在确保资源得到良好管理)的完美使用。您还可以使用Spring Beans作为共享代码,并以这种方式集中逻辑。

这完全取决于你从开发和生产的角度来看什么更舒服。但是两者都支持注入,因此Web服务和JSF Managed Beans都可以将服务作为任何其他资源注入。

最新更新