OSGI起程一——确定目标
年初领导接到项目,要求写一个Java桌面程序,要求只有一个:可动态添加及移除模块。
对java使用一直处于鸡肋状态,环境不精通,但在java环境中使用公司的java组件产品游刃有余。接到任务后,开始搜索相关资料。网上搜到的相关资料,模块化的java程序,基本都指向了osgi,自己就开始看osgi方面的资料。
现在想想自己的求索之路还是比较艰辛的,主要是自己心里有底触情绪,后来总结了,做事不要有底触情绪,因为不管你有没有,事情终归是要做的。
对行业来说,会涉及业务的方方面面,每一方面都可被认为是一个独立的功能模块。一个行业的多个项目中,会有相同功能模块的交集。在这种情况下,如果有资源能够积累,想像一下,将各个功能做成一个个单独的东东,哪个项目要用就直接拿去,这样,除了界面以外,功能性的东西都是现成的,项目这样做起来是不是便捷了很多呢,抑或是界面库,是否也可以通过参数变幻界面的风格。所有的努力,都为了让我们的功能模块更能够被广泛使用,而不是为一个项目所服务。
参考了其他程序后,对java桌面有了初步的规划,模块情况如下(先解释下,osgi中每个独立的模块即为bundle):
1.相关jar包模块(ISmUtilJarService),即通用的jar包转换为一个功能bundle,供所有的功能模块使用(后续会提到为何要将公用jar做成一个公共bundle);
2.工具模块(ISmUtilService),该模块主要存放一些通用的函数,如String相关或其它,均放在此处进行处理,供所有功能模块使用;
3.数据模块(ISmWorkspaceService),该模块主要存放数据处理相关操作等,此处将数据单独放在一个Bundle中,主要是因为要考虑到工作空间(SuperMap存放数据的容器——Workspace,存放数据的变量)需要在整个环境中仅有一个实例,即不能被创建多次,且其它的功能模块都要从工作空间中取数据,基于此方面考虑,就创建了一个数据处理的模块;
4.界面模块(ISmUIService),这个界面主要负责界面展现,及其它模块对界面元素的获取、界面元素状态的判断等;
以上四个为必须模块,因为基于以上模块,我们可以看到界面,也可以基于界面进行一些数据处理,但仅仅有如上四个模块完全不够。因为我们是一个java桌面,这个桌面应用程序的主体是地图,不管是二维的还是三维的,所以我们就有了其它可添加可移除的模块;
5.地图模块(ISmMapService),这个模块主要负责地图的相关处理,如地图上选中对象后弹出右键菜单、地图漫游等;
6.三维场景模块(ISmSceneService),这个模块主要负责三维场景的相关处理;