2

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

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

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

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

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

4

1 回答 1

1

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

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

这一切都取决于您从开发和生产意义上发现什么更舒服。但两者都支持注入,因此 Web 服务和 JSF 托管 Bean 都可以将服务作为任何其他资源注入。

于 2013-04-30T03:18:21.300 回答