OSGi入门笔记

合集下载

OSG学习笔记-五

OSG学习笔记-五

OSG学习笔记第一章OSGSample一、OSG中的示例程序简介1.example_osganimate一)演示了路径动画的使用(AnimationPath、AnimationPathCallback),路径动画回调可以作用在Camera、CameraView、MatrixTransform、PositionAttitudeTransform等四种类型的节点上。

二)演示了osgSim::OverlayNode的使用2.example_osganimationeasemotion一)演示了osgAnimation::EaseMotion的使用,EaseMotion可以用于表达位移、速度值随时间的变化情况,通过不同的模板参数(functor),实现了不同的变化曲线。

二)程序中用到了一个使用osgWidget构造的弹出式菜单。

3.example_osganimationhardware一)演示了在osgAnimation::RigGeometry中使用自定义RigTransformImplementation的方法。

二)可以参考程序中获取骨骼动画模型包含的动画列表的方法。

4.example_osganimationmakepath一)演示了osgAnimation::Sampler采样器的使用,更新物体颜色(vec4)、物体位置(vec3)。

Sampler派生模板类用于在一组已知离散数据样本的基础上,进行插值计算,得到连续数据。

通过模板参数支持多种插值方法。

二)在更新物体位置这方面,与路径动画AnimationPath类似,但它需要自己写回调来更新节点矩阵,好处是能够使用更灵活的方式来进行数据采样,而AnimationPath只能进行线性内插。

5.example_osganimationmorph一)演示了利用osgAnimation::MorphGeometry实现几何体变形动画的方法。

6.example_osganimationnode一)同osganimationmakepath演示的功能基本相同。

osgi学习参考资料

osgi学习参考资料

OSGI●OSGI(Open Service Gateway Initiative)技术面象java的动态模型系统OSGi规范的核心组件是OSGi框架OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。

●OSGI架构运行环境:是java环境的规范模块:定义类的装载策略生命周期管理:增加了能够被动态安装、开启、关闭、更新和卸载的bundles服务注册:提供了一个面向bundles的考虑到动态性的协作模型●Eclipse初识OSGiEclipse->run->Run Configurations->OSGi Framework选中OSGi Framework,右键new,去掉所有勾选的bundles,然后通过查找关键字osgi 找到并选中然后点击Run,在控制台可以看到输入:ss表示环境已经正常●OSGiHelloWorld在eclipse中创建一个Plug-in工程也就是说建立一个标准的OSGi bundle工程输入bundle相关的元素信息⏹Plug-in ID指的是Bundle的唯一标识,在实际项目中可以采用类似java的包名组织策略来保证标识的唯一性⏹Plug-in Version指的是Bundle的版本⏹Plug-in Name指的是Bundle的更具有意义的名称⏹Plug-in Provider指的是Bundle的提供商⏹剩下最关键的就是Activator部分了,这里填入自己的一个类名就可以了,在工程建立时eclipse会自动建立这个类打开自动生成的代码,可以看到此类中有两个方法start和stop;其中start方法是在Bundle被启动的时候调用的,stop是在Bundle被停止的时候调用的然后分别在这两个方法中各输入一句话运行⏹Run Configuration,选中当前工程和最初选择的OSGI的jar包,将其它所有不需要的bundle去掉⏹设置当前工程的Auto-Start属性为false⏹最后点击Run,在Console中出现“osgi>”,表示我们已经成功启动了第一个OSGi应用⏹在osgi>提示符下输入ss,然后回车,可以看到如下图⏹此时我们的自己开发的bundle已经被安装并完成了解析,但是没有启动,接下来输入start 1(其中1代表ss查看到的id),我们会看到”HelloWorldBundle started!”被输出了,通过ss可以看到HelloWorld_1.0.0的state变为Active,说明已成功启动⏹然后输入stop 1,同样能够输出“HelloWorldBundle stopped!”,同时再用ss查看,HelloWorld_1.0.0的state又变回RESOLVED.●OSGI的Bundle中内嵌使用http服务首先看看在OSGi中怎么使用内嵌的jetty容器⏹Run Configuration中只选中“org.eclipse.osgi”和“org.eclipse.equinox.http.jetty”,然后点击"Add Required Bundles"即可⏹默认的Jetty监听的端口为80,可又通过指定运行参数org.osgi.service.http.port来修改围住端口,例如要想使用8080端口,可又切换到 "Arguments"页(不修改也可以):⏹启动浏览器,输入:http://localhost或者http://localhost:8080看到如下界面表示运行成功创建一个简单的osgi的bundle,由于要结合http服务,需要添加依赖包:找到MANIFEST.MF,切换到Dependencies页面,在Imported Packages里添加如下三个包✧javax.servlet✧javax.servlet.http✧org.osgi.service.httpeclipse有一个内嵌的HttpService的实现,它位于包“org.osgi.service.http”下,一旦这个service所在的osgi bundle启动了,就会有一个内嵌的http容器被启动,这个service就会被注册。

osgi入门学习

osgi入门学习

OSGi是目前动态模块系统的事实上的工业标准,虽然一开始只是作为嵌入式设备和家庭网关的框架来使用,但是实际上它适用于任何需要模块化、面向服务、面向组件的应用程序。

而Equinox则是的Eclipse所使用的OSGi框架,是Eclipse强大的插件体系的基础,Eclipse的稳定可靠性也为该框架带来了声誉。

本文章就将演示如何在Eclipse环境下利用Equinox框架进行OSGi应用开发。

首先解释了实现上述应用程序所必需了解的基本概念和基础知识,并结合示例代码演示OSGi开发的一些重要技术,最后探讨了基于OSGi应用程序一般所采用的架构,以及如何将Equinox OSGi应用程序脱离Eclipse而部署为一个标准的Java应用程序。

一·Osgi及框架简介OSGi简介OSGi是目前动态模块系统的事实上的工业标准,虽然一开始只是作为嵌入式设备和家庭网关的框架来使用,但是实际上它适用于任何需要模块化、面向服务、面向组件的应用程序。

目前OSGi规范已经发展到第四版(R4),由OSGi联合组织(OSGi Alliance)负责进行维护管理,相关的规范资料也可以从该网站获得。

OSGi框架开发基于OSGi的应用程序离不开实现了OSGi标准的框架,就好比是基于J2EE的开发离不开应用服务器一样。

目前比较流行的基于OSGi R4标准实现的OSGi框架有三个:1.Equinox:这是大名鼎鼎的Eclipse所使用的OSGi框架,Eclipse强大的插件体系就是构建在OSGi bundles的基础之上,Eclipse的稳定可靠性为该框架带来了声誉,而且由于有IBM公司的强力支持,其后续的开发和文档资料也有了一定的保障。

一般情况下,我们推荐您使用该框架进行OSGi开发。

本教程的后续部分也将演示如何使用Equinox框架来进行OSGi应用程序的开发。

2.Makewave Knopflerfish:这是另外一个比较知名的OSGi框架,目前的版本已经支持R4规范,其特点在于为应用程序的开发提供了大量的bundle。

OSG学习过程中的笔记

OSG学习过程中的笔记

一旋转其中trans->setMatrix(osg::Matrix::translate(0,0,20));就是用来平移物体,这个表示象Z轴正方向平移也就是屏幕正上方。

o sg::Matrix::scale(0.5,0.5,0.5)表示缩放的比例,也就是原来物体的一般大小osg::Matrix::rotate(osg::DegreesToRadians(90.0),0,1,0)该方法参数分别表示角度,x,y,z当xyz其中有值是那么物体会绕着物体旋转。

当角度为正值的时候,物体绕着x,y,z箭头指向向右旋转,否则物体绕着x,y,z箭头指向向左旋转osg笔记(一)2011-07-05 19:37:29| 分类:OSG | 标签:|字号大中小订阅场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。

根节点和各个组节点都可以有零个(实际上是没有执行任何操作)或多个子成员。

在场景图形的最底部,各个叶节点包含了构成场景中物体的实际几何信息。

Osg程序使用组节点来组织和排列场景中的几何体。

场景图形通常包含了多种类型的节点以执行各种各样的用户功能,例如开关节点可以设置其子节点可用或不可用,细节层次节点(LOD)可以根据观察者的距离调用不同的子节点,变换节点可以改变子节点几何体的坐标变换状态。

场景图形特征:1. 提供底层渲染API中具备的几何信息和状态管理功能之外,还兼备以下的附加特征和功能:2. 空间结构:3. 场景拣选,投影面剔除和隐藏面剔除。

4. 细节层次:5. 透明6. 状态改动最少化7. 文件I/O8. 更多高性能函数:全特征文字支持,渲染特效的支持,渲染优化,3d模型文件读写支持,跨平台输入渲染及显示设备的访问.场景图形渲染方式:三种遍历操作1. 更新2. 拣选3. 绘制Osg设计所采用的设计理念和工具:Ansi标准C++C++标准模板库设计模式Osg命名习惯:命名空间:小写字母开头,然后大写字母避免混淆。

聊聊OSGI

聊聊OSGI

聊聊OSGI聊聊OSGI当初看深⼊理解Java虚拟机的时候,对于osgi的部分就只是简单的略过,毕竟很少使⽤,也很少有⼈提起,感觉就是⼀个活在书本上的东西。

不过最近。

新公司的项⽬有⽤到osgi,所以还是得学习⼀下原理1. 模块OSGI是⼀个基于Java语⾔的动态模块化规范。

OSGI中的模块称为bundle,以jar格式封装,和普通的jar包区别不⼤,但是bundle可以通过Import-package声明对其他bundle的依赖,也可⽤通过Export-Package声明对外提供的服(在MANIFEST.MF⽂件中配置),这样就可以精确的控制bundle内部服务的可见性。

OSGI的模块化和平级依赖,使得OSGI的程序基本上可以实现bundle的热插拔,⼀个bundle的停⽤,只会影响到依赖该bundle的bundle,如果⼀个bundle不依赖任何其他的bundle,那么停⽤,升级部署的影响基本可以忽略。

2. 类加载OSGi为每个bundle提供⼀个类加载器,OSGI的类加载顺序不同于双亲委派模式的向上委托,⽽是根据MANIFEST.MF⽂件的配置,去寻找类对应的加载器,类的加载可以在bundle间互相委托。

所以OSGI的类加载器结构是平级的⽹状结构。

步骤检查是否java.*,或者在bootdelegation中定义。

如果是,则bundle类加载器⽴即委托给⽗类加载器(通常是Application类加载器)检查是否在Import-Package中声明。

如果是,则找到导出包的bundle,将类加载请求委托给该bundle的类加载器。

如此往复检查是否在Require-Bundle中声明。

如果是,则将类加载请求委托给required bundle的类加载器搜索bundle的内嵌jar的类路径(Bundle Class Path)。

如果找不到类或资源,继续下⼀步。

查找Bundle的Fragment Bundle中导⼊的包, 如果没找到继续下⼀步如果类或资源位于⾃⼰导出的包中,则搜索结束并失败。

OSGI

OSGI

2、OSGI Alliance
OSGi 联盟的初始目标是构建一个在广域网和局域网 或设备上展开业务的基础平台,正如Java 诞生于一 个嵌入式开发的项目中,却被应用于网络平台的开发 ,对OSGi 的最早设计是针对嵌入式应用的,后来, 由于OSGi 的诸多优秀特性(可动态改变系统行为, 热插拔的插件体系结构,高可复用性,高效性等等) ,它被应用于许多PC 上的应用开发,因此逐步为开 发者所知和钟爱。现在人们对OSGi 的理解已经远远 不是它字面和初衷所能解释的了,而称其为一个轻巧 的、松耦合的、面向服务的应用程序开发框架则更为 确切。 OSGi联盟目前发布的最新OSGI规范是OSGi 4.2规范 。
1、OSGI服务规范
OSGI 规范包括了构建开放的可交付网络服务的各方面,OSGI规范又包括各种子规范。
标准服务
框架服务
系统服务
协议服务
更多服务
更多服务
有线管理服务(Wire Admin Service): 正常情况 下bundle建立发现与之共同协作的服务的规则。 但是,在很多情况下,这是一个部署定义。因此 有线管理服务连接在配置文件中共同定义的不同 服务。该有线管理服务使用在对象间连线通信的 生产者和消费者服务理念。
2、OSGI Alliance
OSGi Alliance(联盟)是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立 的开放的标准化组织,最初名为Connected Alliance,它是一个非盈利的国际组织,旨在建立一 个开放的服务规范,为通过网络向设备提供服务建立 开放的标准,是开放业务网关的发起者。该组织及其 标准原本主要目的在于使服务提供商通过住宅网关, 为各种家庭智能设备提供各种服务,目前该平台逐渐 成为一个为室内、交通工具、移动电话和其他环境下 的所有类型的网络设备的应用程序和服务进行传递和 远程管理的开放式服务平台。

osgi原理剖析

osgi原理剖析

OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。

这个框架实现了一个优雅、完整和动态地组价模型。

应用程序(称为bundle)无序重新引导可以被远程安装、启动、升级和卸载。

OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。

为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。

OSGi联盟已经开发了例如像HTTP服务器、配置、日志、安全、用户管理、XML 等很多公共功能标准组件接口。

服务接口能够基于专有权基础上开发。

OSGi的主要职责就是为了让开发者能够创建动态化、模块化的Java系统。

osgi初学者

osgi初学者

******************************************************************************* * osgi初学者:LiuZijun ** 网上的资料不是很多,也都千篇一律,有的都有,没有的则都没有,并没有系统的一个学习过程。

** 以下为本人学习OSGI、Spring DM Server、Equinox以及Felix的过程描述及心得体会,希望能给其他OSGI初学者们提供有限的帮助,少走一些弯路。

** 欢迎大家指正。

********************************************************************************1、在eclipse中开发plug-in project插件工程,配置插件工程运行的osgi环境:在run configuration中新建osgi framework,并且配置工程运行所需要的bundles2、创建自定义的service服务,并且尝试以factory模式来完成服务的单例化,并且将service 的接口export成其他bundle能访问的接口,再尝试在不同的bundle间通过ServiceTracker 的方式跟踪访问已经export的service接口,试验结果都ok。

3、尝试将一个插件工程中的service封装成一个bean,交由spring的beanfactory管理,并且将此bean对外发布成一个在osgi容器中能被其他bundle使用的bean。

(在meta-inf目录下需要一个spring目录,并且需要xxx.xml和一个xxx-osgi.xml文件,分别将service声明成bean并且将其发布;其他bundle工程通过配置文件注入的方式引用这些bean),结果ok,发布成功,并且其他bundle对其引用也成功。

4、在bundle工程中,初始化配置文件中的各个bean,需要使用FileLocator.toFileURL(context.getBundle().getResource("/***/***.xml")的方式来获得插件中的资源文件,通过XmlBeanFactory来构建该资源文件的bean工厂,这其中需要注意的是,插件正常运行需要eclipse的插件包(mon、org.eclipse.equinox.registry、org.eclipse.equinox.app、org.eclipse.equinox.preferences、org.eclipse.core.contenttype、org.eclipse.core.jobs、org.eclipse.core.runtime),在eclipse的run configuration中的target platform将该7个插件包勾选上。

深入理解OSGi:Equinox原理、应用与最佳实践

深入理解OSGi:Equinox原理、应用与最佳实践

8 用户管理服务
8.2 实践项目——Neonat论坛 用户管理模块
8.2.1 需求与依赖项分析 8.2.2 用户与用户组的实现 8.2.3 页面权限 8.2.4 用户登录与身份验证
8 用户管理服务
8.3 User Admin源码解 析
8.3.1 用户管理实现
8.3.2 外部服务使用实践
06
第三部分 基于Equinox的 OSGi应用与实践
5 Equinox启航
5.1 建立Equinox 开发环境
5.2 Equinox常 用组件简介
5.3 Equinox启 动器
5.4 使用代码启动 Equinox
5.5 本章小结
5.1.1 建立运行 环境
5.1.2 建立编译 及调试环境
5.1.3 建立开发 环境
4 服务层规范与 原理
4.9 远程服务
4.9.1 准备远程服务环境 4.9.2 远程服务示例 4.9.3 远程服务属性 4.9.4 实现分析
4 服务层规范与 原理
4.10 服务钩子
4.10.1 EventListenerHook 4.10.2 FindHook 4.10.3 ListenerHook 4.10.4 服务钩子示例
7.4.3 DelegateServlet实 现原理
8 用户管理服务
A
C
8.2 实践项目—— Neonat论坛用户
管理模块
8.1 User Admin 服务规范简介
8.3 User Admin源码解析
B
8.4 本章小结
D
8 用户管理服务
8.1 User Admin服务规范简介
8.1.1 服务目标与基础概念 8.1.2 验证用户身份 8.1.3 验证用户权限 8.1.4 User Admin事件

OSGI.NET学习笔记(一)

OSGI.NET学习笔记(一)

学习笔记(⼀)1. 关于在介绍 前先介绍下OSGi, OSGI全称为Open Service Gateway Initiative,它⼀⽅⾯指由IBM、Oracle、BEA、SAP等国际IT巨头组成的OSGi联盟组织;另⼀⽅⾯指该组织制定的⼀个基于Java语⾔的服务规范——OSGi服务平台。

⽽是OSGi R4.2规范移植到.NET平台的实现,是⼀个动态模块化框架的规范。

规范定义了⾯向组件、⾯向服务的编程⽅法。

基于的插件框架提供了模块化与插件化、⾯向服务架构和模块扩展三⼤功能,适⽤于控制台、WinForm、Windows服务、WPF、和移动平台等任意.NET应⽤环境。

2. 的优势  模块间零耦合 在规范⾥,插件具有热插拔、物理隔离和动态特性,所以模块间是0耦合,可快速进⾏模块或软件复⽤,同时能很好解决团队间的协作问题,使各个团队或成员间独⽴进⾏开发,在软件或模块的后期维护中表现出更多的优势,由于插件是互相隔离,并且其依赖是通过可管理的服务来实现的,依赖粒度⼩,模块间的依赖可视为0。

不同的插件可以有不同的版本,独⽴开发、部署和测试。

对组件的更改不会影响到其他组件的⾏为。

 快速响应需求变化 框架实现了⼀个微内核,能够快速响应⽤户的需求,定制或修改⼀个组件. 易管理、易部署、易更新 由于的插件具备物理隔离、热插拔和动态的特性,使持续部署、更新变为可能,并且让您可以⾮常⽅便的管理内核。

 平台的开放性 是⼀个开放的平台,在此构建的应⽤程序,天⽣就具备了开放性。

你可以通过服务向开发者提供API,通过扩展点向开发者提供功能扩展,并且可以构建私有的插件仓库。

3 运⾏机制 在插件框架中,插件即Bundle,它具备物理隔离、热插拔和动态特性。

每⼀个插件都是完全可复⽤的,可以被动态的安装、启动、停⽌、卸载或更新。

插件运⾏时即BundleRuntime,则是插件的运⾏容器,它负责从插件⽬录中加载和启动插件。

4.⾯向服务 在插件框架中,插件具备⾼内聚、低耦合特性,也就是说插件间耦合度⾮常低。

OSGi原理与实践-Day5

OSGi原理与实践-Day5


浏览器与Web Server
HTTP协议


基于HTTP协议的数据内容
Web与MVC

Web开发-语言

PHP Python Ruby Java C# ……





Web与MVC

Web开发-框架

Struts

Spring MVC
Django


……
Web与MVC
Client Server
HTTP TCP/IP
HTTP

Web开发与语言和框架的关系
Web与MVC

Web Server的工作

监听端口、建立连接

接收请求(请求的资源是多种多样的)
处理请求


生成结果
把结果传递给客户端

Web与MVC

Java EE的Servlet


InBound、OutBound的思想 singleton Javax.servlet.Servlet

一个核心

ClassLoader

两个基本点

集成控制在一个Bundle内 跨Bundle要能够解决ClassLoader的问题

第三个层面

多机系统?这个已经跟OSGi没关系了
OSGi与Hibernate

Hibernate限制在独立Bundle
Hibernate跨Bundle 通过扩展点来实现跨Bundle的加载

public void service(ServletRequest req, ServletRespo nse res)

OSG学习 笔记

OSG学习 笔记

Switch(转换)节点用于标记来控制其子节点的显示或隐藏,使用Switch节点可以对其下层子节点进行有选择性的控制。

将若干节点放置在Switch 节点下可以使用任意的组合方式来显示指定的节点。

Lod(细节层次)是一组具有不同精细程度的模型。

实时系统可以根据视点距离模型的远近自动调用相应的模型。

如果视点距离物体较远,则显示比较粗糙的模型(由较少多边形表示)。

当视点移向物体时,实时系统将用比较精细的模型(有较多多边形组成)取代它。

缺省条件下。

LOD计算视点到物体包络体中心点的距离。

如果这样并不符合渲染要求,那么可以指定一个自定义的中心点。

Osg::ref_ptr<osg::LOD> lod=new osg::LOD;Lod->setCenterMode(osg::LOd::USER_DEFINED_CENTER);Lod->setCenter(osg::vec3(100.0f,100.0f,0.0f));帧动画:在时间轴的每一帧上逐帧绘制不同的内容,使其连续播放。

帧动画具有非常大的灵活性。

三维物体的标准变换主要包括:移动、缩放、旋转和投影等!在场景中的三维物体是由许多三角形网格构成的,物体越精细,三角形网格就越多,将这些三角形网格的顶点坐标列出来,就构成了顶点矩阵。

虚拟场景中的物体在三维环境中要实现标准变换,需要借助物体本身的顶点矩阵变换来完成。

运动物体物理建模:几何建模只是建立了对象的外观,不能表现对象的行为,而对象的行为能力由是虚拟现实系统的重要特性。

因此在几何建模的基础上还需要进行物理建模,物理建模就是在建模时考虑对象的物理属性,通过使用面向对象的方法,把模型视为对象,用对象的成员变量来记录模型的物理特征。

我们以运动汽车受外力作用为例,建立相应的物理模型,我们可以增加物体的质量这一物理属性的描述。

物体的速度、位置等物理属性在物理仿真中同样具有重要地位。

而速度、位置都是矢量,既有大小又有方向,因此不可避免要引入向量运算,基于以上讨论,建立的车辆类不仅可以表示大小、方向还封装了向量的有关运算。

第二章 OSGi技术简介

第二章 OSGi技术简介

第二章OSGi技术简介随着技术的进步和新的市场需求,传统的程序设计模式已不能满足要求。

Java及其相关技术在网络编程和嵌入式方面的应用,已将传统的面向过程的编程模式彻底遗弃。

面向对象的编程方式在服务的耦合和可重用性上表现了不足。

面向服务的编程方式使实现和连接的步骤分开,允许服务的多种实现方式,服务动态机制和绑定,服务组件可重用,服务间轻耦合状态。

技术的进步和不断更新,传统的那些静态的或者封闭式的软件无论在功能扩展,还是在系统更新上都相形见拙。

人们也越来越倾向于一种能够将程序模块化,管理上动态化和功能上可扩展化的一种开放的和动态的软件设计模式。

在一个通用的平台框架上,实现一个插件体系结构,运行时,可以动态的安装,启动,停止,卸载插件,插件提供一个或多个服务并可由用户自行设计,实现软件的热插拔。

这种平台或框架就是一种中间件,在这个中间件上,用户可以根据自己需要定制框架按功能,设计用户自己需求的功能插件,并可以根据自己的需求来管理插件的生命周期。

这种平台式开放性的,插件的设计模式就是一种软件模块化的形式,而能够依据需求管理插件的生命周期则是一种动态化的集中表现。

OSGi(Open Service Gateway Initiative)就是依据这种软件设计模式的需求应运而生的中间件平台,它不仅适用于家庭网关的设计,在智能办公,车载系统也得到了极大地扩展和应用。

2.1 OSGi规范的发展历程及其适用范围2.1.1 OSGi的发展历程OSGi规范是由OSGi联盟规范和制定的。

OSGi联盟成立于1999年,最初致力于家庭网络市场,寄予能够规范家庭网络的设计,并于2000年发布其最初V1.0版本,初步制定了Bundle及其生命周期的管理,以及与OSGi的交互方式。

而服务规范中却仅有Divice Access规范。

在随后的版本V2.0和V3.0中,才OSGi 具有微核的概念,实现类加载机制,并实现了包的动态导入导出。

火龙果软件-OSGi基础

火龙果软件-OSGi基础

1.OSGi是什么:Java语言的动态模块系统本文介绍了OSGi是什么,以及OSGi容器的一些现状。

OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。

OSGi是什么OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。

OSGi容器已有多家开源实现,比如Knoflerfish、Equinox和Apache的Felix。

您可以通过这些容器,把您的应用程序劈分为多个模块单元,这样,您就可以更容易地管理这些模块单元之间的交叉依赖关系。

OSGi规范和Servlet规范及EJB规范类似,该规范定义了两种对象,一是容器对外提供的服务对象,另一个是容器和您的应用程序之间必须遵守的契约,其中,服务对象是容器要实现的。

您如果想要在OSGi平台上进行开发,首先,您必须要使用OSGi API来创建您的应用,然后将之部署到OSGi容器中。

从开发者的角度看,OSGi具有以下优点:a) 您可以在不重启容器的情况下,动态地安装、卸载、启动和停止您的应用程序中的不同模块;b) 对于您应用程序中的某一特定模块,容器可以同时运行该模块的多个版本;c) OSGi为开发嵌入式应用、移动应用、富互联网应用(RIA)提供了非常优秀的基础架构如果说您使用Servlet容器开发您的网络应用,使用EJB容器开发交易式应用,您可能会问,为什么我们还需要另外的容器呢?对这个问题的简短回答是,OSIG容器是专门为开发复杂的Java应用准备的,在这些应用的开发过程中,您非常需要将这些应用分割为一个个的模块。

在本系列以后的文章中,我将针对这个问题进行展开并深入回答。

1. OSGi在企业开发中的应用OSGi联盟(OSGiAlliance)于1999年3月开始着手制定OSGi规范,其主要目的就是要制定一套开放式标准,以便向局域网及其中的设备提供可管理的服务;其基本思路是,一旦您在网络设备(如服务器和嵌入式设备)上使用了OSGi服务平台,您就可以在网络上的任何地方管理这些设备上运行的软件组件的生命周期,可以在后台对这些组件进行安装、升级或卸载,但不需要打断该设备的正常运行。

OSG学习个人笔记

OSG学习个人笔记

【初学提示】正确运行OSG的例子OSG为我们提供了很多有用的例子,那么如何正确运行这些例子呢?我将我的一些经验写出来,希望对大家有所帮助。

1、命令行参数如何找?main函数作为一个程序的入口很多命令行的参数的在这里处理。

OSG的例子里很多都是需要提供参数的,否则就需要调用默认的文件。

注意如果你直接运行OSG的例子有可能只是一闪而过,正常的,不要惊慌,只需要分析一下到底需要什么命令行参数就可以正确的运行起来。

以osgviewer这个程序来讲,我们看看相关的处理函数:arguments.getApplicationUsage()->setApplicationName(arguments.getApplicat ionName()); //设置程序的名称arguments.getApplicationUsage()->setDescription(arguments.getApplicationNa me()+" is the standard OpenSceneGraph example which loads and visualises 3d models."); //简单的描述arguments.getApplicationUsage()->setCommandLineUsage(arguments.getAppl icationName()+" [options] filename ..."); //例子的使用方法arguments.getApplicationUsage()->addCommandLineOption("--image <filename>","Load an image and render it on a quad"); //参数....(省略一些)这里就可以看书这个程序是干什么的,具体的使用方法是什么,以及一些参数的用法。

(4条消息)自己的osgi收藏(比较详尽的osgi学习文档)四spring

(4条消息)自己的osgi收藏(比较详尽的osgi学习文档)四spring

(4条消息)自己的osgi收藏(比较详尽的osgi学习文档)四spring2.与流行的 JAVA B/S体系架构的集成了解了基于osgi系统设计的基本思想,进一步来研究osgi与流行的框架(spring,struts,hibernate等)的集成,这里首先讲解一下集成原理。

l 解决和spring的集成由于spring的应用占据了大部分的java应用领域,所以解决与spring的集成是osgi必须解决的,spring-dm的推出大大促进了两者的结合,有助于osgi进军企业领域。

Spring所带来得好处主要有这么两点:1. 不需要对外的export的服务可控制在bundle范围内进行进入使用。

2. 获取到spring 提供的pojo enhanced 的众多功能。

搭建开发环境搭建spring-osgi的开发环境,首先我们要提供一些spring的bundle部署至osgi框架中,由此得到spring 提供的功能,部署spring-osgi所需要的bundle:Org.springframework.osgi.aopalliance.osgi;………………………osgi.aspectjrt.osgi;……………………..osgi.backport-util-concurrent;……………………..osgi.spring.aop;……………………..osgi.spring.aspects………………………osgi.spring.beans;………………………osgi.spring.context;……………………..osgi.spring.core;………………………osgi.spring.dao;……………………..osgi.spring-osgi-core;………………………osgi.spring-osgi.extender;………………………osgi.spring-osgi-io;复制相应jar包到eclipse/plugin下,即完成了spring-osgi的环境准备。

OSGi入门教程

OSGi入门教程

OSGi⼊门教程⽹上能找到的OSGi教程,都喜欢在开篇时就教你如何在eclipse⾥做⼀个OSGi的东西,就算你跟着做了(如果有⾜够的耐⼼,还是不知道OSGi是怎么⼀回事);更可⽓的是,这些教程还会配上⼤段⼤段的eclipse截图,以达到浪费篇幅的⽬的。

鉴于这种情况,我只好找本英⽂OSGi书看了看。

这本书上没有eclipse截图,我看时觉得很满意,所以顺便把⼊门部分微缩⼀下,给⼤家做个简短的教程。

Why OSGi?OSGi⽤于在同⼀个JVM内部实现“模块化” (“组件化”)。

⾸先,它⽤来实现模块化,提供模块化的⼀些常见特性:1. 模块向外只暴露特定的接⼝,内部实现对外不可见2. 模块可独⽴部署3. 像服务治理⼀样管理⾃⼰模块暴露的接⼝,包括服务发布、寻找和版本管理其次,和SOA那种分布式模块化⽅案不同,OSGi的模块并不会分布在多台机器上,⽽是部署在同⼀个jvm进程⾥的:1. 每个模块打包成⼀个JAR2. 整个应⽤只需要⼀个进程,开发、部署会⽐SOA更⾼效OSGi的具体功能有哪些?官⽅⽂档把OSGi的功能分成三⼤块:1. Module: 将程序组装成⼀个⼀个的“模块”,模块⾥除了业务逻辑,还有各种元数据2. Lifecycle:管理模块的⽣命周期,⽐如启动和停⽌模块,并在运⾏时让模块跟OSGi框架发⽣关系(⽐如“热部署”)3. Service层:把模块暴露的接⼝当作SOA服务来管理,⽐如服务的发布和寻找。

实际使⽤时,你并不需要⽤上所有的功能。

如果你只对模块组织感兴趣,“热部署”、“服务治理”等等你都可以不⽤。

顺便提⼀下OSGi的规范与实现。

”OSGi Alliance”组织只提供了规范(specification),具体的java实现则由第三⽅提供。

⽬前主流的实现有:1. Apache Felix2. Eclipse Euinox -- Eclipse组织提供的实现。

Eclipse还为它提供了相应的IDE Plugin,以快速搭建OSGi应⽤。

EquinoxOSGi系列之一Equinox入门

EquinoxOSGi系列之一Equinox入门

EquinoxOSGi系列之一Equinox入门篇一 : Equinox OSGi系列之一 Equinox入门Equinox项目是Eclipse开源组织提供的OSGi框架的实现。

Eclipse自3.0版本开始,其内核移植到OSGi框架上。

通过OSGi框架强大的组件控制,交互和管理能力,再加上Eclipse插件的自有特点,Eclipse开源框架得到了跳跃式的发展。

同时,OSGi规范得益于Eclipse IDE环境庞大的使用者,OSGi联盟也进入了快速发展时期。

篇二 : Mysql入门系列:MYSQL日志文件维护在MySQL服务器启动时,它检查其命令行的操作,来查看它是否应该执行登录并打开相应的日志文件(如果应该的话)。

可以让服务器生成两种主要类型的日志文件:常规日志文件。

它报告客户机的连接、查询和其他各种各样的事件。

它对于跟踪服务器的活动很有用:谁正在连接、从哪里连接,以及他们正在做什么。

更新日志。

它报告修改数据库的查询。

在此上下文中的术语“更新”不只涉及UPDATE语句,还涉及修改数据库的所有语句。

由于这个原因,它包含了对D E L E T E、INSERT、REPLACE、CREATE TABLE、DROP TABLE、GRANT 和REVOKE 的查询记录。

更新日志的内容以SQL 语句的形式书写,这些语句用作对mysql的输入。

如果在崩溃后必须恢复表的话,更新日志与备份是很有用的。

您可以从备份文件中恢复数据库,然后通过将更新日志作为对mysql的输入,重新运行在该备份文件之后又修改数据库的任何查询。

这样,可将表恢复到崩溃时刻的状态。

为了使日志有效,可使用--log 选项开启常规日志,并用--log-update 选项开启更新日志。

可以在mysqld.safe_mysqld 或mysql.server 的命令行中,或在某个选项的[mysqld] 组中指定这些选项。

当日志有效时,日志文件在缺省时被写到服务器的数据目录中。

junit4osgi的使用

junit4osgi的使用

junit4osgi的使用介绍1.简介Junit4OSGi继承于junit的简单测试框架,可以在OSGI运行环境中进行测试。

针对集成测试或是需要在一个OSGI环境中进行单元测试。

结构如下:它分为三个部分:(1)Testsy stem 是真正的应用,被测试的系统(比如:声明式服务部分的测试)。

(2)Tests是包含测试代码的bundle,用来测试被测试的系统。

(3)Framework是测试框架,包括启动测试Runner和执行测试Runtime,在测试声明式服务中我们使用内嵌的loong框架作为测试框架。

2.使用Junit4OSGi进行测试的操作说明:(1)要对被测试的系统进行测试时,Tests必须是一个新建maven工程,测试的代码必须在src/main/java目录下,而不能在被测试部分src\test\java目录下直接写测试代码(比如要测试声明式服务loong-dservice-impl中的服务注册方面,我们不能在它的src\test\java目录下写测试代码)。

(2)所写的测试用例必须继承OSGiTestCase,这个类这个类继承自TestCase,并在它的基础上对OSGI中应用到的一些方法进行了封装,比如getBundle,getContext,getServiceObjects 等,方便在写测试代码时获取bundle或是服务的一些信息。

(3)在测试之前,要对测试代码所在工程的pom文件中进行如下信息的配置:1)添加测试时所需的依赖。

测试时所要用到的bundle通过添加依赖的方式添加到pom 文件中,其中loong-junit4osgi、loong-dservice-metadata为必须添加的依赖。

具体操作如下:<dependency><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-junit4osgi</artifactId><version>0.1.0-SNAPSHOT</version></dependency><dependency><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-dservice-metadata</artifactId><version>0.1.0-SNAPSHOT</version></dependency>2)配置所需的插件,必须配置loong-junit4osgi-plugin插件,如果对声明式服务进行测试时必需配置loong-dservice-plugin插件,具体操作如下:<plugin><groupId>org.trustie.loong.modules.loong-dservice</groupI><artifactId>loong-junit4osgi-plugin</artifactId><version>0.1.0-SNAPSHOT</version><executions><execution><goals><goal>test</goal></goals><configuration><framework>loong</framework></configuration></execution></executions></plugin><plugin><groupId>org.trustie.loong.modules.loong-dservice</groupId><artifactId>loong-dservice-plugin</artifactId><version>0.1.0-SNAPSHOT</version><executions><execution><goals><goal>dservice-bundle</goal></goals></execution></executions></plugin>其中在configuration中配置的框架为测试执行的框架,目前支持loong和Felix这两种。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

借助网上的一些资料,对OSGi有了一些了解,将到目前的一些粗浅认识记录如下,由于自己对J2EE比较熟悉,所以借助与J2EE的对比来认识OSGi。

Module
OSGi中具体实现Module的单位是bundle,一个bundle就是一个jar文件,其中包含所需的类文件和资源文件,同时必须包含一个描述文件;每个bundle都可以被独立打包、部署。

看到这里,你是否会觉得跟J2EE中的WAR定义很类似?
单从形式上来看,它们的确非常相似,而且它们的区别主要在于:
1)J2EE的WAR文件的粒度很大,是以应用为单位的;而OSGi bundle的粒度则相对小很多,以一组服务为单位,一个OSGi 应用将包含多个bundle。

2)最重要的差别是,bundle之间可以通过共享java package、发布或者引用服务进行协作。

而Web应用之间几乎是不存在协作的,起码在定义上没有。

3)在J2EE中,可以将多个war文件打包成为一个ear文件进行部署,而OSGi/bundle则没有这种"Application"的概念,每个bundle都必须独立部署。

Life Cycle
bundle拥有自己的生命周期,可以被安装、启动、激活、停止等,这一点与J2EE中的WAR也非常相似。

不过由于不存在协作关系,WAR的生命周期相对简单,只关心自己能否启动则可。

而bundle在被激活之前,必须保证其依赖的其他bundle已经存在。

Class Loading
在J2EE Servlet规范中,对ClassLoader的着墨不多,不过目前各产品的实现都比较类似,就是每个WAR文件有一个独立的ClassLoader。

如下图,由于WebApp1和WebApp2使用不同的ClassLoader,因此它们可以使用同一个Java Class的不同版本:
Java代码
(from /tomcat-4.1-doc/class-loader-howto.html)
在这张图中我们可以看到Catalina用独立的ClassLoader,这是一个进步。

早期很多人都遇到过这样的问题,自己的应用中采
用了某个开源软件,部署的时候却无法正常运行。

其原因是服务器已经采用了该开源软件的较老版本,而自己的应用却依赖与新版本。

新版本的Tomcat则把自己依赖的类库放在Catalina分支,这样这些类库对所有WebApp都不可见。

同时由Shared 负责的类库则是所有WebApp都能够用到。

这样的ClassLoader结构对于WebApp来说已经相当不错,但是仍然有一个问题没有解决,那就是如果WebApp1需要用到WebApp2的类怎么办?对于WebApp来说,这种需求的确相当罕见,因为应用与应用之间一般不会出现之间的类引用。

但是对于一个应用中的多个模块,相互引用则是再正常不过了。

论坛上正好有个帖子“有关于classloader的思考(或者说是困惑)”整理了这方面的需求,我则无需重复。

楼主edge_hh的问题用OSGi则可以很简单解决:
1. 在模块A的配置文件说明"Export-Package: demo.a.httpservice"
2. 在模块B的配置文件说明"Import-Package: demo.a.httpservice"
3. 将所有httpservice接口需要的定义放置在模块A的demo.a.httpservice下
这样就可以了。

这就是OSGi的特别之处,bundle的CloassLoader是平级的,但平级的CloassLoader之间可以共享Java Package。

Delcare Services
在edge_hh的帖子中,他没有明确提出的一个问题是,模块B是如何调用模块A的服务?
在Java WebApp中,是不存在跨WebApp的服务调用,forward和include操作都是局限在同一个WebApp中。

EJB中用<ejb-ref>来描述对EJB的引用,不过这种引用方式就如人们对EJB2的批评一样,复杂、不方便使用。

实际上在服务引用这方面,大家更加熟悉的应该是Spring的方式,如下:
Xml代码
不过在这种场合下Spring存在的问题有:
1. Spring没有"module"的概念,难以说明“一个module包含多个service”这样的情况
2. Spring的DI是静态的,一旦建立就不会更改。

而在模块化的程序中,一个模块在运行时也有卸载、重新部署的时候。

Spring 无法处理这种情况。

让我们来看看OSGi的做法,下面的配置代码来自《OSGI 实战》的例子:
1)声明服务:
Java代码
2)引用服务:
Xml代码
其中特别的部分是bind和unbind的设定。

通过bind和unbind,服务消费者能够知道所需服务对应模块的启动和停止,从而实现了DI的动态绑定。

"OSGi technology is the dynamic module system for Java!"
在学习OSGi之前,盛名之下,总觉得OSGi是很复杂的技术;然而在初步了解OSGi后,又觉得它非常简单,或者说是如此的清晰明了。

我初步认识到OSGi的主要好处是:
1)明确定义了Moduel/Service的。

“我们的应用/系统是模块化的”,这是一句常常能听到的话语,然而个模块的具体实现方式恐怕每个应用都不尽相同,这种情况非常不利于开发团队积累可重用的模块。

现在通过OSGi的严格定义,有望形成一个标准的模块市场,Eclipse的Plug-in就是一个很好的例子。

即便只是在公司范围内形成模块仓库,都将对开发效率有极大提高。

当然一个相当规模的模块市场,必然是依赖于一套设计良好的Service接口的。

2)运行时的动态性。

服务具体由哪个模块提供,模块的安装、启动、停止、卸载,这些都可以在运行时指定,并且随时更改。

这样的情况下,应用的动态性就取决于你的想象力了。

举一个实在的例子,我们无需重新启动整个应用,就能够对应用进行打补丁、升级。

相关文档
最新文档