我个人感觉OSGI表面是为了模块化,但其本质是为了软件设计的永恒主题--复用。
从过程式软件设计,到结构化软件设计,再到面向对象的软件设计,再进一步则是面向组件的软件设计。而java在JDK层面上已经提供了很好的面向对象的软件设计基础,但在面向组件的软件设计方面,则需要在更高的应用层面去实现,而没有基础性的实现方式。也就是说,你用java开发,可以基于组件,也可以不基于组件,这全看你的需求和远见,而且即使是实现面向组件的设计,在jdk层面也没有提供统一的方式。(反之,在面向对象方面,jdk则提供了诸如类、private、public、protected、static等等相关的元素)。
所以OSGI的出现,其实就是弥补了JDK在这方面的缺失。虽然OSGI不在JDK范畴内,但对于实际的应用中,OSGI规范却是介于JDK和基于OSGI的应用之间的,所以,基本上如果你需要将应用建立在OSGI规范之上的话,你的应用所依赖的其他组件也“不得不”迁移到OSGI上来,再加上OSGI独特的ClassLoader设计,使bundle间的类互相访问受到一定的约束,这就导致OSGI的入门门槛较高。
很幸运的是,OSGI经过多年的发展,也已出现了很多类似J2EE相关的各种框架实现,逐步将OSGI的应用门槛降低下来。从结构上说,在JVM之上最底层的就是OSGI的framework,例如:equinox、felix等等,很多osgi的初学者都直接在这些framework上开始,但这会造成很多麻烦,由于这些framework只是提供最基础osgi运行时环境,对于初学者来说,常会遇上要解决诸如log、配置、bundle的启动优先级等等问题。在此,我推荐karaf,karaf不是osgi framework,它是在osgi framework的基础上,整合了log、配置、console等等基础功能的osgi运行时环境,它相当于在equinox(或felix或其它OSGI framework)上包装了一下,令你的osgi应用可以免除集成那些基础功能的麻烦。如果初学者直接基于karaf来运行自己的应用,入门会轻松很多。
再进一步,我推荐servicemix,servicemix其实是个ESB,而karaf就是作为servicemix的内核,并独立出来的一个apache开源项目。在servicemix4开始,已经是osgi化了,同时Servicemix还集成了ActiveMQ、Camel等开源项目。Camel强大的组件化服务功能,使servicemix在SOA方面更加得心应手,如果有空的话,我想我会再跟大家交流一下Servicemix。
分享到:
相关推荐
Java应用架构设计中,模块化模式与OSGi是两个关键概念,它们对于构建大型、可扩展且易于维护的系统至关重要。模块化模式使得代码组织更加有序,而OSGi(Open Services Gateway Initiative)则是一种实现模块化的动态...
OSGi(Open Service Gateway Initiative)则是一个动态的模块化框架,它允许在运行时加载、卸载和更新模块。OSGi的核心概念是服务,模块称为“bundle”,每个bundle可以提供或使用服务。OSGi的优势在于其动态性,当...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个Bundle。在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来...
**背景:** OSGi (Open Service Gateway Initiative) 是一种模块化容器,它允许Java应用程序以模块化的形式组织起来,每个模块被称为一个“bundle”。OSGi不仅支持模块化编程,还支持热部署和动态配置等功能,非常...
dm Server 是一个完全模块化部署的基于 OSGi 的 Java 服务器,为运行企业 Java 应用和 Spring 应用提供更加强大的灵活性和可靠性。 在本文中,我们将通过一个简单实例,介绍如何利用 Spring-DM 开发基于 OSGi 和 ...
OSGi(Open Service Gateway Initiative)是一个定义了Java应用程序如何组织和模块化以及如何动态发现、启动、停止、更新这些模块化组件的规范。Equinox是OSGi规范的一个实现,它是由Eclipse基金会开发的。本文将...
3. OSGi的ClassLoader还支持类的重用,如果两个bundle引用了相同的类库,它们可以共享同一个ClassLoader,从而节省内存资源。 总结来说,Java ClassLoader机制是Java平台的基础,它使得程序能够动态地加载和管理类...
OSGi是动态模块系统的一个工业标准,支持模块化、面向服务和面向组件的应用程序开发。OSGi规范由OSGi联盟负责维护和更新,最新版本已经发展到了R4阶段。通过OSGi,开发者可以轻松地管理和控制应用程序中的各个模块...
在基于OSGi和Spring开发Web应用中,OSGi(Open Services Gateway Initiative)是一个开放标准,用于创建模块化Java应用程序。它允许开发者将应用程序分解为独立的模块,称为bundle,每个bundle都包含自己的类路径、...
它强调了OSGi技术与SOA(面向服务的架构)的区别与联系,以及如何在云环境中部署模块化应用。书中还探讨了使用JPA、JDBC和NoSQL等技术实现数据持久化,并讨论了与MongoDB等NoSQL数据库的集成。 最后,在部署云应用...
总结来说,OSGi提供了一个强大的模块化系统,通过服务导向的架构,使Java应用更加灵活和可维护。开发者通过掌握OSGi,能够构建更高效、可扩展的系统,同时也能更好地应对复杂的应用场景和持续变化的需求。如果你计划...
OSGi(Open Service Gateway Initiative)是一种动态模块化的服务平台,能够动态地管理和部署服务。OSGi 服务发布和获取方式是 OSGi 框架中的一种核心机制,用于发布和获取服务。下面将详细介绍 OSGi 服务发布和获取...
dmServer,全称为Dynamic Modules Server,是一个完全模块化的Java服务器,其基于OSGi,专为运行企业级Java应用和Spring应用而设计。dmServer的模块化特性使得它能够提供更加灵活和可靠的部署环境,对于那些需要频繁...
企业OSGi的一个核心优势是它能够帮助企业级应用实现模块化服务,这可以让企业应用变得更加灵活和可维护。书中还介绍了如何通过动态服务来构建企业级应用,并且提供了一些最佳实践,指导开发者如何编写企业级应用。 ...
本教程将详细讲解如何将OSGI部署为一个可运行的例子,帮助你了解其基本概念和操作流程。 一、OSGI基础 1. 模块化系统:OSGI的核心是模块化,每个模块称为一个Bundle,每个Bundle都包含类、资源和元数据,它们有...
标题中的“基于SOA和ESB企业总线的OSGi企业级应用”是一个关于构建企业级软件系统的主题,其中涉及到三个关键概念:Service-Oriented Architecture(SOA)、Enterprise Service Bus(ESB)以及OSGi(Open Service ...
应对变更是构建应用程序要解决的基本问题之一。这并不一定很难,因为处理软件并不受什么物理...变更是一个架构层面的问题,但不幸的是这一点经常被忽视。某种程度上这是符合逻辑的,因为多数时候你看不到问题将要出现
1. **模块化**:每个bundle都是一个独立的模块,有自己的类路径和资源,可以通过声明式服务来暴露和消费接口。 2. **动态性**:bundle可以在运行时安装、启动、停止或卸载,使得系统可以进行热更新,而不会中断服务...
4. **创建Spring Extension Factory**:在Eclipse RCP中,你需要创建一个SpringExtensionFactory,这是一个特殊的工厂类,负责从OSGi服务中获取Spring配置并实例化Bean。 5. **注册OSGi服务**:将...
1. 模块化开发:OSGi引入了模块化概念,每个模块称为一个Bundle,可以有自己的类路径、依赖关系和生命周期。Spring OSGi将Spring应用转化为这样的模块,便于管理和升级。 2. 动态性:OSGi容器允许在运行时安装、启动...