posts - 4, comments - 2, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2008年1月14日

 

前面已经介绍过一些OSGi的东西,不过说实话,我自己还是一头雾水,不过我也清晰的认识到,Lotus Expeditor Client的基础就是OSGi,基于OSGi,你可以整合更多的框架,所以,我们一起来学习OSGi吧,基础打牢了,我们的大厦就会盖得越高。

这里给出一些学习OSGi的资料,OK,五天以后见了,一起来学习吧,哈哈。

比较好的中文学习资料:http://www.javaeye.com/topic/22071

比较好的英文学习资料:http://neilbartlett.name/blog/osgi-articles/

DW上的文章搜索:http://www-128.ibm.com/developerworks/search/searchResults.jsp?searchType=1&searchSite=dWChina&pageLang=zh&langEncoding=UTF8&searchScope=dW&query=osgi&Search.x=26&Search.y=5

重点推荐OSGi大牛的blog:http://www.blogjava.net/bluedavy,看的我如痴如醉啊,哈哈

posted @ 2008-01-15 13:32 EricFan 阅读(310) | 评论 (0)编辑 收藏

 

也许每本编程书籍都已Hello World为开头不是没有原因的,因为Hello World以浅显的编程技巧可以迅速地让开发者上手,所以,我决定还是落入俗套吧,这次我们来讲如何实现一个Hello World

由于我是利用Javaweb方面的东西,所以我们先学习一下如何开发一个web application

先从理论上武装一下自己,理解普通的web applicationLotus Expeditor web application有什么区别。定位于Lotus Expeditor平台的Web Application称为Client Services web application因为Lotus Expeditor平台的组件被称为bundles,所以一个定位于此平台的Web Application也被称为一个Web Application Bundle或者WABClient Services web application 和运行在 WAS(Websphere Application Server) 或者 tomcat 下的 web application一个主要的不同就是Client Services web application必须也是一个有效的OSGI Bundle。那么什么是OSGI呢?这个就说来话长了,等我们羽翼丰满了以后,在具体讨论这个问题吧,我们还是先实现一个定位于Lotus Expeditor平台的Web Application

首先需要创建一个Web application,打开eclipse,File-New-Project, 选择Client Services Web 项目,如下图:

 
 

我们把这个工程叫做 HelloWorld 吧,如下图:


 

然后一路Next,直到如下页面:



 

我们看看一个普通的Lotus Expeditorweb application都用到了哪些包,有Apache MyFaces(org.apache.myfaces) Eclipse核心组件(com.ibm.jxesupport.initializer,org.eclipse.core.contenttype,org.eclipse.core.jobs,org.eclipse.core.runtime,org.eclipse.equinox.common,org.eclipse.equinox.event,org.eclipse.equinox.preferences,org.eclipse.equinox.registry,org.eclipse.osgi,org.eclipse.osgi.services,org.eclipse.osgi.util)IBM JavaServer Faces(JSF)扩展(com.ibm.rcp.servlet.jsf.ext,com.ibm.rcp.servlet.jsf.ext.impl)JavaServer Pages(JSP) API(com.ibm.pvc.servlet.jsp)JavaServer 面窗口小部件库(JWL)(com.ibm.rcp.servlet.jwl)JSP标准标记库(JSTL)(com.ibm.pvc.servlet.jsp.jstl)Servlet API(com.ibm.pvc.servlet)Web Application服务(org.osgi.service.webapplication)Web Application兼容性(com.ibm.osg.servlet,com.ibm.osg.webapp)Web Container(com.ibm.pvc.webcontainer) Web容器-JSP编译器网桥,可靠性,可用性和可维护性(RAS)(com.ibm.pvc.ras),这些组件都是干什么用的呢?说实话,我也一头雾水,先暂时不管,我们点击Finish完成工程的创建。

让我们看看新建的工程和普通的Web Application的目录结构有什么不同,如下图:


 

Lotus ExpeditorWeb Application相比普通的Web Application在整体结构上基本是没有什么区别的,主要是多出了plugin.xmlMETA-INF/MANIFEST.MF两个文件。我按照我目前的理解先说说这两个文件,说之前就不得不提到OSGI了,其实我很早就听说了OSGI,也对它的架构和设计思想有一些了解,只不过从来没有自己动手实践过,所以也是一知半解,只知道个概念而已。好,我们下面就说说OSGI

OSGI Bundle概述

Bundles是含有包含特定头信息的manifestjar文件,这些头信息描述了bundle并且列出了bundle的依赖性,比如说bundle需要的包和服务。Manifest文件中的描述信息将bundle和其他的jar文件区分开。非bundlejar文件的manifest文件常常包含了好少的信息。但是,bundlemanifest文件通常包含了描述信息,比如说bundle的名字,版本以及此bundle需要的包和服务的列表。

框架管理bundle的生命周期,bundle的生命周期分为:

INSTALLED-bundle已经安装,但是该bundle的依赖性还没有被完全解决。

RESOLVED-bundle的状态是installed,并且已经解决了依赖性问题,但是该bundle并没有被运行。如果一个bundle已经启动,并且所有的依赖性问题已经解决,那么该bundle就会跳过RESOLVED状态。

STARTING-bundle正式运行的一个临时状态

ACTIVE-bundle正在运行

STOPPING-bundle的另一个临时状态

UNINSTALLED-bundle不再存在于框架中

每个bundle都必须包含一个manifest文件。Bundlemanifest文件包含框架需要正确安装的数据和激活的bundleLegacy Eclipse bundles 能够在plugin.xml文件中提供一些manifest的信息,但是我们建议使用META-INF/MANIFEST.MF文件来记录manifeset信息。

注意:plugin.xml可以包含类似的信息,但是,plugin.xml也包含了扩展和扩展点。

如果一个bundle仅仅包含了一个plugin.xml,Eclipse平台在启动时将生成一个等价的manifest.mf。当你在manifest文件中指定数据的时候,你必须使用OSGI标准中定义的文件头。你可以使用用户定义的文件头,但是,框架将会忽略任何它不能够理解的文件头。

MANIFEST.MF文件位于bundle工程的META-INF目录下。Plugin.xml文件位于根目录下。

上面说了这么多,总体意思就是说MANIFEST.MF是区分普通Web ApplicationOSGI Bundle的标志,而一个Client Services web application就需要含有一个plugin.xml。下面列出了Client Services web application和标准的web application的不同之处:

1The Lotus Expeditor platform 不支持通过EAR部署Enterprise Application。Web Application是被直接部署到运行时的(后面这句话不太理解。。。)

2Client Services web application有一个manifest文件, 位于META-INF/MANIFEST.MF, 它包含了引用包的信息以及bundel依赖性的信息。

3,Client Services web application 有一个包含了扩展点的 plugin.xml文件,利用这个文件可以简单地启动Web application。

4,Client Services web application 含有记录了额外部署信息的wab.properties文件。 这个文件位于 Webcontent /WEB-INF文件夹。

5,JSP文件在作为WAB部署到运行时前被编译成相对应的Servlet

我们只是从理论的高度看了一下Client Services Web Application,是不是有点恐高?没关系,让我们具体实践一下。在WebContent文件夹下创建index.jsp,如下图:



 

JSP源代码如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding
="ISO-8859-1"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>HelloWorld</title>
</head>
<body>
HelloWorld
</body>
</html>
 

JSP文件已经创建好,先在服务器上运行看看效果如何?右键点击HelloWorld工程,Run As-Run on Server,选择刚才Client Services v6.1,直接finish就可以了。

在弹出的Lotus Expeditor Client的编辑窗口中点击打开菜单,我们看到菜单项并没有发生什么变化,如下图:


 

回到Eclipse,我们发现Eclipse打开了我们刚才创建的index.jsp,如下图:


 

说明index.jsp创建成功了,我们还需要将这个HelloWorld添加到Lotus Expeditor的菜单项中。那么我们到底应该怎么做呢?前面说过了,Client Services web application区别于其他Web Application就是plugin.xml文件。打开这个文件看看吧,如下图:



 

这段代码的含义就是将我们的HelloWorld注册到Client Service中,这样我们可以就可以在Client Server启动时访问到HelloWorld工程了。那么具体怎么在Lotus Expeditor Client的菜单项中添加我们的工程呢?

 

扩充如下代码,最终plugin.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<extension point="com.ibm.pvc.webcontainer.application">
<contextRoot>/HelloWorld</contextRoot>
<contentLocation>WebContent</contentLocation>
</extension>
<extension id="helloworld" point="com.ibm.eswe.workbench.WctWebApplication">
     
<WEBApplication DisplayName="你好">
        
<WebApplicationUrl local="true" secured="false" url="/HelloWorld"/>
     
</WEBApplication>
</extension>
</plugin>

 

我们再重新运行Hello World工程,看一看Lotus Expeditor Client的菜单项,是不是多出来了“你好”菜单?如下图:



 

注意:<contextRoot>/HelloWorld</contextRoot>url="/HelloWorld"/一定要对应。

我们的简单东西到这里就全部介绍完了,下次来点高级的东西,我也是边学边写,哈哈。


posted @ 2008-01-14 16:16 EricFan 阅读(622) | 评论 (0)编辑 收藏