- 浏览: 26680 次
最新评论
-
lin_yp:
tlde_ti 写道http://stackoverflow. ...
[Java]String内存陷阱简介 -
leaow567:
辛苦了,学习了
[Java]String内存陷阱简介 -
lin_yp:
内存分析用的是MemoryAnalyzer工具
[Java]String内存陷阱简介 -
lucky16:
同楼下啊,,
楼主用的什么tool查看的内存分析啊?
是ecl ...
[Java]String内存陷阱简介 -
来这里学java:
求教楼主使用什么工具来查看内存的??
[Java]String内存陷阱简介
osgi
一、OSGi定义
1、OSGi: Open Service Gateway Initiative
OSGi的定义为: The Dynamic Module System For Java, 用于构建动态化/模块化的Java系统.
2、OSGi特点:
支持模块化的动态部署:
基于OSGi而构建的系统可以以模块化的方式(例如jar文件等)动态的部署至框架中,从而增加、扩展或改变系统的功能
可以将系统按照模块或其他方式划分为不同的Java工程,使模块从物理级别上隔离。
支持模块化的封装和交互(Export-Package, Import-Package, OSGi Service面向接口面向服务)
支持模块的动态配置
支持模块的动态扩展(OSGi Service和扩展点方式)
模块化的设计(OSGi的模块化是物理隔离的, OSGi的模块由一个或多个bundle构成)
面向服务的组件模型的设计
动态化的设计(即插即用,即删即无)
可扩展的设计(2种方式:引用服务的方式和定义扩展点的方式)
3、Bundle:
形式上是在META-INF目录下的MENIFEST.MF文件仲加入OSGI特定描述的jar包
Bundle具有的状态: INSTALLED, RESOLVED, UNINSTALLED, STARTING, ACTIVE, STOPPING
INSTALLED
Bundle已经成功的安装了。
RESOLVED
Bundle中所需要的类都已经可用了,RESOLVED状态表明Bundle已经准备好了用于启动或者说Bundle已被停止。
STARTING
Bundle正在启动中,BundleActivator的start方法已经被调用,不过还没返回。
ACTIVE
Bundle已启动,并在运行中。
STOPPING
Bundle正在停止中,BundleActivator的stop方法已经被调用,不过还没返回。
UNINSTALLED
Bundle已经被卸载
OSGi中每个Bundle都有自己独立于其他Bundle的ClassLoader
Bundle之间交互的方式:
1, 通过Package的Export和Import
2, 通过Service的方式, 一个Bundle作为Service提供方,使用者可以找到并使用这个Service,而提供Service又存在两种方式:一种是通过BundleContext来提供,一种是使用Declarative Service来实现.
4、BS结构应用程序的开发,可以有两个选择:一个是在OSGi的框架中嵌入Http服务器,一个是采用Bridge(bridge.war)方式,在Servet容器中嵌入OSGi框架.
可使用-Dorg.osgi.service.http.port=8080来设置HttpService的端口
二、Service注册与引用
1、在OSGI框架中通过调用BundleContext来注册Service,方法是这样的:
context.registerService(服务标识名,服务实例,服务实例属性);
方法返回的是ServiceRegistration,可以通过返回的这个ServiceRegistration来卸载这个Service。
在stop方法中通过这样的方法来卸载注册的这个Service:
serviceRegistration.unregister();
2、在OSGI框架中通过这样的方法来获取服务:
ServiceReference serviceRef=context.getServiceReference(服务标识名);
Object service=context.getService(serviceRef);
下述代码片段展示了如何向OSGi服务注册表发布服务以及如何查找其他Bundle发布的服务:
public void start(BundleContext context) throws Exception {
//获取OSGi Log服务的服务引用
ServiceReference logSr = context.getServiceReference(LogService.class.getName());
//根据Log服务引用获取LogService服务实例
log = (LogService) context.getService(logSr);
//创建StringService接口服务实例
StringService ss = new StringServiceImpl(log);
//设定StringService的属性
Hashtable<String, String> properties = new Hashtable<String, String>(3);
properties.put(Constants.SERVICE_ID, StringService.class.getName());
properties.put(Constants.SERVICE_VENDOR, "ACME");
properties.put("PropName", "PropValue");
//使用BundleContext注册发布StringService服务
context.registerService(StringService.class.getName(), ss, properties);
}
三、Equinox运行环境
1、建立独立的Equinox运行环境:
java -Dorg.osgi.service.http.port=8080 -jar equinox.jar –console
2、导出各Bundle工程为jar:
首先打开MANIFEST.MF,在里面Runtime标签项的Classpath中增加对于lib中jar包的引用:
打开工程里的build.properties文件,选中其中的lib目录:
选中\工程,右键,选择Export,选中弹出页面中的Deployable plug-ins and fragments
3、从外部启动Equinox
java –jar plugins/org.eclipse.osgi.jar –configuration configuration –console
在当前的configuration目录下放置一个config.ini
Equinox OSGi提供了环境变量"osgi.configuration.area",该变量指明了配置文件config.ini的存储路径。
java -Dosgi.console -Dosgi.configuration.area=. -jar org.eclipse.osgi_<版本号>.jar
执行"java -Dosgi.console -jar org.eclipse.osgi_<版本号>.jar"后,系统给出"osgi>"命令输入提示。输入"ss"命令后回车,显式了系统启动的Bundle列表,id列为该Bundle在OSGi运行环境中的唯一运行标识,State列为该Bundle当前的状态,Bundle列显示了该Bundle组件的SymbolicName。
四、OSGi规范
1、Bundle的元数据信息:
属性 |
属性描述 |
Bundle-Activator |
Bundle的Activator类名。 示例: Bundle-Activator:org.riawork.demo.Activator |
Bundle-Category |
Bundle的分类属性描述。 示例: Bundle-Category:Opendoc,OSGI |
Bundle-Classpath |
Bundle的Classpath。 示例: Bundle-Classpath:/bin,/lib/log4j.jar |
Bundle-ContactAddress |
提供Bundle的开发商的联系地址。 示例: Bundle-ContactAddress:ShangHai |
Bundle-Copyright |
Bundle的版权。 |
Bundle-Description |
Bundle的描述信息。 |
Bundle-DocURL |
Bundle的文档URL地址。 |
Bundle-Localization |
Bundle的国际化文件。 示例: Bundle-Localization: OSGI-INF/l10n/bundle |
Bundle-ManifestVersion |
定义Bundle所遵循的规范的版本,OSGI R3对应的值为1,OSGI R4对应的值为2。 |
Bundle-Name |
Bundle的有意义的名称。 |
Bundle-NativeCode |
Bundle所引用的NativeCode的地址。 |
Bundle-RequiredExecutionEnvironment |
Bundle运行所需要的环境,如可指定为需要OSGI R3、Java 1.4、Java 1.3等。 |
Bundle-SymbolicName |
Bundle的唯一标识名,可采用类似java package名的机制来保证唯一性。 |
Bundle-UpdateLocation |
Bundle更新时连接的URL地址。 |
Bundle-Vendor |
Bundle的开发商。 |
Bundle-Version |
Bundle的版本。 |
DynamicImport-Package |
Bundle动态引用的package。 |
Export-Package |
Bundle对外暴露的package。 |
Fragment-Host |
Fragment类型Bundle所属的Bundle名。 |
Import-Package |
Bundle引用的package。 |
Require-Bundle |
Bundle所需要引用的其他的Bundle。 |
2、动态的获取引用的package
动态的获取package和直接引用package的策略不同的地方在于:如果采用直接引用package的策略(也就是import-package),那么OSGI框架在resolve Bundle时就会对其import的package做检测,如不可用的话就会导致resolve失败;但如果采用动态获取引用package的策略,则直到使用这个package时才会去获取,而不是在resolve阶段获取。
在OSGI框架有这么两种方法来实现动态的获取引用的package:
Dynamic Imports:
使用DynamicImport-Package的来方式来引用其他Bundle export的package。
如DynamicImport-Package:org.riawork.opendoc.osgi
Resolution Directive:
使用import-package,增加附加属性来声明引用的package采用dynamic方式载入,例: Import-package: org.riawork.opendoc.osgi;resolution:=optional
3、Require Bundles
使用Require-Bundle,就可以使用该Bundle中所有的资源文件和export的package
4、Bundle的状态:
Bundle的状态
Bundle的状态分为六种
INSTALLED
Bundle已经成功的安装了。
RESOLVED
Bundle安装完毕后,OSGI框架将对Bundle进行解析,以检测Bundle中的类依赖等是否正确,如有错误则仍然处于INSTALLED状态,如成功Bundle的状态则转变为RESOLVED。RESOLVED状态表明Bundle已经准备好了用于启动或者说Bundle已被停止。
STARTING
Bundle正在启动中,BundleActivator的start方法已经被调用,不过还没返回。此时会调用MANIFEST.MF中的Bundle-Activator属性对应的BundleActivator类的start方法
ACTIVE
Bundle已启动,并在运行中。
STOPPING
Bundle正在停止中,BundleActivator的stop方法已经被调用,不过还没返回。此时会调用MANIFEST.MF中的Bundle-Activator属性对应的BundleActivator类的stop方法
UNINSTALLED
Bundle已经被卸载了
5、类的加载
在OSGI模块层中则为模块提供各自的classloader
如果使用了Require-Bundle,那么就可以使用该Bundle中所有的资源文件和export的package。
Fragment Bundles Fragment Bundle是一种比较特殊的Bundle,它本身并不拥有独立的classloader,可以把它看成是Bundle的一种附属,它通过在元数据中指定Fragment-Host来说明其所依附的Bundle,只有在该Bundle使用时才会激活到这个Fragment Bundle。
五、建议
1、接口和实现分离为不同的Bundle
接口更新的情况通常很少,当接口和实现在同一Bundle中,当Bundle更新时,由于接口所在的package要对外export,这样会引发依赖这个package的Bundle的classloader的重建。
2、尽量使用OSGi Service来作为Bundle之间的交互方法
3、不强依赖任何OSGi服务,对于依赖OSGi Service的cardinality尽量配置为”0..1”或”0..n”
这样,即使在这些依赖的OSGi Service实现更新的时候,实例仍然不会被重建。
4、对于更新频率较高的Bundle尽量不要对外export package
5、不要采用缓存的方式来保存其他bundle export package的类对象
6、不强依赖其他Bundle的资源,通过扩展点的方式来实现,避免出现强依赖其他Bundle资源或功能
7、创建共享library Bundle
在一个项目中,每个模块都会需要用到一些共同的第三方的jar包,按照正常的方式去搭建Bundle的话,需要在每个Bundle的lib中都放入其所需要的jar包文件,这样会造成的问题有:
所依赖的第三方库重复出现,造成最后的Bundle文件过大;
各Bundle维护各自的第三方库,有可能会造成引用的第三方库版本不同;
解决这个问题:
创建一个共享的第三方库的Bundle;
将需要共享的第三方库的jar文件放入此Bundle;
将其他Bundle需要的第三方库的jar的package对外Export;
需要使用第三方库的Bundle通过import package的方式引用所需的package
8、使用Import-Package代替Require-Bundle
在设计Bundle应遵循低耦合,高内聚的原则,不要把和Bundle不相关的功能放入到Bundle中
9、不要在初始化Bundle时引用OSGi服务, 在任何Bundle的启动尽量不对别的Bundle造成强依赖
六、附录: Equinox配置参数详解
系统参数 命令行参数 参数说明 eclipse.activateRuntimePlugins 用于控制运行时(Runtime)插件的激活。如果RCP应用程序不需要使用运行时插件提供的服务, 可以将该属性值设定为false,从而避免在系统启动时激活运行时插件。 eclipse.allowAppRelaunch 如果值为true,当当前运行的应用程序Application退出时,Equinox系统主线程会一直等待该应用的 另一个应用被启动。如果停止 system.bundle即Bundle ID值为0的Bundle, 则会强制Equinox主线程停止等待另一个应用启动。该参数的默认值为false。 eclipse.application -application 该Equinox系统所启动的应用程序的标识符。该参数值会覆盖eclipse.product系统属性中定义 的应用程序。 eclipse.application.launchDefault 当系统启动时,该属性用于自动启动默认的Application应用。默认的应用通过eclipse.application 或 eclipse.product系统属性设定。该属性的默认值为"true"。如果该属性值设为false, 当系统启动时不会自动启动默认的 application,系统主线程会持续等待, 直至一个application通过应用描述符服务(application descriptor service)启动。 eclipse.application.registerDescriptors 该属性控制所有安装的application是否注册相应的应用描述符服务。该属性的默认值为false。 如果设定为false,只有默认的 application在服务注册表中具有相应的应用描述符服务; 如果设定为true,所有安装的application在OSGi服务注册表中都具有相应的应用描述符服务注册。 eclipse.commands 在启动Equinox系统时,使用该属性参数将用回车换行方式分隔的命令行参数列表传递给系统。 eclipse.consoleLog 如果该属性参数设定且值为true,则所有的日志输出都会传送到Java的System.out。 该属性参数可以和-debug参数结合用于调试。 eclipse.debug.startupTime 该属性用于设定系统运行时Java虚拟机启动的时间(单位为毫秒) eclipse.ee.install.verify 如果该属性值设定为true,在Bundle组件安装时,OSGi框架会检查框架运行所需要的运行环境。 该参数默认值为false。 eclipse.exitOnError 该参数设定为true时,如果系统在运行时遇到无法处理的错误,则系统会退出。该参数默认值为true。 eclipse.ignoreApp 该参数设定为true时,系统主线程将不启动默认的application,同时停止并退出系统进程。 该属性参数的默认值为false。 eclipse.log.backup.max 该参数用于设定允许备份的日志文件的最大数。如果备份的日志文件的数量达到该参数的设定值, 则最早的日志文件将被删除。该参数的默认值为10,如果用户设定值小于或等于0,则系统启用默认值。 eclipse.log.size.max 每个日志文件的最大允许文件大小(单位:KB),该参数的默认值为“1000”。当日志文件达到允许的 最大值时,日志文件会循环写入。如果该参数值被设定为0或负值,Equinox系统会使用默认值。 eclipse.noExtensionMunging 如果该参数值为 "true",则遗留的注册扩展将会保留。默认情况下, 这些扩展会更新为Eclipse3.0中的新的扩展点。 eclipse.noLazyRegistryCacheLoading 如果该参数值为"true",平台的插件注册表缓存加载优化将不被激活。 默认情况下,配置项在需要的时候会从注册表缓存(如果存在)中加载,以提升性能。 该参数如果值为true,系统启动时会强制加载所有注册表缓存信息。 eclipse.noRegistryCache -noRegistryCache 如果该参数值为"true",将不使用内部扩展注册缓存。 eclipse.pluginCustomization 保存默认插件配置的属性文件的文件路径。该属性文件中的配置项会覆盖主配置中的插件属性。 如果该参数值为相对路径,则系统会认为路径相对于当前eclipse工作目录。 eclipse.product -product 运行的产品标识。该参数控制各种产品定义信息和产品使用的application eclipse.service.jobs 该参数控制org.eclipse.core.jobs插件是否注册为OSGi服务, 如果值为"false"则不注册为OSGi服务 eclipse.service.pref 该参数控制org.eclipse.equinox.preferences插件是否注册为OSGi服务, 如果值为"false"则不注册为OSGi服务 eclipse.startTime 该参数在Equinox启动时设定。该参数的值为System.currentTimeMillis()方法返回值的字符串表示。 用户不需要设定该参数 eclipse.stateSaveDelayInterval 该参数为系统状态变更请求的序列化延迟间隔,单位毫秒,默认值为30000ms。 该参数用于阻止系统管理操作(如安装Bundle组件)过程中产生的大量的磁盘写操作。 eclipse.vm -vm 该参数指向系统启动所需的Java执行程序(JRE)的路径。如果不指定此项, 则 JRE 位于 jre(它与Eclipse.exe 可执行文件位于同一目录)。 此信息用于构造系统重启使用的命令行。 eclipse.vmargs -vmargs 该参数用于配置系统启动所需的Java虚拟机参数。此信息用于构造系统重启使用的命令行。 osgi.adaptor OSGi框架启动使用的框架适配(framework adaptor)的类名称 osgi.arch -arch 定义 Eclipse 平台在其上运行的处理器体系结构。Eclipse 平台通常使用 Java os.arch 属性的常用值来计算最佳设置。如果在此处指定该项,则这是 Eclipse 平台使用的值。此处指定的值 可作为 BootLoader.getOSArch() 用于插件。示例值有:“x86”、“sparc”、“PA-RISC”和“ppc”。 osgi.baseConfiguration.area 当osgi.configuration.area参数未指定时,该参数用于指定基本的配置信息。 osgi.bundlefile.limit 该参数用于限定框架保持打开的Jar文件的数量。该参数允许的最小值为10,默认最大值不受限定。 osgi.bundles 以逗号分隔的bundle列表。该列表中的bundle在系统启动运行时,会自动安装并根据设定启动(可选) 。每一个Bundle配置形式遵循下面的规范: [@ [] [":start"]] 如果忽略start-level (>0的整数)被忽略,则将该Bundle设定为默认的启动等级。 如果"start"标记被设定 ,则该Bundle在安装后框架会启动该Bundle。"Simple bundle location"被解释为相对于 框架所作路径的上一级目录。"start-level"标明该Bundle应该在哪一OSGi启动等级运行该Bundle, 如果。"start-level"未被设定,则系统会自动为Bundle配置适当的默认启动级别。 osgi.bundles.defaultStartLevel 系统安装的所有的Bundle的启动级别。用户可以在osgi.bundles配置中为某一Bundle指定特定的启动 等级。如果未设定Bundle的启动等级,则Bundle的启动等级为该参数设定值。该参数默认值为4。 osgi.compatibility.bootdelegation 如果该参数值为"true",当一个类或资源查找不到时,类加载器会启动父类加载器进行最后的查找。 该参数的默认值为"true" osgi.compatibility.errorOnFailedStart Bundle 组件可以通过Bundle清单属性"Eclipse-LazyStart"或"Bundle-ActivationPolicy"标记自身的 延迟激活策略。自OSGi R4.1规范开始,如果一个设定了延迟激活策略的Bundle启动失败, 从该Bundle进行类加载必须仍然成功。在OSGi R4.1之前,Eclipse 定义的延迟激活策略允许启动失败的Bundle抛出类加载异常。如果该属性设定为"true", 那么在启动失败的 Bundle中加载类时将导致类加载错误;否则, 仍然允许从启动失败的Bundle中加载类。 osgi.compatibility. OSGi R4.1规范强制要求所有的Bundle,包括设定了延迟激活策略的Bundle, 在允许激活前必须被标记为启动状态。规范添加了一个新方法Bundle.start(options) 使得延迟激活的Bundle可以按照设定的延迟激活策略启动。 所有设定了延迟激活策略的组件会被自动标记为激活状态;否则,标记了延迟激活策略的组件 必须通过Bundle.start(options)方法来启动。 osgi.checkConfiguration 如果该参数值为"true",系统会检查配置缓存的时间戳以保证缓存内容反映了安装的Bundle的最新配置。 该参数默认值为"false"。 osgi.classloader.singleThreadLoads 如果该参数值为"true",那么同一时间只能有一个线程允许加载类。默认值为"false"。 该参数用于屏蔽可能引发死锁的虚拟机Bug。 osgi.clean 如果该参数值为"true",系统在启动时,会清除OSGi框架及Eclipse运行时缓存的任何数据。 该参数会清除Bundle依赖缓存和eclipse扩展注册缓存。适用该参数可以强制eclipse 重新初始化上述缓存。 osgi.configuration.cascaded 如果该参数设定为"true",该配置会级联到父配置。父配置通过osgi.sharedConfiguration.area参数设定。 osgi.configuration.area -configuration 系统配置(默认为config.ini)的存储路径。 osgi.configuration.area.default 系统配置(默认为config.ini)的默认存储路径。该参数值只有在参数"osgi.configuration.area " 未设定时适用。 osgi.console -console [port] 如果该参数设定为一个非空值,系统会启用OSGi控制台。如果该参数的值是一个适当的整数, 系统会将该值作为控制台监听用户输入的端口,同时也作为控制台的输出端口。 osgi.console.class 该参数用于设定运行的控制台实现的类名称。 osgi.console.encoding 该参数用于设定控制台输入与输出信息的编码方式。如果该参数未设定, 系统默认使用虚拟机file.encoding属性的值,如果file.encoding属性未设定, 则默认使用iso8859-1作为编码方式。 osgi.contextClassLoaderParent OSGi框架使用的上下文类加载器的父类加载器类型,有效的类型包括: osgi.debug -debug 将平台置于调试方式,并从给定位置处的文件装入调试选项(如果指定的话)。 此文件指示哪些调试点可用于插件以及是否已启用它们。如果未给出文件位置, 则平台在启动 eclipse 的目录中查找称为“.options”的文件。URL 和文件系统路径都可作为文件位置。 osgi.dev -dev [来源 www.iocblog.net] 将平台置于开发方式。将可选类路径条目(用逗号分隔的列表)添加至每个插件的运行时类路径。 例如,当工作空间包含要开发的插件时,指定 -dev bin 会为每个插件项目的名为 bin 的 目录添加类路径条目,允许在其中存储最新生成的类文件。除去了冗余或不存在的类路径条目。 osgi.filepermissions.command 该参数设定一个可选的操作系统命令用于设定抽取的本机代码的文件操作权限。在一些操作系统中, 某些本机代码需要设定为可执行,可以使用此参数设定执行授权的命令。如UNIX类型的操作系统, 用户可以使用如下代码设定某一可执行文件具有执行权限: osgi.filepermissions.command="chmod +rx [fullpath]" 此处[fullpath]用于指代实际的文件路径。 osgi.framework -framework OSGi框架实现的位置(URL格式)。如osgi.framework=file://d:/proxy/org.eclipse.osgi.jar osgi.frameworkClassPath 该参数可以为OSGi框架指定一个以逗号分隔的类路径列表。如果设定类路径为相对路径, 则系统认为相对于OSGi框架的所在路径(参考osgi.framework)。 osgi.framework.extensions 该参数用于指定框架扩展的Bundle列表。每一个Bundle遵循如下规则: 系统会在org.eclipse.osgi Bundle的父目录中查找Simple bundle location。框架扩展可以用来 使用不同的框架适配来运行Eclipse。框架扩展可用包含一个eclipse.properties文件来设定系统属性。 例如,一个提供了自定义框架适配实现的框架扩展可以使用osgi.adaptor属性参数设定其框架适配 实现的类名称。 osgi.framework.shape 该属性设定Eclipse OSGi框架实现的形式。Eclipse启动时自动设定该属性,不需要用户配置。 属性值"jar"表明框架实现包含在一个单一的Jar文件中;属性值"folder"表明框架实现包含 在一个文件目录中。 osgi.framework.library.extensions 用逗号分隔的附加扩展类库文件查找列表。如果未设定此参数,则系统只使用 System.mapLibraryName(String)方法返回的值作为查找路径。有些特定的系统允许一种以上的类库扩展, 如AIX系统允许.a和.so类库文件扩展,而System.mapLibraryName (String)方法只返回.a的类库文件 扩展。 osgiframeworkParentClassloader OSGi框架类加载器的父类加载器类型,可用的类型包括: osgi.framework.useSystemProperties 控制将框架属性设定为全局系统属性还是由每一个框架实例自行持有。默认情况(值为true) 下框架属性也配置为系统属性。 osgi.hook.configurators 用逗号分隔的hook配置列表。如果设定了该配置参数,那么系统将只使用该列表中指定的hook配置。 所有在hookconfigurators.properties文件中配置的hook将被忽略。 osgi.hook.configurators.include 用逗号分隔的附加hook配置列表。该参数可用于配置可选的hook配置, 如果参数"osgi.hook.configurators"被设定,则该参数的值将被忽略。 osgi.hook.configurators.exclude 用逗号分隔的被排除的hook配置的列表。该参数可用于排除hookconfigurators.properties 配置文件中配置的hook。如果参数"osgi.hook.configurators"被设定,则该参数的值将被忽略。 osgi.install.area -install 平台的安装位置。该位置指明了Eclipse插件的位置,一般为eclipse目录下的plugins目录。 osgi.instance.area -data 运行系统实例数据存储区。插件使用此位置存储其运行数据。默认情况下,用户可以在此参数下 的.metadata目录及子目录中找到这些数据。该参数也是资源插件用来存储项目的位置, 即工作空间Workspace。 osgi.instance.area.default 运行系统默认的实例数据存储区。系统中的插件使用此位置存储各自的运行数据。 例如,资源插件使用该位置存储所有项目(即工作空间workspace)。 该参数仅在配置参数"osgi.instance.area"未设定时启用。 osgi.locking 运行平台所使用的锁类型。可用的类型包括:"java.io", "java.nio", 和 "none"。默认值为"java.nio"。 如果JRE不支持"java.nio",那么"java.io"将作为默认值。 osgi.manifest.cache Bundle清单的生成和查找路径。Bundle清单缓存位置可以独立设定,默认为系统配置存储区。 osgi.nl -nl 定义 Eclipse 平台在其上运行的语言环境的名称。Eclipse 平台通常自动计算最佳设置。 如果在此处指定该项,则这是 Eclipse 平台使用的值。此处指定的值可作为 BootLoader.getNL() 用于插件。示例值有:“en_US”和“fr_FR_EURO”。 osgi.nl.user 当用户在命令行添加-nl参数时,该属性设定locale的名称。 osgi.noShutdown -noExit 如果值为"true",当eclipse应用程序停止时,Java虚拟机并不退出。 这在eclipse应用停止后检查OSGi框架非常有帮助。 osgi.os -os 定义 Eclipse 平台在其上运行的操作系统。Eclipse 平台通常使用 Java os.name 属性的常用值来计算最佳设置。如果在此处指定该项,则这是 Eclipse 平台使用的值。 此处指定的值可作为 BootLoader.getOS() 用于插件, 并用于解析插件清单文件中提及的路径中 $os$ 变量的出现。 示例值有:“win32”、“linux”、“hpux”、“solaris”和“aix”。 osgi.parentClassloader 框架中所有安装的Bundle的类加载器的父类加载器类型。可用的类型为: osgi.requiredJavaVersion 运行Eclipse所要求的Java环境的最低版本。默认值为"1.4.1"。 osgi.resolverMode 对安装到框架中的Bundle的解析模式。设定值为"strict"时, 框架将使用严格的解析模式。默认的解析模式是不严格的。当使用严格模式解析 Bundle时, 框架从标记了x-internal 或 x-friends标签的导出包中加载类或资源时使用更严格的访问限定。 osgi.sharedConfiguration.area Eclipse平台运行时的共享配置存储区。如果参数"osgi.configuration.cascaded"设定为"true" , 该参数定义的共享配置存储区内的配置将作为根配置。 osgi.splashLocation 运行系统时,启动屏幕(.bmp文件)的URL绝对路径。该属性会覆盖"osgi.splashPath"属性的设定值。 osgi.splashPath 用逗号分隔的URL,该URL指向一个名为"splash.bmp"的文件。 该属性会被配置参数"osgi.splashLocation"设定的任何值覆盖。 osgi.startLevel 框架的启动级别,默认启动级别为6。 osgi.support.signature.verify 用逗号分隔的Bundle签名校验策略。可选的策略包括: osgi.syspath 指定Eclipse OSGi框架(org.eclipse.osgi)实现的存储路径,如"/eclipse/plugins"。 该属性在Eclipse平台启动时由系统设定,不需要用户配置。 osgi.user.area -user 用户数据的存储位置。该位置特定于操作系统用户,与Eclipse安装位置无关,可用于存储用户配置数据。 osgi.user.area.default 用户数据的默认存储位置。该位置特定于操作系统用户,与Eclipse安装位置无关, 可用于存储用户配置数据。该属性只在参数"osgi.user.area"未设定时使用。 osgi.ws -ws 该参数设定窗口系统类型,如win32, motif, ...
该参数不同于"eclipse.application.launchDefault",系统主线程不会等待任何的应用描述符服务启动。
{-noLazyRegistryCacheLoading}
{-pluginCustomization}
该参数的默认值为"true"
eagerStart.LazyActivation
如果osgi.compatibility.eagerStart.LazyActivation设定为"true",
该参数的默认值为"true"。
该属性在同一个Java虚拟机中运行多个OSGi框架实例时,可让每个实例控制自己独立的属性配置。
相关推荐
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建可模块化的Java应用程序。它提供了一种灵活的框架,使得开发者可以构建、部署和管理模块化组件,这些组件被称为服务或bundle。OSGI的核心理念是将...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序由一系列可独立更新和替换的模块组成,这些模块称为“bundle”。在本实例中,我们将探讨如何利用OSGI技术来开发Eclipse...
OSGi(Open Services Gateway Initiative)学习笔记(一) 在IT领域,OSGi是一种模块化系统和Java服务平台,它提供了一种动态管理软件组件的能力。本文将深入探讨OSGi的基本概念、架构以及如何使用它来构建可扩展和...
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
《深入理解OSGi:以org.eclipse.osgi_3.7.0.v20110613及其源码为例》 OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了动态模块化的解决方案,使得Java应用程序能够更好地管理和...
OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许在单个JVM上运行多个版本的相同库或服务,从而解决了不同版本jar包冲突的问题。本示例通过一个名为“myself”的工程,展示了如何...
OSGi(Open Services Gateway Initiative)是一个由OSGi联盟(OSGi Alliance)维护和发展的开放性规范,它定义了如何在Java平台的基础上实现模块化编程和服务动态化。OSGi规范使得Java程序可以被设计成一套小型的、...
OSGi(Open Services Gateway Initiative)是一种Java平台上的模块化服务框架,它定义了一种标准,使得开发者能够构建可互操作的、动态的、模块化的软件系统。OSGi的核心概念是基于Java的模块化,它的主要目标是为...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统,它为开发人员提供了一种动态、模块化的运行时环境。在OSGi中,应用程序被分解为称为“bundle”的独立单元,这些bundle可以相互依赖并独立地加载、...
OSGI(Open Services Gateway Initiative)是一种模块化系统和Java服务框架,它允许应用程序以模块化的方式构建,每个模块称为一个Bundle。在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来...
OSGI组件编程是一种在Java平台上构建模块化应用程序的方法,它由OSGi联盟制定标准,并被广泛应用于企业级软件开发,尤其是对于需要高度可扩展性和动态性的系统。在本教程中,我们将深入探讨如何使用Eclipse和Equinox...
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和交互的服务。林昊所著的《OSGI实战》与《OSGI进阶》是深入理解OSGI技术的重要参考资料,适合...
这个压缩包包含了关于OSGI的重要文档,分别是“OSGi R4核心规范文档”、“OSGi服务文档”以及“OSGi-最佳原理与实践”(王昊编著)。下面将详细介绍这些文档所涵盖的关键知识点。 首先,"OSGi R4核心规范文档"是...
《企业OSGi实战》一书是OSGi企业应用的权威指南,它不仅涵盖了OSGi在企业环境中的应用,还提供了Java企业版(Java EE)与OSGi特性的融合方法。本书详细介绍了模块化编程的重要性,以及OSGi如何强化Java的模块化能力...
标题 "org.osgi.core-4.2.0" 指的是一个特定版本的 OSGi(Open Services Gateway Initiative)核心框架库,版本号为 4.2.0。OSGi 是一个 Java 平台的模块化系统和服务平台,它提供了一种标准的方式来组织和管理 Java...
OSGi规范中文版是一本全面介绍OSGi技术的书籍,它不仅涵盖了OSGi技术的基础知识,还详细介绍了OSGi的内部结构和工作原理,对于想要深入学习和应用OSGi技术的开发者而言,是一本非常有价值的参考书。 ### OSGi规范的...
OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化Java应用程序。它提供了一种动态的、可扩展的框架,使得开发人员可以构建、部署和管理软件组件。本资源包含两本书籍:“OSGi原理与最佳实践...
资源名称:OSGI原理与最佳实践内容简介:国内第一本OSGi图书OSGi国内推广者林昊多年经验的结晶涵盖OSGi从入门到深入的知识体系引领OSGi国内研究和普及本书基于作者多年使用OSGi的经验而编写,涵盖了OSGi从入门到深入...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...