我目前正在开发一个 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)的想法感到恼火。我父亲总是告诉我,我永远不应该捕获运行时异常……那么,有没有正确处理它们的好方法?