- 浏览: 471982 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zjxkeven:
放在自己工程上不报错,已放在服务器上就报错
java获得CPU使用率,系统内存,虚拟机内存等情况 -
wang1990cool:
能运行?我报错啊、
java获得CPU使用率,系统内存,虚拟机内存等情况 -
yue_ch:
yue_ch 写道getTotalPhysicalMemory ...
java获得CPU使用率,系统内存,虚拟机内存等情况 -
yue_ch:
getTotalPhysicalMemorySize()get ...
java获得CPU使用率,系统内存,虚拟机内存等情况 -
kjmmlzq19851226:
private RealSubject realSubject ...
代理模式,静态代理与动态代理
前面看了论坛里面关于osgi的一些讨论。讨论挺火热的,发表一下自己的见解。
笔者从08年开始使用osgi。早期在终端开发,(原公司网址hotye.com)。使用osgi对各个硬件模块、业务模块、服务模块进行分离。
osgi终端应用
在终端项目的开发。osgi是绝对占优势的。
如:
使用 模拟的密码键盘.jar 这个bundle,在运行时即可进行系统调试。
osgi后台系统
09年初开始应用在后台系统。将不同业务拆分、不同通信模块拆分。
接受广东省500台终端发送过来的请求。现日均处理请求量30w以上。
在多业务的平台上,使用osgi是有优势的。
后来离开公司通过blog也了解到,在某些外部公共的jar在多classloader下会出现一些问题。需要自行解决。
在后台业务系统应用osgi。可能出现的问题出在第三方jar的class无法替代osgi同名的class,这需要自行去处理。
淘宝的osgi
淘宝网内部分布式调用框架hsf 4.0从jboss微内核转到osgi平台。
其架构师毕玄与另外一同事出书《OSGi原理与最佳实践》,电子版本infoq有得下载,不过电子版本我看了一下是应用为主。想深入理解的还是看看osgi的中文文档好点。下载地址见附件。
结语
国内使用osgi的公司可能远远超过我们的预期。
套用林昊的话:OSGi规范对于模块的物理隔离、模块的交互、多版本这些方面都有了非常完善的机制,并且也得到了现在几乎所有的App Server厂商或开源社区的认可
而是否使用osgi,是否模块化、模块动态化?
没有使用过的没有理由一定要使用。
对于使用惯了的会认为没有模块化、模块动态化的系统很不方便。
osgi规范中
一些可能有用的记录
MANIFEST.MF:
Bundle-UpdateLocation: http://www.acme.com/Firewall/bundle.jar
描述bundle的更新地址。如果bundle需要更新,则使用这个地址进行更新。
Import-Package: org.osgi.util.tracker,org.osgi.service.io;version=1.4
声明bundle导入的包。参考导入包一节。
DynamicImport-Package: com.acme.plugin.*
包含了一个逗号分隔的动态导入包清单。参考动态导入包。
Export-Package: org.osgi.util.tracker;version=1.3
描述导出包声明。参考导出包。
最常见的版本兼容原则如下:
-
主版本号(major):不兼容的更新
-
副版本号(minor):向后兼容的更新
-
小版本号(micro):不影响接口的更新。例如,修正了一个错误。
osgi原理:
每一个bundle只会有一个单独的类加载器,类加载器形成了一个类加载的代理网络结构
类加载器可以加载类和资源,加载途径有:
-
启动类路径:启动类路径中有一个java.*的包以及它实现的包。
-
框架类路径:在框架中通常有一个单独的类加载器,加载框架实现的类和关键的服务接口类。
-
Bundle类空间:bundle的类空间由和bundle相关的JAR文件组成,以及其他和bundle紧密相关的JAR文件,比如bundle片断(参考bundle片断一节)
类空间是指一个给定的bundle类加载器可以访问到的所有的类。因此,一个指定bundle的类空间来自:
-
父类加载器(通常是来自启动类路径的java.*包中的)
-
导入的包
-
必须的bundle
-
Bundle类路径(私有包)
-
附加的片断
类空间必须是一致的,也就是说不能存在相同全名的两个类(为了防止类声明错误)。但是,在OSGi框架中,不同的类空间可以存在同名的类。在模块层,支持不同版本的类加载到相同的虚拟机中。
osgi中类加载机制:
类加载器必须通过利用在解析过程中建立的连接(wire)来找到适当的exporter。
如果一个类没有在导入包中找到,那么根据在附加的manifest中的定义在附加的空间进行查找。
全部java.*开头的都会在启动类加载器中加载,其他必须通过启动类加载器加载的包可以通过在系统属性中指定:
org.osgi.framework.bootdelegation = package-name,package-name*
类查找流程:
生命周期//todo
服务层//todo
评论
这个也一直都有争论。
有多少项目真的要用到hot swap jars...
其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。
这不好定论吧?一样东西的特性是你所需要的,那它一定可以解决你所谓的实际问题。如果你没一样是需要的话,那再完美的东西也会感觉一文不值。
我们现正在使用的后台交易系统中,使用了其bundle的独立性,保证了系统对某些业务bundle的随时去除和替换的低风险。
在各个bundle的升级中,无需停止正在运行的系统,可轻易进行refresh升级,保证了其他业务不受升级的业务影响,且在白天也可对我们的系统进行升级。
为了使用一样东西而去使用,和令一样东西为我们服务,这是不同角度的想法。
这个也一直都有争论。
有多少项目真的要用到hot swap jars...
其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。
其实。。。java解决了任何实际问题吗?
这个也一直都有争论。
有多少项目真的要用到write once run anywhere...
其实等.net从System level support language后(据说马上的事情了), java就丧失了存在的意义。。。
这个也一直都有争论。
有多少项目真的要用到hot swap jars...
其实等java从Languange level support component后(据说马上的事情了), osgi就丧失了存在的意义。。。
呵呵。真的是价值存在于地位啊~~~~
交易系统服务1.0
交易系统服务1.5
这样,两个服务就可以并存,并且新系统直接引用1.5的服务。除问题了还可以无缝回到1.0系统。
而且osgi前期复杂度比较高,入门门槛高,以传统的开发方式和思维都有巨大差异,普及难度远比ssh高的多。
从楼主的描述可以看出,使用OSGi实现的应用里完全没有传统J2EE项目的影子,终端开发,多业务平台,分布式调用框架。等等。
为什么没有做应用系统的同志采用OSGi呢?说白了还不是因为技术难度高,系统也没有必要分模块,需求不稳定,没有成熟的基础开发平台。
最后的结论应该很明显,做业务系统有没有采用OSGi划分模块的必要呢?想快速就采用jdbc+jsp或者ssh之类的组合不就行了,要是需求变动就用人顶。
反过来OSGi实际上能给项目带来什么好处?分模块,接口设计?这些都是技术上的,说得难听点儿就是在玩技术,如果业务上确实没有模块动态加载的需求,何必去趟这片浑水呢?
最后还是多嘴提个疑问:“OSGi有没有可能搞出一个像ssh之类的快速开发框架呢?让不了解OSGi的开发人员也能够在此平台上进行开发,调试,测试,部署等工作。”
发表评论
-
member系统
2013-08-05 16:18 0member 系统源码 -
hibernate generate tool
2012-09-06 11:33 0hibernate generate tool -
funcation spec and technical spec of vanceinfo
2012-08-02 11:21 0asdfasdf -
Web大数据量页面优化实践
2012-07-02 15:18 948pdf见附件 -
Eclipse Shortcuts
2012-02-29 16:31 884http://www.allapplabs.com/eclip ... -
协议的定制
2011-04-19 17:42 0哀伤的发生的发送方的 wireshark 截取发送消 ... -
uc面试
2011-04-14 18:03 0一、综合测试 1、有7 ... -
velocity输出csv的一种做法
2010-10-12 16:36 2387使用spring mvc + velocity做项目时, ... -
java平台启动脚本
2012-07-27 16:37 4144window平台java启动脚本 @e ... -
flex相关资料
2010-04-24 22:05 0http://www.adobe.com/devnet/fle ... -
开放平台的一些思考
2010-03-22 17:22 0开放平台开发人员编写rpc请求,还是直接进行服务代 ... -
web开发中的中文问题
2014-02-22 21:44 859web开发中的中文 ... -
Evaluation_strategy:java call by sharing赋值策略参数传递
2010-02-14 06:25 187关于java call by value or call by ... -
spring 3.0 应用springmvc 构造RESTful URL 示例
2010-02-04 12:22 0转载自:http://niyong.iteye.com/blo ... -
声明式缓存,View层缓存讨论
2010-02-03 23:19 1121背景:由于理财专区二期的基金数据一天更新一次。并且都是非操作型 ... -
mysql guide
2010-01-31 17:07 0mysql最大能存多少 InnoDB存储引擎将Inno ... -
面试题系列一:exception未被捕获,但有finally,请问打印结果
2010-01-23 23:33 294看代码,猜结果: package jyy.exceti ... -
hello maven
2010-01-23 23:30 2403创建项目 mvn archetype:create - ... -
有趣的实验报告
2009-12-25 12:51 236淘宝一位同事上大学时 ... -
zimbra修改记录分享
2009-12-23 22:38 4242晚上找到了jetty的日志 ...
相关推荐
将 OSGi 和 Spring 结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。 在基于 OSGi 和 Spring 的 Web 应用开发中,我们可以使用 Spring-DM 来实现模块化部署和管理。Spring-DM 是 Spring 开发组织在...
标题中的“基于SOA和ESB企业总线的OSGi企业级应用”是一个关于构建企业级软件系统的主题,其中涉及到三个关键概念:Service-Oriented Architecture(SOA)、Enterprise Service Bus(ESB)以及OSGi(Open Service ...
2. **企业级应用**:在大型企业应用中,OSGi可以帮助构建松耦合的组件,便于开发、测试和部署。 3. **IDE和工具平台**:Eclipse IDE就是一个基于OSGi的平台,其插件系统就是OSGi服务模型的体现。 四、学习资源 ...
5. **EnqiNX和OSGI的关系**:EnqiNX是一个基于OSGI的开源企业应用框架,它扩展了OSGI规范,提供了更高级的企业级功能,如安全管理、配置管理、事件管理和事务管理等。 6. **插件模块开发**:如何设计和实现OSGI插件...
综上所述,基于OSGi和Spring开发Web应用不仅能够充分利用OSGi的模块化优势和Spring的依赖注入机制,还能借助dmServer和SpringSource应用平台等工具,实现更加高效、灵活和可靠的企业级应用开发。
该规范旨在提供一个灵活且可扩展的框架,支持复杂的企业级应用开发与部署。 #### 二、OSGi核心框架解析 ##### 1. 模块化架构 OSGi的核心框架基于模块化的理念设计,每个模块被称为“Bundle”。这种模块化设计使得...
Spring框架则是一个流行的轻量级Java企业级应用开发框架,它提倡面向接口编程和依赖注入(DI)原则,有助于减少代码耦合度和提高组件的可测试性。Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将...
它最初是为了满足嵌入式设备和家庭网关的需求而设计的,但随着技术的发展,它的应用范围已经扩展到了更广泛的领域,包括企业级应用和服务。 ##### OSGi简介 OSGi是动态模块系统的一个工业标准,支持模块化、面向...
4. **灵活性**:OSGi不仅适用于企业级应用,还适用于嵌入式系统、移动应用和富互联网应用(RIA)。 #### OSGi的应用场景 - **企业开发**:OSGi最初是为了向局域网中的设备提供服务而设计的,随着Eclipse的成功,它...
这一技术最初是为嵌入式系统设计的,但现在已被广泛应用于企业级开发,尤其是在Eclipse、IBM WebSphere、Oracle以及SpringSource等平台中。 OSGi的应用场景多样,例如在BWM车载管理系统中,它提供了高效能的组件...
- **企业级应用**:OSGi常用于构建大型分布式系统,如电信设备、企业级服务器软件等。 - **嵌入式系统**:由于其动态性和资源管理能力,OSGi也适用于物联网、智能家居等嵌入式场景。 - **桌面应用**:OSGi可帮助创建...
《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...
Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、数据访问/集成、Web MVC等功能。在SSM组合中,Spring主要负责管理和协调各个组件,如数据库连接、事务管理等。 **3. ...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个Bundle。...通过实践这样的案例,开发者可以更好地掌握这些技术在企业级开发中的应用。
Spring框架则是一个全面的企业级应用开发框架,它简化了Java开发,特别是Web应用的开发。Spring提供了依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)等核心功能,还包含...
尽管OSGi未能直接纳入Java EE 6标准,但Sun公司表示将在未来的Java EE版本中考虑其角色,预示着OSGi在未来的企业级开发中将发挥更大的作用。 对于初学者,了解OSGi的运行机制和通过“Hello World”程序实践是入门的...
《Enterprise OSGI in Action》对于那些想要深入了解OSGI以及将OSGI应用于企业级开发的读者来说,是一本极好的资源。它不仅涵盖了OSGI技术的全面知识,还提供了实用的开发指导,能够帮助开发者设计和实现更加稳健和...