栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用OSGi模块化JSF / Facelets / Spring应用程序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用OSGi模块化JSF / Facelets / Spring应用程序?

您要做的事情听起来可行,但有一些警告:

View层:
首先,您的View层听起来有点过硬。还有其他使用自定义组件来模块化JSF组件的方法,这些方法可以避免尝试创建与后期绑定托管Bean一样引人注目的内容所带来的麻烦。

模块本身:
第二,您的模块似乎并不是特别模块化。您的第一个项目符号列表听起来像是您在尝试创建可互操作的Web应用程序,而不是模块本身。我对模块的想法是,每个组件都有明确的目的,或多或少是离散的。怎么样
underlies 。如果您沿着OSGi路线走,那么我们应该这样定义模块化: 出于讨论的目的,模块化意味着组件可以热插拔-
也就是说,可以在 不破坏应用程序的情况下添加 和删除组件

依赖关系: 您对模块的描述“可能彼此 依赖”,
我对此有些担心。您可能(我希望)已经知道这一点,但是您的依存关系应该形成有向无环图。一旦引入了循环依赖关系,就要求对应用程序的最终可维护性造成伤害。OSGi的最大弱点之一是它
不能 防止循环依赖,因此要由您来强制执行此操作。否则,您的依赖关系将像葛根一样增长,并逐渐阻塞系统的其余生态系统。

Servlet: Fuhgeddaboudit。您不能将Servlet后期绑定到Web应用程序中,除非Servlet
3.0规范正式投入生产(如Pascal所指出)。要启动一个单独的实用程序servlet,您需要将其放入自己的应用程序中。


好的,需要多加注意。让我们考虑一下这可能如何工作:

您已经定义了自己的JSF模块来执行…到底是什么?让我们给它一个定义的,相当琐碎的目的:一个登录屏幕。因此,您创建了登录屏幕,然后使用OSGi将其后期绑定到您的应用程序中,然后呢?如果您尚未在.jspx页面中定义登录功能,应用程序如何知道该功能?应用程序如何知道导航到它不知道的地方?

有多种方法可以使用条件包含等(例如`<c:if

{loginBean.notEmpty}>`)来解决此问题,但是,就像您说的那样,当托管的loginBean存在于另一个可能尚未引入应用程序的模块中时,事情会变得有些麻烦。实际上,除非该loginBean存在,否则您将获得servlet异常。所以你会怎么做?

您可以在其中一个模块中定义一个API。
您打算在模块之间共享的所有托管bean必须在此API层中指定为接口。并且您的所有模块都必须具有要使用的任何这些接口的默认实现。并且此API必须在所有可互操作的模块之间共享。然后,您可以使用OSGi和Spring将指定的bean及其实现连接在一起。

我需要花点时间指出这不是我要解决的问题。
一点也不。给定像登录页面一样简单,甚至像股票图表一样复杂的东西,我个人更喜欢创建一个自定义JSF组件。但是,如果要求是“我希望我的托管bean是模块化的(例如,可热插拔等),”这是我知道使其工作的唯一方法。我什至不能完全确定它是否
起作用。这次电子邮件交流表明,这是JSF开发人员才刚刚开始研究的问题。

我通常认为托管bean是视图层的一部分,因此,我仅将它们用于视图逻辑,并将其他所有内容委托给服务层。在我看来,使托管bean后期绑定是将它们提升到视图层之外并进入业务逻辑。所有这些教程都如此专注于服务是有原因的:因为大多数时候,您都想考虑应用程序“无头”运行所需要的时间,以及如果“换肤”您的视图很容易,例如,您希望它及其所有功能都可以在Android手机上运行。

但这听起来像是您正在使用的很多东西本身就是视图逻辑-例如,需要交换其他视图模板。OSGi /
Spring应该能够提供帮助,但是您需要在应用程序中进行一些选择才能在可用的实现之间进行选择:几乎是OSGi的Service Registry要做的。

剩下静态资源。您可以对它们进行模块化,但是请记住,您需要定义一个接口来检索这些资源,并且需要提供默认的实现,因此您的应用程序不会因缺少资源而阻塞。如果考虑使用i18n,这可能是个不错的选择。如果您想
真正
冒险,那么可以将静态资源放入JNDI。这将使它们完全可热交换,并避免尝试以编程方式解决要使用的实现的麻烦,但是存在一些弊端:任何失败的查找都将导致您的应用抛出NamingException。而且这太过分了。JNDI通常在Web应用程序中用于应用程序配置。

至于您剩下的问题:

我在这里发明自行车吗?有标准的解决方案吗?

你有一点。我见过执行 此类操作 的应用程序,但您似乎偶然发现了一组相当独特的要求。

您认为OSGi是完成上述任务的正确技术吗?

如果您需要可热交换的模块,则可以选择OSGi和更轻便的ServiceLocator界面。

我对OSGI应用程序的了解大致正确吗?

我真的不能不知道更多关于组件边界的信息。目前看来,您可能正在推动OSGi做更多的事。

但是不要相信我。我
在这些地方找到了
其他阅读材料。

而且,既然您询问有关Spring
Slices的信息,这应该足以让您入门。您将需要一个Git客户端,并且看起来您将通过查看源代码来在应用程序上训练自己。这是非常早期的原型代码。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451506.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号