插件化开发-1-初识OSGI

初识 OSGI背景当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解决此类问题,必须站在公司战略的统一高度来重构系统。 荣幸的是,本人在此时加入团队并负责系统架构的升级与重构工作。因为公司在全世界都有客户,而且客户又来自于各行各业,带来的问题就是如何抽离公共业务的同时,又能不影响客户的定制化需求开发?产品团队专注于系统的核心逻辑开发,而一些定制化需求交付给global team 去开发? 选型技术没有银弹,目前没有完全确定要使用OSGI的方式来实现,因为本人之前使用Spring Cloud & Spring Cloud Alibaba各实现了一种demo, 当然也可以实现我们的服务化,高可用以及动态扩展。但是在解决插件定制化这块,相对来说还是不太熟悉,然后OSGI进入眼帘了。 OSGI 简介OSGI 是 <u>O</u>pen <u>S</u>ervice <u>G</u>ateway <u>I</u>nitiative(开发服务网关协议)。 指维护OSGI规范的官方联盟 OSGi Alliance是一个由Sun Microsystems、IBM、爱立信等于1999年3月成立的开放的标准化组织,最初名为Connected Alliance。官方联盟维护的基于JAVA语言的服务规范 该规范和核心部分是一个框架,其中定义了应用程序的生命周期模式和服务注册。基于这个框架定义了大量的OSGi服务:日志、配置管理、偏好,HTTP(运行servlet)、XML分析、设备访问、软件包管理、许可管理、星级、用户管理、IO连接、连线管理、Jini和UPnP。osgi.org 官方描述: The Dynamic Module System for JAVA通俗讲:使用OSGI实现的程序(Bundle)就是一个插件,可以动态的安装,卸载,启动,停止等等而不需要启动容器。 目前使用最广的两款OSGI 框架: Apache Felix Apache Felix是Apache旗下的一个OSGi框架,项目本身非常成熟,已经被用到了很多其他的项目中,例如Apache Servicemix。它本身提供的服务也是最全的,几乎涵盖了全部的OSGi 4.2的标准。除此之外还提供了一些非标准的功能,例如iPOJO。框架本身非常紧凑,你只需要3个包加一个shell就可以运行了,无论是开发还是Debug都非常简便。除了Felix,还有两个项目是和OSGi相关的。一个是Apache Felix Karaf,它本身是Felix的一个子项目,但他其实是封装了Felix提供更高一层的Runtime,例如提供了JAAS。另一个是Apache Aries,目前还处于起步阶段,它作为Felix的补充,提供OSGi企业级规范,包括JPA、JDBC、JTA、JNDI等等。Equinox Equinox是Eclipse旗下的OSGi框架,本身也被Eclipse采用,是Eclipse注明的PDE开发环境的底层。Equinox本身也是相当的全面的框架,提供的功能不比Felix少多少。但是它功能的分类就稍显混乱,文档和Sample也组织的不是很好。事实上相当Equinox还是被当做开发Eclipse Plugin的应用较多,如果你要开发一个Web程序,你就会感到它本身的功能和文档不够全面。Equinox最大的优势在于它和Eclipse结合紧密,只要你安装了PDE,你就已经有了Equinox,可以方便的在Eclipse里设置你开发的Bundle,启动、部署等操作也异常简单,而且有专门的Debug界面,你还能要求什么呢?如果你想基于Eclipse开发,Equinox无疑是好选择。但对于新手而言,有时候会搞混Eclipse Plugin与OSGi的关系。 Talk is cheap, Show me the code.环境安装Eclipse 版本因本人好几年没使用Eclipse, 因此带上安装再熟悉一下哈。。。访问:https://www.eclipse.org/downloads/ 下载客户端 选择企业版之后,下一步 点击INSTALL,等待安装完成。 创建项目File => New => Project 选择Plug-in Development => Plug-in Project ...

October 15, 2019 · 1 min · jiezi

idea搭建osgi项目开发学习

本文介绍了在mac系统上如何用idea搭建osgi项目开发,演示使用的equinor osgi framework,jdk8。 equinor下载下载地址:https://download.eclipse.org/...本文下载的是equinox-SDK-4.11.zip,下载后进行解压,后面需要用到这个解压目录。 idea创建工程File -> New -> Project,选择Java,点击Next,创建一个空工程。继续点击Next。填写项目名称,这里叫osgi_demo。 工程下创建osgi模块创建api、server、client三个模块。创建模块时勾选OSGI作为开发环境,Use library从刚才下载的equinox解压的目录下的plugins目录中选择org.eclipse.osgi_3.13.300.v20190218-1622.jar。创建模块完成之后,打开idea的preferences,在Languages & Frameworks找到OSGI Framework Instances选项。添加Equinox,Home directory选择刚才解压的Equinox目录。 编写演示代码结构如下图api模块中定义接口类IHelloService package osgi.demo.api;public interface IHelloService { /** * 和某人打招呼 * @param somebody * @return */ String sayHello(String somebody);}server模块接口实现类HelloServiceImpl package osgi.demo.server;import osgi.demo.api.IHelloService;public class HelloServiceImpl implements IHelloService { @Override public String sayHello(String somebody) { return "hello " + somebody; }}server模块服务注册类HelloServerBundle package osgi.demo.server;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import osgi.demo.api.IHelloService;import java.util.Dictionary;import java.util.Hashtable;public class HelloServerBundle implements BundleActivator { @Override public void start(BundleContext bundleContext) throws Exception { IHelloService service = new HelloServiceImpl(); Dictionary<String , Object> properties = new Hashtable<>(); //服务注册 bundleContext.registerService(IHelloService.class, service, properties); } @Override public void stop(BundleContext bundleContext) throws Exception { }}client模块调用服务类HelloClientBundle ...

April 28, 2019 · 1 min · jiezi