阅读更多

18顶
2踩

编程语言

原创新闻 推荐:为什么要使用OSGi?

2008-06-20 15:44 by 副主编 QQbyte 评论(6) 有15777人浏览
Neil说道:在Java.net的每日更新中,Chris Adamson写到了OSGi正有突出的增长,但是他说他不打算用OSGi,并说他不是唯一个。在我们OSGi社区中,与其我们热情的表达OSGi有一个多么酷的未来,还不如好好解释什么是OSGi,以及OSGi是解决什么问题的。

就核心而言,OSGi是一个基于Java的模块系统(module system for Java),这意味着什么呢?对于模块定义的主要功能之一是单元部署,意味着你能够使用这些模块建设或者下载或者安装扩展到你的应用中去。

单元部署的标准流程是把java文件放到JAR文件中,我们收集这些JAR文件并且把它们放到我们自己的classpath中,这样,有些时候,我们的应用程序就能顺利运行。为什么是有些时候?因为JAR文件不是一个模块,它只是任意代码集合的一个包。因此,当我们在运行期间加载了JAR文件,它立即消失了:classpath仅仅是一个classes的一个长列表而已。放在classpatch中JAR文件们进入这个列表,但是到了运行时间,JAR文件之间束缚消失了。

其中之一的原因是,JAR文件们没有办法为使用者隐藏运行包,令一个原因是classes加载从classpath的第一个可能位置开始,这个位置并不一定总是正确的。例如:假设一个JAR文件包含两个classes:org.foo.A 和org.foo.B,A依赖B。我们把这两个类打包在一个JAR文件中。如果另外一个JAR文件也提供org.foo.B(比如同一库的不同版本),并且这个JAR文件在classpatch的位置前面,那么我们总是得到另外一个org.foo.B,因为加载路径始终是错误的。

一个真正的模块定义不应该仅仅包含运行代码,还应该包含模块的描述信息:(a)这个模块是做什么的和谁提供这个模块等。(b)哪些模块依赖它。(c)它提供了什么给其他模块。并且在真正的模块系统中,我们为每个模块创建独立的namespace,并且为跨模块加载提供良好的方式来约束和控制。

对于我们,依赖意味着什么?简单来说,它是一连串的程序或者代码对于运行环境的假定。例如,一个java class可以假定它应该在java 5下运行,而且它能够访问Apache Log4J库。这些假定是隐含的,意味着我们并不知道它们存在直到第一次我们试图来运行代码失败。比如我们用java 1.4的环境来运行失败了。同样的,我们并不知道它打算调用Log4J,直到我们没有安装Log4J来运行它,报出了NoClassDefFoundError。

因此,我们没有办法知道一个class在某个环境是否能够运行成功,除非我们尝试过。甚至很多时候,我们并没有发现问题所在,因为他们有时候并不马上调用会出错的代码。

与此对应,OSGi让我们毫无疑惑,明确申明依赖信息。通过在JAR文件MANIFEST.MF添加头部信息,我们能够定义JAR文件运行环境。

Import-Package: org.apache.log4j
Bundle-RequiredExecutionEnvironment: J2SE-1.5


我们使用的框架负责来验证信息,并且加载独立模块。如果我们在java 1.4上安装JAR,则不会通过,我们得到明确的信息告诉我们为什么没有成功。同样,如果我们的运行环境没有安装Log4J,也会得到Log4J没有安装的报错。我们不用再面对ClassNotFoundException 或 a NoClassDefFoundError错误了!

更好的是,我们能够通过静态方式检查所有的依赖关系,在远没有开始部署和运行我们的应用之前。所有的依赖信息都是可视的,通过申明方式,都在MANIFEST.MF文件中。这样的申明方便工具来结构模块,对于第三方插件,也能立即定义我们是否需要它运行。

以上只是一个肤浅的解释。但是我希望这篇文章能够回答Chris的问题:“为什么你需要一个模块系统?”。简单来说,没有一个模块系统,一个java应用结构和部署非常容易出错。有了模块系统,java开发者不再会为“JAR hell” 和“classpath hell”头疼。

以上解释了为什么需要模块系统。但是模块系统不一定指OSGi,现在有很多其他模块系统。比如Glassfish v1和v2的HK2(V3中大部分被OSGi代替),JSR 277,以及老的Eclipse系统(OSGi成形处)。但是如果开发java系统,我依然建议你用OSGi,而不是其他模块系统。
18
2
评论 共 6 条 请登录后发表评论
6 楼 u010894593 2013-06-05 22:02
OSGI真的很强大,最近一直在找这方面的资料,看到有个OSGI中文社区也不错,讲解的很详细,推荐一下~http://www.osgi.com.cn/
5 楼 chenyongxin 2010-12-21 20:55
是啊 如果我下的每一个jar包都不依赖其它jar包多好,这样就不用满世界的findjar了
4 楼 careprad 2008-07-01 15:51
谁翻译的,不知所云
3 楼 QQbyte 2008-06-23 15:21
这篇文章是翻译自:http://neilbartlett.name/blog/2008/06/06/what-is-osgi-for/

原文是:HK2 in Glassfish V1 and V2 (which is largely replaced by OSGi in V3)

翻译成:V3中大部分被OSGi代替是没有错的。
2 楼 gml520 2008-06-20 17:15
我记得GlassFish V3 还是HK2 只是他支持OSGI而已,哪里是被OSGI 代替呢!
1 楼 simplechinese 2008-06-20 16:37
肤浅!=BB

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java生成md5密码加盐

    java、springboot生成加盐md5密码

  • java 两个bean数据对比

    java 两个实体对比

  • 【建议收藏】MD5 算法的Java Bean

    /************************************************ MD5 算法的Java Bean Last Modified:10,Mar,2001 *************************************************/ import java.io.File; import java.io.FileInputStream; im...

  • 【算法】Java实现MD5算法

    MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,用于计算消息的摘要或校验和。MD5算法将任意长度的消息作为输入,并输出一个固定长度(128位)的摘要,通常表示为32个十六进制字符。唯一性:对于不同的输入,MD5算法生成的摘要几乎是唯一的,即使输入的消息只有微小的变化,生成的摘要也会有很大的差异。不可逆性:MD5算法是单向的,即无法从摘要中还原出原始的消息。这意味着无法通过摘要来获取原始消息的内容。高效性:MD5算法的计算速度较快,适用于处理大量的数据。

  • Java实现MD5加密的三种方式

    所需jar包:commons-codec.jar。方法三:SPRING核心包。

  • 【Java】使用MD5进行加密解密(代码实现)

    我们的,对于用户来说,不应该知道我们的在正式环境,我们的数据需要通过网络传输,必须要保证明文:加密之前的内容,原始内容暗文:加密之后的内容公钥:可见的公共的钥匙私钥:不可见的私有的钥匙作用:一般对登录密码处理,用于做密码比对问题:只能加密,不能解密,特征:1. 可以加密,也可以解密2. 加密和解密的密钥是同一个作用:对数据库密码进行加密,秘钥为k,加密:s = AES(k,c)解密:c = AES(k,s)问题:1. 数据可能会被其他人2. 数据可能会。

  • 怎么Java进行MD5摘要加密?

    MD5摘要加密技术的应用场景包括:网络安全:MD5摘要加密技术可以用于保护网络通信的安全性,例如在密码验证、数字签名、文件完整性验证等方面。数据库安全:MD5摘要加密技术可以用于保护数据库中的敏感信息,例如用户密码、银行账户信息等。软件安全:MD5摘要加密技术可以用于校验软件的完整性,以防止软件被篡改或病毒感染。数字证书:MD5摘要加密技术可以用于数字证书的生成和验证,以保证证书的安全性和可信度。消息认证:MD5摘要加密技术可以用于消息认证,以保证消息的来源和完整性,防止消息被篡改或伪造。

  • Python字符串md5加密

    转自:http://www.qttc.net/201304314.html Python加密模块有好几个,但无论是哪种加密方式都需要先导入相应的加密模块然后再使用模块对字符串加密。 先导入md5加密所需模块 1 import hashlib 创建md5对象 1

  • MD5 加密算法介绍

    大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不得不提MD5,因为这是一种特殊的加密方式,它到底特殊在哪,现在我们就开始学习它 全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 加密和摘要,是不一样的 加密后的消息是完整的;具有解密算法,得到原始数据; 摘要得到的消息是不完整的;通过摘要的数据,不能得到原始数据; 所以,当看到很多人说,md5,加密,解密的时候,呵呵一笑就好了。 MD5长度 有人说md5,128位,32位,16位,到

  • 快速搞懂MD5解密原理,了解常用的MD5在线解密网站

    我们常说的MD5加密解密,是对MD5算法先加密后解密,而不是对MD5的加密。其实MD5解密本质并不是真正的解密、破解之类的,其原理只不过是加速了杂凑冲撞。

  • MD5用途

    1.防止被篡改: 1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。 2)比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。 3)SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5. 2.防止直接看到明文: 现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知

  • MD5算法原理说明

    来源---百度百科MD5 MD5算法实现: 输入:不定长度信息(要加密的信息) 输出:固定长度128-bits。由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 基本方式为:求余、取余、调整长度、与链接变量进行循环运算。得出结果。 流程图: 1.填充 在MD5算法中,首先需要对输入信息进行填充,使其位长对512求余的结果等于448,

  • Java实现MD5加密以及解密

    MD5的介绍         从本质上来说,MD5并不是一种加密算法,其全称是Message Digest Algorithm MD5(中文名:信息摘要算法第五版),为计算机安全领域广泛使用的一种散列函数,主要用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。MD5将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5

  • Java MD5算法

    转载至:http://www.cnblogs.com/youxin/archive/2011/10/16/2214434.html    JAVA MD5算法 MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法。 MD5算法的作用是让大容量信息在用数字签名软件签私人密匙前被”压缩”成一种保密的格式

  • md5的特点以及加密原理

    md5的特点以及加密原理

  • md5加密算法

    理解md5

  • MD5的Java Bean实现

    MD5的Java Bean实现. 其中包括两个版本,大家知道,它原本是用C++语言实现的,现在要有热心的朋友改为Java Bean实现,故在“翻译”的时候有所出入。

  • javabean实现MD5加密

    /** *//************************************************MD5 算法的Java Bean@author:Topcat TuppinLast Modified:10,Mar,2001*************************************************/package com.shop.bean;import jav...

  • MD5加密

    MD5

  • md5加密的代码和JAVABEAN

    用于MD5加密, 可以对于用户信息加密。 可以对于用户密码和用户隐藏的信息进行加密

Global site tag (gtag.js) - Google Analytics