快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

亚万博体育app下载链接_酒文化网进入



小序

Open Service Gateway Initiative(OSGi) 是一个针对 Java 动态模块开拓的规范。基于中心件的 OSGi 技巧供给了一个面向办事,基于组件的开拓情况,并供给标准化的要领来治理全部软件生命周期。OSGi 为那些必要长光阴运行,动态更新并且对运行情况的影响尽可能小的系统供给了很好的支持。基于 OSGi 开拓的系统具有繁杂度低、可重用、动态支配、可持续运行、开拓简单等特征。

OSGi 技巧结合了上述特征的各方面来定义一个动态办事支配框架,可以进行远程治理。OSGi 技巧起先只是关注于嵌入式领域,诸如机顶盒、办事网关、手机等利用情况。然则它完美地适用在任一模块化、面向组件、面向办事的项目。Eclipse V3.0 今后采纳 OSGi 作为其模块化和动态化平台,设计了 Equinox 内核,应用 OSGi 技巧赞助其进行类载入,大年夜大年夜提升了 Eclipse 的启动速率。在利用办事器上,WebSphere,Weblogic,JBOSS 等闻名的办事器都支持或应用了 OSGi 技巧。

Felix 是一个 Apache 旗下 OSGi 实现的开源框架,它的终极的目标是供给一个完全兼容的 OSGi 框架和标准办事的实现。Felix 当前实现了 OSGi 规范 4 的大年夜部分内容,今朝 Felix 供给的 OSGi 框架功能是异常稳定的。

采纳 Spring DM 和 Jetty 等 Web 容器开拓基于 OSGi 的 Web 利用的措施已经在很多书籍或技巧文章上说起。然则这种开拓措施与传统的 Web 开拓区别较大年夜,开拓职员很难转换到这种开拓模式上,并且它的稳定性也没有获得充分的验证。

很多 Web 开拓都采纳 Struts 作为其节制层,很幸运的是,最新宣布的 Struts2.1.8.1 中,加入了对 Felix OSGi 的支持,能够在传统的 Web 开拓中集成 OSGi 的模块治理平台,而且开拓措施没有太大年夜的改变,开拓后的利用法度榜样仍像本来一样可以方便的支配在 Tomcat,JBoss 等容器上。

本文将经由过程下面的示例,具体讲述若何应用 Felix 和 Struts 开拓 Web 利用。

应用 Felix 和 Struts 开拓 Web 利用示例

下面解说的示例是一个获取光阴信息并在 Web 浏览器中显示的简单示例,该示例主要先容了如何应用 Felix 和 Struts 结合起来开拓 Web 利用。该示例中有两个获取光阴信息的 bundle,这两个 bundle 实现同一个接口办事,然则有不合的实现,这两个 bundle 可以亚万博体育app下载链接在利用中动态支配。经由过程该示例,可以表现出基于 OSGi 开拓的项目具有优越的模块化以及 OSGi 的 bundle 动态支配的能力,从而阐清楚明了 OSGi 适用于开拓持续运行且必要动态更亚万博体育app下载链接新的系统。

在这个示例中,一共包括五个工程,一个 Web Application 工程和四个 OSGi bundle 工程。Web Application 工程是用于 Web 支配。四个 OSGi bundle 中,包括一个 Web bundle,用于 Web 交互;一个 time service bundle,包孕一个获取光阴信息的接口办事;一个 local time service bundle,实现接口办事,用于获取本地光阴信息;一个 utc time service bundle,用于获取天下标定光阴(Universal Time Coordinated,UTC)信息。

本示例的布局道理如图 1 所示。在 Web Container 中注册了 Struts OSGi 的监听器,该监听器会去启动或竣事 Apache Felix Host,Apache Felix Host 是 Struts OSGi Plugin 和 Felix Framework 的连接点。Felix Host 会去创建和初始化 Felix Framework,Felix Framework 认真治理系统中的另外的所有 bundle,Struts OSGi Plugin 会监听 bundle 的变更,假如发生变更的 bundle 是一个 Struts bundle, 则会去加载 Struts 的设置设置设备摆设摆设。

图 1. 示例布局道理图

建立 OSGi 的 Web 开拓情况

本文示例应用的 Web 开拓情况包括如下组件:

Eclipse 3.5 for Java EE Developers

Sun JDK 1.6.0

Tomcat 6.0.24

Struts 2.1.8.1 (Essential Dependencies Only)

spring-osgi-1.1.2-with-dependencies (Only Need when adding Spring Support)

Web Application 工程的创建要领与平日的 Web 工程类似,然则必要加入 Felix 的支持和 Stru亚万博体育app下载链接ts2 OSGi Plugin. Felix 是 OSGi 的平台,用于治理全部系统中的所有的 bundle,而 Struts2 OSGi Plugin 是 Struts2 和 OSGi 连接的桥梁,经由过程 Struts2 OSGi Plugin 将 Felix 融入到 Struts2 框架中。别的,还必要加入 Struts2 OSGi Admin bundle,这个 bundle 向治理职员供给基于 Web 的治理 OSGi 平台中的 bundle 的操作进口。同时在 web.xml 中必要加入 Struts OSGi 监听器,这样 OSGi 平台中的 亚万博体育app下载链接bundle 发生变更时,会触发该监听器去做一些与 Struts 相关测操作,例如增添 Action 或使 Action 掉效。

web.xml 中过滤器和监听器部分的设置设置设备摆设摆设内容如清单 1:

清单 1. web.xml 过滤器和监听器设置设置设备摆设摆设

struts2-prepare

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter

struts2-execute

org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter

struts2-prepare

/*

struts2-execute

/*

org.apache.struts2.osgi.StrutsOsgiListener

org.apache.struts2.dispatcher.ng.listener.StrutsListener

Web Application 工程的目录布局如图 2 所示:

图 2. Web Application 工程的目录布局

将 Web Application 支配到 Tomcat 上并启动 Tomcat,然后在浏览器中输入 http://localhost:8080/webapp/osgi/admin/bundles.action, (webapp 是项目支配到 Tomcat 中的名字 ) 假如看到了类似于 图 5的 bundles 列表,阐明 OSGi 情况设置设置设备摆设摆设成功。

开拓获取光阴消息接口办事 bundle

消息接口办事 bundle 是供给消息办事的接口,该接口将被 Web bundle 所应用,其他 bundle 可以不合的形式实现该接口。在这里使用 eclipse 新建插件工程的功能来创建 OSGi bundle。必要分外设置 an OSGI framework 为 standard 要领,这种要领容许支配项目到标准的 OSGI 容器中。新建 OSGi 工程的领导如图 3 所示。

图 3. 新建 OSGi 工程领导图

在该项目中开拓一个用于获取光阴信息的接口,经由过程该接口可以获取字符串形式的光阴信息。

清单 2. 获取光阴办事接口代码

package com.example.time.service;

public interface TimeService{

public String getTime();

}

必要将该 bundle中的办事包的类和接口就裸露给了其他的 bundle,其他的 bundle可以经由过程 import这个包来应用此中的类和接口。

开拓获取本地光阴消息实现办事 bundle

获取本地光阴消息办亚万博体育app下载链接事 bundle 实现了光阴消息接口办事。在该 bundle 种返回的光阴消息是当前时区的光阴信息。由于用到了接口办事包,以是必要在 Import-Package 中加入接口办事包。

清单 3. 获取本地光阴实今世码

package com.example.time.local.service;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import com.example.time.service.TimeService;

public class LocalTimeService implements TimeService{

@Override

public String getTime(){

Calendar calendar = Calendar.getInstance();

Date date = calendar.getTime();

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

return "The local time:" + formatter.format(date);

}

}

OSGi bundle 中的办事要能够被其他 bundle 应用,应用将办事宣布出来。在该 bundle 的 Activator 的 start() 措施中注册该办事,可以宣布这个办事。当这个 bundle 启动时,将获取本地光阴宣布为一个办事。办事宣布的代码如清单 4 所示。

清单 4. 办事宣布

public void start(BundleContext context) throws Exception{

context.registerService(TimeService.class.getName(), new LocalTimeService(), null);

}

开拓获取 UTC 光阴消息实现办事 bundle

获取 UTC 光阴消息实现办事同样实现了光阴消息接口办事,该 bundle 主如果用于和上一个 bundle 即获取本地光阴消息办事进行动态的调换,用于体现 OSGi 的动态支配的能力。

清单 5. 获取 UTC 光阴办事实现

public class UTCTimeService implements TimeService {

@Override

public String getTime() {

Calendar calendar = Calendar.getInstance();

int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);

int dstOffset = calendar.get(Calendar.DST_OFFSET);

calendar.add(Calendar.MILLISECOND, -(zoneOffset + dstOffset));

Date date = calendar.getTime();

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm s");

return "The UTC time:" + formatter.format(date);

}

}

开拓 Web bundle

Web bundle 是系统 Web 交互的进口。在该 bundle 中必要应用光阴消息接口办事 bundle 中的接口,所有必要在 MANIFEST.MF 的 Import-Package 加入光阴消息接口办事包,别的,为了能够识别出该 bundle 是一个 Struts bundle, 必要将该 bundle 设置为可被 Struts2 支持 , 即在 MANIFEST.MF 中加入 Struts2-Enabled: true, 这样该 bundle 中的 struts.xml 就会被加载。终极的 MANIFEST.MF 的设置设置设备摆设摆设如清单 6。

清单 6. Web Bundle 的 MANIFEST.MF 设置设置设备摆设摆设

Manifest-Version: 1.0

Bundle-ManifestVersion: 2

Bundle-Name: com-example-time-web

Bundle-SymbolicName: com.example.time.web

Bundle-Version: 1.0.0.qualifier

Bundle-Vendor: keki

Bundle-RequiredExecutionEnvironment: JavaSE-1.6

Struts2-Enabled: true

Import-Package: com.example.time.service,

com.opensymphony.xwork2,

org.apache.struts2.osgi.interceptor,

org.osgi.framework;version="1.3.0"

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: