基于OSGi和Spring开发Web应用
下载后可任意编辑 基于OSGi和Spring开发Web应用 作为一个新的事实上的工业标准,OSGi 已经受到了广泛的关注, 其面对服务(接口)的基本思想和动态模块部署的能力, 是企业级应用长期以来一直追求的目标。 Spring 是一个著名的 轻量级 J2EE 开发框架,其特点是面对接口编程和非侵入式的依赖注入。 将 OSGi 和 Spring 结合能充分发挥二者各自的特长,更好地满足企业级应用开发的需求。 Spring 开发组织在 2024 年发布了将 OSGi 和 Spring 结合的第一个版本:Spring-DM。 dm Server 是一个完全模块化部署的,基于OSGi的Java服务器,为运行企业Java应用和Spring应用提供更加强大的灵活性和可靠性。SpringSource应用平台是构建在Spring、OSGi和Apache Tomcat之上的应用服务器,这个新的应用服务器摒弃了原有的Java EE服务器标准,自然而然地将Spring编程模型展现其中,随之而来的还有一套基于OSGi内核构建的全新部署和打包系统。 本文通过一个简单实例,介绍如何利用 Spring-DM 开发基于 OSGi 和 Spring 架构的 Web 应用,同时探讨其中用到的关键技术及其基本思想。 实例教程: 一、. 指定Target Plat 到所用到的所有的bundle包的目录中。 二、 创建一个Service接口bundle 新建一个接口类:mon.ShowMsgInfo 同时新加一个接口方法:public String GetMsgInfo(); 打开这个接口bundle工程的MANIFEST.MS文件,在 Runtime/Exproted Packages 中添加刚刚新建的接口类,使之对外提供这个服务。 三、 创建一个接口bundle的实现 bundle 打开这个接口bundle工程的MANIFEST.MS文件,在 Dependencies/Imported Packages 中添加上面新建的接口类 新建一个接口实现类:ShowMsgInfo 在这个类中,实现接口中的方法: package com.infotech.test.service; import mon.IShowMsgInfo; public class ShowMsgInfo implements IShowMsgInfo { @Override public String GetMsgInfo() { return “Hello Word!!!“; } } 接下来,我需要将这个实现类发布成为一个OSGI服务: 在工程新一个目录OSGI-INF ,并新建一个components.xml文档。 打开这个接口bundle工程的MANIFEST.MS文件,添加一行 Service-Component: OSGI-INF/components.xml 四、 接下来,我们创建一个WEB应用bundle: .1. 新建一个网页bundle工程: 2. 在工程目录中创建 WEB-INF/lib 、 WEB-INF/classes 两个目录 并在WEB-INF目录中,创建 Spring、jsf、及 web 配置文件: 3. 在MANIFEST.MF 文件中的配置项: Runtime/Classpath 中添加刚才创建的两个目录。 4. 点击Add 添加我们将要使用的jar包 5. 新建一个网页就的Bean类TestBean package com.infotech.test.bean; import com.infotech.test.control.TestBeanControl; public class TestBean { private TestBeanControl testControl; public String getShowMsg() { return testControl.getShowMsg(); } public TestBeanControl getTestControl() { return testControl; } public void setTestControl(TestBeanControl testControl) { this.testControl = testControl; } } 6. 创建一下控制类 TestBeanControl package com.infotech.test.control; import mon.IShowMsgInfo; public class TestBeanControl { private static IShowMsgInfo msginfoService; public String getShowMsg() { return msginfoService.GetMsgInfo(); } public void setMsginfoService(IShowMsgInfo msginfoService) { this.msginfoService = msginfoService; } public void unsetMsginfoService(IShowMsgInfo msginfoService) { if(this.msginfoService==msginfoService) this.msginfoService = null; } } 7. 打开这个接口bundle工程的MANIFEST.MS文件,在 Dependencies/Imported Packages 中添加上面新建的接口服务类及WEB服务类 8. 新建一个 OSGI-INF/components.xm 文件,我们来引用上面发布出来的OSGI服务