- 浏览: 90505 次
- 性别:
- 来自: 西安
最新评论
osgi,config.ini介绍
一、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.application.launchDefault",系统主线程不会等待任何的应用描述符服务启动。
eclipse.log.backup.max
该参数用于设定允许备份的日志文件的最大数。如果备份的日志文件的数量达到该参数的设定值,
则最早的日志文件将被删除。该参数的默认值为10,如果用户设定值小于或等于0,则系统启用默认值。
eclipse.log.size.max
每个日志文件的最大允许文件大小(单位:KB),该参数的默认值为“1000”。当日志文件达到允许的
最大值时,日志文件会循环写入。如果该参数值被设定为0或负值,Equinox系统会使用默认值。
eclipse.noExtensionMunging
如果该参数值为 "true",则遗留的注册扩展将会保留。默认情况下,
这些扩展会更新为Eclipse3.0中的新的扩展点。
eclipse.noLazyRegistryCacheLoading
{-noLazyRegistryCacheLoading}
如果该参数值为"true",平台的插件注册表缓存加载优化将不被激活。
默认情况下,配置项在需要的时候会从注册表缓存(如果存在)中加载,以提升性能。
该参数如果值为true,系统启动时会强制加载所有注册表缓存信息。
eclipse.noRegistryCache
-noRegistryCache
如果该参数值为"true",将不使用内部扩展注册缓存。
eclipse.pluginCustomization
{-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中加载类。
该参数的默认值为"true"
osgi.compatibility.
eagerStart.LazyActivation
OSGi R4.1规范强制要求所有的Bundle,包括设定了延迟激活策略的Bundle,
在允许激活前必须被标记为启动状态。规范添加了一个新方法Bundle.start(options)
使得延迟激活的Bundle可以按照设定的延迟激活策略启动。
如果osgi.compatibility.eagerStart.LazyActivation设定为"true",
所有设定了延迟激活策略的组件会被自动标记为激活状态;否则,标记了延迟激活策略的组件
必须通过Bundle.start(options)方法来启动。
该参数的默认值为"true"。
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框架使用的上下文类加载器的父类加载器类型,有效的类型包括:
• app - application classloader.
• boot -boot classloader.
• ext - extension classloader.
• fwk - framework classloader.
• ccl - 在框架启动时设定的原始的上下文类加载器(该参数的默认值).
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框架类加载器的父类加载器类型,可用的类型包括:
• app - the application classloader.
• boot - the boot classloader.
• ext - the extension classloader.
• current - 加载equinox launcher的类加载器
osgi.framework.useSystemProperties
控制将框架属性设定为全局系统属性还是由每一个框架实例自行持有。默认情况(值为true)
下框架属性也配置为系统属性。
该属性在同一个Java虚拟机中运行多个OSGi框架实例时,可让每个实例控制自己独立的属性配置。
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的类加载器的父类加载器类型。可用的类型为:
• app - 应用程序类加载器.
• boot - 启动类加载器.
• ext - 扩展类加载器.
• fwk - 框架类加载器
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签名校验策略。可选的策略包括:
• certificate - 启用证书解析和校验。
• trust - 启用证书信任校验,该策略在"certificate"策略之上。
• runtime - 在运行时校验签名的Bundle组件的内容。该策略在"certificate"策略之上。
• all -等同于"certificate,trust,runtime"。
• true - 等同于"all"。当框架启动时设定。"osgi.support.signature.verify"参数的默认值。
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, ...
相关推荐
- 在`configuration`目录下创建`config.ini`文件(如果之前不存在)。 - 编辑`config.ini`文件,确保包含以下关键配置: ```ini osgi.splashPath=platform:/base/plugins/org.eclipse.platform osgi.bundles= ...
3. **找到config.ini文件**:在`configuration`文件夹内,你会看到一个名为`config.ini`的文件。这个文件包含了MyEclipse启动时读取的基本配置信息,包括默认工作空间的位置。 ##### 第二步:编辑config.ini文件 1...
通过可执行的 Launcher 启动时,需要在 config.ini 文件中指定 osgi.bundles 参数,例如: ``` osgi.bundles=org.eclipse.osgi.services@1:start, org.eclipse.osgi.util@1:start, org.eclipse.equinox.common@1:...
最近整OSGI,整的心情很是不爽,尤其最近搞equinox命令行下的bundle调试,搞两下就很厌倦输入java -jar equinox.jar -console,然后可怜的去加载一个个bundle,虽然通过config.ini可以一把加载相应需要的bundle,但是每次...
更准确地说,它允许从包含插件和片段列表的“ eclipse”目录中生成osgi.bundles属性。 ##构建状态用法Maven坐标< groupId>...
4. 如果没有`config.ini`文件,可以创建一个新的文本文件并命名为`config.ini`。 5. 在`config.ini`文件中,添加或修改以下行以指定新配色方案的位置: ```ini osgi.configuration.area.default=@user.home/....
- 此外,还需要确保`config.ini`文件正确配置了`org.eclipse.core.runtime`以避免运行时出现无法获取服务的异常。 3. **HTTP服务问题**: - 文档中还提到了尝试访问`http://localhost/demo/page/login.htm`时遇到...
2. **编辑config.ini:**使用文本编辑器打开`config.ini`文件,查找`osgi.instance.area.default`行。此行指定MyEclipse的工作空间位置。将其值修改为你希望作为默认工作空间的目录路径,例如`C:\Users\YourName\...
1. **定位config.ini文件**:同样定位到`eclipse/configuration/`目录下。 2. **添加或修改参数**: - 如果文件中已有`osgi.instance.area.default`参数,则直接修改其值为新的工作路径,如`osgi.instance.area....
6. **启动配置**:通过配置文件(如`config.ini`)可以设置启动参数,影响Bundle的加载顺序和行为。 **进阶篇** 1. **动态部署**:OSGi环境允许在运行时动态部署新的Bundle或更新现有Bundle,无需停机,提高了系统...
1. **配置文件**:如`config.ini`,这是OSGi框架启动时读取的配置文件,用于定义启动参数、服务设置等。 2. **Bundle(模块)**:在OSGi中,Java代码被打包成bundle,每个bundle都是一个独立的模块,有自己的类路径...
- **更新配置**:汉化包可能还会包含一些配置文件,如`config.ini`,需要在MyEclipse的根目录下打开并编辑。在`config.ini`文件中,添加或修改以下内容: ``` osgi.bundles=\ @0 start \ file:/path/to/...
使用文本编辑器打开`config.ini`文件,找到`osgi.nl`(操作系统语言)这一行,将其值改为`zh_CN`,表示设置为简体中文。 6. **复制汉化文件** 将`languages`文件夹中的所有`.properties`文件复制到`plugins`目录...
6. 保存并关闭config.ini文件,然后重启Eclipse:完成上述步骤后,保存config.ini的修改并关闭文件。接着,重启Eclipse,你会看到界面已经变为中文。 7. 验证汉化效果:启动Eclipse后,检查菜单、工具栏、提示信息...
2. **配置文件**:如“config.ini”或“framework.properties”,用于配置OSGi运行时环境。 3. **启动脚本**:可能是.sh或.bat文件,用于启动Miniruntime并加载初始的Bundles。 4. **示例代码**:展示了如何编写和...
1. 创建并配置OSGi运行时:设置 Equinox 运行时环境,配置所需的系统和用户bundle,以及相关的配置文件,如`config.ini`。 2. 安装bundle:将`com.sample.web_1.0.0.jar`和其他必要的bundle安装到Equinox环境中。 ...
打开Eclipse安装目录下的configuration文件夹,找到config.ini文件并用文本编辑器打开。在文件末尾添加一行: ``` osgi.framework.extensions=eclipseme.core.hooks ``` 确保这行代码是唯一添加的,且config.ini文件...
4. **配置问题**:配置文件如config.ini或MANIFEST.MF中的配置项错误可能导致启动失败。仔细检查并修正配置信息,确保所有依赖的bundle和启动顺序都已正确设置。 5. **日志分析**:利用OSGi框架提供的日志服务,...
3. **更新插件列表**:复制完成后,不要立即启动MyEclipse,而是进入其安装目录,找到并打开`configuration\config.ini`文件。在文件末尾添加一行`osgi.bundles=reference:file:/plugins/svn*`,这行代码会告诉...
8. **启动配置**:OSGi系统启动时会读取配置文件,如config.ini,来决定哪些Bundle需要在系统启动时自动激活,以及它们的启动顺序。 9. **事件机制**:OSGi通过事件机制来传播系统状态的变化,如Bundle的启动、停止...