`

JES服务程序

阅读更多
JES,是Java嵌入服务器-Java Embedded Server的缩写。在嵌入系统中使用Java,是Java跨平台战略的重要组成部分。国内目前并无比较系统的中文文献。
从最简单的包(bundle)开始
简介
每个包(bundle)都至少需要一个包激活器类,用来激活包,还要有一个清单(manifest)文件。包激活器类是一个实现org.osgi.framework.BundleActivator 的类,它定义了start (开始)和stop (结束)方法的逻辑。JES框架使用start 和stop方法来启动和停止包。

在这个例子里,我们建立一个简单的包(bundle),在它里面没有什么服务,仅仅在启动的时候显示Hello ,在停止的时候显示Bye 。请按以下步骤进行:

用Java编写一个包激活类
用文本文件的格式建立一个清单(Manifest)文件。
建立一个JAR文件,里面包含编译好的激活器类以及清单(Manifest)文件。
启动 JES框架,并安装、运行、停止包。
稍后,如果要建立复杂的包,你将编写服务,用服务处理处理框架工作的事件,利用JES核心服务;你还要给包激活器这个类增加功能。

BundleContext(包环境)对象
现在,是介绍BundleContext(包环境)对象的时候了。这个对象让包能够与JES框架相互作用。

在框架启动一个包的时候,就建立一个BundleContext 对象,并把这个对象传递给包激活器的start 方法。利用BundleContext 对象里的方法,包可以安装自己、登记服务、取得其它已经安装的包的信息、取得对服务的引用、获取或释放服务对象、获取或翻译包(Bundle)对象和文件(File)对象、占用框架发布的事件。BundleContext 对象的内容,在本教程的后面还会详细介绍。

现在,你对BundleContext 对象需要了解这些事情:

只有 JES框架能够创建BundleContext对象,包不能创建它。
在包被激活的时候,BundleContext对象被传递给start方法。
在包停止的时候,BundleContext还被传递给stop方法。
现在,我们来看看,如何编写包的激活器类。

包的生命周期
每个包都有一个生命周期。在生命周期里,包可以被安装、激活、更新、灭活,直至最后卸载。生命周期就是我们从比较高的级别上观察这一连串事件时,事件经历的时间 (如果你对细节有兴趣,可以查阅OSGi 服务网关规范,发行版1.0)。

生命周期运行的步骤就象这样:

1. 安装包

JES框架读取包的内容,给包分配一个包ID,并且持续地缓存包的位置和状态。会建立一个专门的类引导,以访问包的资源。

2. 激活包

框架检测这个包所要求的Java类是否已经由其它的包导入了。如果别的包已经导入了相应的类,框架就调用包激活器类里的start 方法,登记包的服务。这时,包的服务开始运行。

在这一步,JES框架还要解决包之间的依赖关系,这样可以保证:如果包B依赖包A,那么在启动包B之前,包A已经存在。

3. 灭活包

框架调用包的stop 方法,取消服务的登记。服务停止运行。

4. 卸载包。

包从计算机上删除。

如果在包的生命周期期间出现错误, JES框架就会抛出一个BundleException(包异常),这是一种特殊的异常类型,只在包的生命周期当中发生。BundleException is是OSGI规范定义的一个标准异常 (在org.osgi.framework里),JES实现了这个异常。

第一步:编写包的激活器类
我们要建立的greeting1 这个包,它的激活器类Activator.java非常简单,只定义了start 和stop 二个方法。

代码示例1-1 一个简单的包激活器类(greeting1/Activator.java)











package greeting1;

import org.osgi.framework.BundleActivator;

import org.osgi.framework.BundleContext;

import org.osgi.framework.BundleException;

public class Activator implements BundleActivator {

public void start(BundleContext context) throws BundleException {

System.out.println( "Hello" );

}

public void stop(BundleContext context) throws BundleException {

System.out.println( "Bye" );

}

}

激活器类Activator 保存在包greeting1 里①。它从org.osgi.framework逐个导入了BundleActivator, BundleContext, 和BundleException 这几个类②,而没有导入整个org.osgi.framework包,这样降低了JES装载包激活器时占用的内存数量。

激活器Activator 实现BundleActivator (包激活器)这个接口③,定义了它的start 和stop 方法,所有的包激活器类都要实现这些功能。在start 方法④的实现里,用它抛出BundleException(包异常),而没有用BundleActivator里声明的java.lang.Exception 作为抛出异常的方法,因为BundleException (java.lang.Exception的子类) 是JES框架用来抛出有关包的生命周期问题的异常类型。start 的这个实现,在包启动的时候,会显示Hello。

stop 方法⑤也抛出BundleException ,在包停止的时候显示Bye 。

第二步:建立清单文件
在JES框架里安装的每个包,都包含一个清单(Manifest)文件。清单文件是标准的文本文件,它描述了JAR文件里的内容。清单文件是结构化组织的文件,每个段都由一个头组成,每个头都有一个属性。例如,参见greeting1/Manifest文件,它的内容是:

BundleActivator: greeting1.Activator

这个清单文件只有一个头,它告诉JES框架,用哪个类作为包的激活器类。

头给JES框架提供了“钩子”,可以钩上包里包含的文件和资源。通过这种途径,框架就能知道,当包在生命周期中移动的时候,在包里的什么地方去找到资源(例如:包激活器)。

OSGi 规范义了能够在清单文件里供JES包使用的头(如表1-1所示)。但是表1-1 只显示了头的名称。每个头都有一套规定好的语法,必须用它的语法给它指定属性。不过,学习这份教程,并不需要了解语法的细节内容。如果你对细节感兴趣,可以参阅Java 嵌入服务器 2.0 开发人员指南。

表 1-1 在包的清单文件里可以使用的头



说明

Bundle-Activator

包激活器

Bundle-ClassPath

包的类路径

Bundle-ContactAddress

包的联系人地址

Bundle-Description

包的描述

Bundle-Vendor
包的开发商
Bundle-DocURL

包的文档URL

Bundle-Name

包名称

Bundle-NativeCode

包的本机码

Bundle-UpdateLocation

包的更新位置

Import-Service
导入服务
Bundle-Version

包的版本

Export-Package

导出包

Export-Service

导出服务

Import-Package

导入包

第三步:建立包的JAR文件
现在,我们有了一个包激活器类和一个清单文件,可以建立包了。建立包,可以使用gnumake (Solaris 平台)或者nmake (Windows平台)这两个工具。

在Windows NT上的操作方法如下:

1.打开一个 MS-DOS 命令窗口

2.转到greeting1目录,就象这样:

C:cd jes2.0docs utorialgreeting1

3. 建立 JAR 文件:

C: make

4. 检测是否成功创建了JAR 文件:

C:cd jes2.0docs utorialuildundles

C:dir greeting1.jar

第四步:安装、运行包
要启动JES框架,单击开始菜单,然后是程序>Java Embedded Server2.0>Java Embedded Server 2.0 Frame。
当JES框架启动时,在MS-DOS窗口时,可以看到下面内容:

Java Embedded Server 2.0
Copyright 1998, 1999 and 2000 Sun Microsystems, Inc.
All rights reserved. Use is subject to license terms.
Type ‘h[elp]’ for a list of commands.
>
要打开JES工具包JES Tools Portal—单击开始菜单,然后是程序>Java Embedded Server 2.0>Java Embdded Server 2.0 Tools Portal.
在Tools Portal里,单击管理面板,打开JES的管理面板 JES Management Panel。
在管理面板里,单击包(Bundles)标签。
在要安装的包文件(Bundle File to Install)里,找到greeting1 这个包(缺省是jes2.0/docs/tutorial/build/bundles/greeting1.jar),然后单击安装。
在右侧面板的列表中看到greeting1 时,单击开始。
检查在右侧面板中显示的greeting1.jar的详细内容.
分享到:
评论

相关推荐

    jes:学生的Jython环境允许学生编写可以处理图片,声音和视频的Jython程序

    JES:学生的Jython环境JES是一个专为而设计的开发环境。 它允许学生使用Python编程语言(特别是Jython,这是用Java实现的Python版本)来操纵图像,声音和视频。 JES被Mark Guzdial和Barbara Ericson合并到“ Python...

    夏威夷大学基于JES 平台整合学生信息系统

    夏威夷大学通过一种先进的学生信息...校园电子邮件应用程序,运行于Sun Java 企业系统(JES)平台。目前,电子邮件基本上取代了电话,现已成为夏威夷大学45,000 名学生和5,000 名教职员工中绝大多数人的主要通信渠道。

    servidor_JES:Fiscalias后端应用程序

    servidor_JES:Fiscalias后端应用程序

    JESftp:自动将作业提交到 IBM 大型机上的 JES 的脚本

    在远程主机上编写和调试汇编程序时,它允许人们拥有更灵活的工作流程。 ###示例用法 $ JESftp.py assign3.jcl 以上将自动执行以下操作: 将assign3.jcl 发送到作业队列并等待它执行。 将程序的输出保存在同一...

    Jython程序设计

    Java的平台无关性特点是其他语言无法比拟的,它还具有功能强大的集成开发环境,可以快速创建各种Java应用程序,而Python则具有很好的灵活性,开发快速,容易使用。Jython是这两种语言的组合,可以预见这种语言将有...

    Java Email Server (JES) Eclipse plug-in-开源

    Java电子邮件服务器(JES)插件是Eclipse下JES(电子邮件服务器)的嵌入式实例启动器。 它旨在帮助开发人员在本地查看其应用程序发送给客户端的邮件的布局(订阅邮件等)。

    IBM主机操作系统使用入门.docx

    * CICS 的交易处理流程 * CICS 的操作界面 六、应用程序的编辑、编译和运行 用户可以使用 ISPF/PDF 或 TSO 命令来编辑、编译和调试应用程序,完成应用程序的开发和测试工作。 知识点: * 应用程序的编辑方法 * ...

    QSB培训资料.pdf

    OI (JES) SOT(JIT) Risk Reduct EPV LPA VS Contam SCM 2 FAST RESPONSE PROCESS 快速反应程序 重大质量事件的沟通和管理 问题解决 经验教训 1 2 3 针对质量事件的标准化快速反应流程: General Motors ...

    ImageGlitch:ImageGlitch 是一个简单的故障艺术程序,旨在作为对 Python 的有趣介绍。 它为了可理解性而牺牲了效率

    图像故障作者:Margo Morton 版本:11/16/2014 程序:JES 4.3 许可证:MIT 只要您给予信任,就可以自由复制和更改描述:ImageGlitch 是一个简单的故障艺术程序,旨在对 Python 进行有趣的介绍。 它为了可理解性而...

    svarog:React中的SVG创建者

    npm install 要在端口3000上启动开发实时服务器,请执行以下操作: npm start 创建生产版本npm run build 这将在/build目录中创建整个应用程序,该应用程序可以部署在任何服务器上。 注意:它确实需要一台实际的...

    微信小程序:计算器项目 源码.rar

    微信小程序:计算器项目源码.rar

    窗口实用程序:各种窗口和变迹实用程序-matlab开发

    此 zip 文件包含与变迹和对称窗口生成相关的函数: 1) atomwin - 基于原子函数的窗口2) babicwin - Babic-Temes 窗口3) barthewin - ...ejeswin - 椭圆 Jes 窗口15) expwin - 指数窗口16)fillerwin - 填充窗口17) fla

    matlab中云滴代码-PuenteAlignmentW:桥接对齐W

    matlab中云滴代码<<<<<<< 头 普恩特对齐 最初由 Jesús ...此当前版本包含涉及两种基于同步的对齐算法(光谱/SDP ...Jesús ...Jesús ...Jesús ...的一个分支,专注于在核心工作流程的上游和

    Go4Me:残疾人和懒惰者的Web应用程序原型

    Go4Me是一个网络应用程序,其主要目标是向其他用户订购差事并支付将其带回家的费用。二手技术: CSS 3 HTML 5JPA贡献者小组1: 亚历杭德罗·加洛·马德里格(Alejandro Garau Madrigal) JesúsParejo Aliaga ...

    TimeFars-typescript-node

    大家好,我叫JesúsGarcía,在这个项目中,我尝试创建一个应用程序,以有效,快速地管理我们每个人的时间克隆存储库指南在本节中,我将解释一些有关如何在本地计算机上部署该项目的信息,以便任何人都可以正确地...

    LinkedDataGenerator-开源

    作者:Jesús Río Álvarez、Ana García Serrano(ETSI Informática,UNED) LinkedDataGenerator 是一种应用程序,能够利用从关联开放数据 (LOD) 云收集的信息来丰富视频转录。 系统从转录中执行 NER 检测,然后...

    Macrodex:基于数字图像处理和机器学习技术的无脊椎动物识别应用程序。-matlab开发

    Macrodex 是一种计算应用程序,它允许通过哥伦比亚安蒂奥基亚省(拉尼特拉河、圣胡安和考卡河)河流的实验室规模数字照片识别和识别水生无脊椎动物。 受训流派: - Traulodes - 旅行者- 肢端神经症- Smicridea ...

    Learn-TypeScript-3-by-Building-Web-Applications:由Packt发布,《通过构建Web应用程序学习TypeScript 3》

    借助其强大的静态类型系统以及其他强大的工具和技术,它使开发人员可以编写现代JavaScript应用程序。 本书涵盖以下激动人心的功能: 了解并利用TypeScript强大的Type System 掌握Angular,React,Vue.js和NestJS...

    bedrock:前端样板和工作流程

    基岩前端样板和Gulp工作流程。 运行于:我该如何使用假设您已经安装了和 : 下载回购的压缩文件从根目录运行npm install 运行gulp以查看命令选项列表如果无法解决问题,请执照MIT许可证(MIT) 版权所有(c)2014 ...

    CRUD_TEST

    CRUD_TEST通过JesúsSerranoMuñoz 在这个项目中,我将实现一个小的Django应用程序来管理(CRUD)用户及其银行帐户数据(IBAN)。 必填字段是名字,姓氏和IBAN。 数据应经过验证。 应用程序的管理员应使用Google帐户...

Global site tag (gtag.js) - Google Analytics