1
36
您认为这里存在协同效应是非常正确的,我们有一个模块化的Web应用程序,在这个应用程序本身由独立的组件(OSGi包)自动组装而成,每个包贡献自己的页面、资源、CSS和可选的javascript。 我们不使用JSF(这里是SpringMVC),所以我不能在OSGi上下文中评论该框架增加的复杂性。 现在的大多数框架或方法仍然坚持“旧”的思维方式:一个war文件代表您的webapp,然后是许多osgi包和服务,但几乎没有人关心GUI本身的模块化。 设计的先决条件对于OSGi,要解决的第一个问题是:您的部署场景是什么,主容器是谁?我的意思是,您可以在OSGi运行时上部署您的应用程序,并使用它的基础设施来完成所有工作。或者,您可以将OSGi运行时嵌入到传统的应用服务器中,然后需要重新使用一些基础结构,特别是要使用AppServer的servlet引擎。 我们的设计目前基于OSGi作为容器,我们使用OSGi提供的httpService作为servlet容器。我们正在寻找在外部servlet容器和OSGihttpService之间提供某种透明的桥梁,但这项工作仍在进行中。 SpringMVC+OSGi模块化webapp的架构示意图因此,我们的目标不仅是通过OSGi为Web应用程序提供服务,而且要将OSGi的组件模型应用到Web UI本身,使其具有可组合性、可重用性和动态性。 这些是系统中的组件:
当Web UI贡献包激活并发布其控制器时,它们会自动被我们的中央Web UI包接收,并且上述自定义URL映射器收集这些控制器服务并保持到控制器实例的最新URL映射。 然后,当某个HTTP请求进入某个URL时,它会找到关联的控制器并在那里发送该请求。 控制器执行其业务,然后返回应呈现的任何数据 和 视图的名称(在我们的例子中是一个JSP)。这个JSP位于控制器的包中,并且可以由中央Web UI包访问和呈现,这正是因为我们在httpservice中注册了资源位置。然后,我们的中心视图解析器将这个JSP与我们的中心SiteMesh装饰器合并,并将生成的HTML输出给客户机。 据了解,这是相当高的水平,但如果没有提供完整的实现,就很难完全解释。 我们学习的重点是 what Bernd Kolb did 通过他的示例jpetstore转换到OSGi并使用这些信息来设计我们自己的体系结构。 IMHO目前有太多的炒作和重点是如何使OSGi不知何故嵌入在传统的基于Java EE的应用程序中,并且很少考虑实际使用OSGi成语及其优秀的组件模型来真正允许组件化Web应用程序的设计。 |
2
2
退房 SpringSource dm Server -完全基于OSGi构建并支持模块化Web应用程序的应用服务器。它提供免费、开源和商业版本。 您可以首先部署一个标准的war文件,然后逐步将应用程序分解为OSGi模块,或者在OSGi语言中称为“bundles”。正如您对SpringSource所期望的那样,服务器对Spring框架和相关的Spring产品组合提供了极好的支持。 免责声明:我致力于此产品。 |
3
2
了解Springdm服务器 licensing . |
4
1
我们一直在使用 Restlet 有了OSGi,嵌入的HTTP服务效果很好(在封面下,它实际上是Jetty,但Tomcat也可用)。 restlet有零到最小的XML配置需求,我们所做的任何配置都在bundleaactivator(注册新服务)中。 在构建页面时,我们只是处理相关的服务实现来生成输出、装饰器样式。插入的新包将在下次呈现时添加新的页面装饰/小部件。 REST为我们提供了清晰而有意义的URL,同一数据的多个表示,并且似乎是一个可扩展的隐喻(很少动词,很多名词)。 我们的一个额外功能是对缓存的广泛支持,特别是ETag。 |
5
1
SpringSource似乎正在开发一个基于OSGi的有趣的模块化Web框架 泉源切片 . 更多信息可在以下博客文章中找到: |
6
0
看看rap! http://www.eclipse.org/rap/ |
7
0
看一看 http://www.ztemplates.org 简单易学。这一个允许您将所有相关的模板、javascript和css放到一个jar中,并透明地使用它。这意味着您在使用提供的组件时甚至不必像框架为您做的那样,在页面中声明所需的javascript。 |
8
0
一组有趣的帖子。我有一个基于每个客户定制的Web应用程序。每个客户都会获得一组核心组件和其他组件,具体取决于他们注册的内容。对于每个版本,我们都必须“组装”正确的服务集,并根据客户应用正确的菜单配置(我们使用Struts菜单),这一点至少很乏味。基本上是相同的代码基础,但我们只是自定义导航以公开或隐藏某些页面。这显然不理想,我们希望利用OSGi来组件化服务。虽然我可以看到这是如何完成服务API的,也可以理解如何像CSS和Java脚本和控制器(我们使用Spring MVC)这样的资源也可以被捆绑在一起,您将如何处理“交叉切割”问题,例如页面导航和一般工作流程,特别是在您想要动态部署新服务的场景中。冰和需要添加导航到该服务。也可能存在其他“交叉”关注点,如跨越其他服务的服务。 谢谢, 迪克兰。 |