??xml version="1.0" encoding="utf-8" standalone="yes"?>
q里l出一些学?/span>OSGi的资料,OK,五天以后见了Q一h学习吧,哈哈?/span>
比较好的中文学习资料Q?/span>http://www.javaeye.com/topic/22071
比较好的英文学习资料Q?/span>http://neilbartlett.name/blog/osgi-articles/
DW上的文章搜烦Q?/span>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大牛的blogQ?a href="http://www.aygfsteel.com/bluedavy">http://www.aygfsteel.com/bluedavyQ看的我如痴如醉啊,哈哈
׃我是利用Java?/span>web斚w的东西,所以我们先学习一下如何开发一?/span>web application?/span>
先从理论上武装一下自己,理解普通的web application?/span>Lotus Expeditor ?/span> web application有什么区别?/span>定位?/span>Lotus Expeditorq_?/span>Web ApplicationUCؓClient Services web application?/span>因ؓLotus Expeditorq_的组件被UCؓbundles,所以一个定位于此^台的Web Application也被UCؓ一?/span>Web Application Bundle或?/span>WAB?/span>Client Services web application 和运行在 WAS(Websphere Application Server) 或?/span> tomcat 下的 web application一个主要的不同是Client Services web application必须也是一个有效的OSGI Bundle。那么什么是OSGI呢?q个p来话长了Q等我们翼丰满了以后,在具体讨个问题吧Q我们还是先实现一?/span>定位?/span>Lotus Expeditorq_?/span>Web Application?/span>
首先需要创Z?/span>Web application,打开eclipse,File-New-Project, 选择Client Services Web 目Q如下图Q?/span>
我们把这个工E叫?/span> HelloWorld 吧,如下图:
然后一?/span>Next,直到如下面Q?br />
我们看看一个普通的Lotus Expeditor?/span>web application都用C哪些包,?/span>Apache MyFaces(org.apache.myfaces) Q?/span>Eclipse核心lg(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)Q?/span>IBM JavaServer Faces(JSF)扩展(com.ibm.rcp.servlet.jsf.ext,com.ibm.rcp.servlet.jsf.ext.impl)Q?/span>JavaServer Pages(JSP) API(com.ibm.pvc.servlet.jsp)Q?/span>JavaServer 面窗口小部g?/span>(JWL)(com.ibm.rcp.servlet.jwl)Q?/span>JSP标准标记?/span>(JSTL)(com.ibm.pvc.servlet.jsp.jstl)Q?/span>Servlet API(com.ibm.pvc.servlet)Q?/span>Web Application服务(org.osgi.service.webapplication)Q?/span>Web Application兼容?/span>(com.ibm.osg.servlet,com.ibm.osg.webapp)Q?/span>Web Container(com.ibm.pvc.webcontainer) Q?/span>Web容器-JSP~译器网桥,可靠性,可用性和可维护?/span>(RAS)(com.ibm.pvc.ras)Q这些组仉是干什么用的呢Q说实话Q我也一头雾_先暂时不,我们点击Finish完成工程的创建?/span>
让我们看看新建的工程和普通的Web Application的目录结构有什么不同,如下图:
Lotus Expeditor?/span>Web Application相比普通的Web Application在整体结构上基本是没有什么区别的Q主要是多出?/span>plugin.xml?/span>META-INF/MANIFEST.MF两个文g。我按照我目前的理解先说说这两个文gQ说之前׃得不提到OSGI了,其实我很早就听说?/span>OSGI,也对它的架构和设计思想有一些了解,只不q从来没有自己动手实践过Q所以也是一知半解,只知道个概念而已。好Q我们下面就说说OSGI
OSGI Bundle概述
Bundles是含有包含特定头信息?/span>manifest?/span>jar文g,q些头信息描qCbundleq且列出?/span>bundle的依赖性,比如?/span>bundle需要的包和服务?/span>Manifest文g中的描述信息?/span>bundle和其他的jar文g区分开。非bundle?/span>jar文g?/span>manifest文g常常包含了好的信息。但是,bundle?/span>manifest文g通常包含了描qC息,比如?/span>bundle的名字,版本以及?/span>bundle需要的包和服务的列表?/span>
框架理bundle的生命周期,bundle的生命周期分为:
INSTALLED-bundle已经安装Q但是该bundle的依赖性还没有被完全解冟?/span>
RESOLVED-bundle的状态是installed,q且已经解决了依赖性问题,但是?/span>bundleq没有被q行?/span>如果一?/span>bundle已经启动Qƈ且所有的依赖性问题已l解冻I那么?/span>bundle׃跌RESOLVED状态?/span>
STARTING-bundle正式q行的一个时状?/span>
ACTIVE-bundle正在q行
STOPPING-bundle的另一个时状?/span>
UNINSTALLED-bundle不再存在于框架中
每个bundle都必d含一?/span>manifest文g?/span>Bundle?/span>manifest文g包含框架需要正安装的数据和激zȝbundle?/span>Legacy Eclipse bundles 能够?/span>plugin.xml文g中提供一?/span>manifest的信息,但是我们使用META-INF/MANIFEST.MF文g来记?/span>manifeset信息?/span>
注意Q?/span>plugin.xml可以包含cM的信息,但是Q?/span>plugin.xml也包含了扩展和扩展点?/span>
如果一?/span>bundle仅仅包含了一?/span>plugin.xml,Eclipseq_在启动时生成一个等Lmanifest.mf。当你在manifest文g中指定数据的时候,你必M?/span>OSGI标准中定义的文g头。你可以使用用户定义的文件头Q但是,框架会忽略M它不能够理解的文件头?/span>
MANIFEST.MF文g位于bundle工程?/span>META-INF目录下?/span>Plugin.xml文g位于根目录下?/span>
上面说了q么多,M意思就是说MANIFEST.MF是区分普?/span>Web Application?/span>OSGI Bundle的标志,而一?/span>Client Services web application需要含有一个plugin.xml?/span>下面列出?/span>Client Services web application和标准的web application的不同之处:
1Q?/span>The Lotus Expeditor platform 不支持通过EAR部vEnterprise Application。Web Application是被直接部v到运行时的(后面q句话不太理解。。。)
2Q?/span>Client Services web application有一?/span>manifest文g, 位于META-INF/MANIFEST.MF, 它包含了引用包的信息以及bundel依赖性的信息?/span>
3QClient Services web application 有一个包含了扩展点的 plugin.xml文gQ利用这个文件可以简单地启动Web application?/span>
4QClient Services web application 含有记录了额外部|信息的wab.properties文g?/span> q个文g位于 Webcontent /WEB-INF文g夏V?/span>
5QJSP文g在作?/span>WAB部v到运行时前被~译成相对应?/span>Servlet?/span>
我们只是从理论的高度看了一?/span>Client Services Web ApplicationQ是不是有点恐高Q没关系Q让我们具体实践一下。在WebContent文g夹下创徏index.jsp,如下图:
JSP源代码如下:
JSP文g已经创徏好,先在服务器上q行看看效果如何Q右键点?/span>HelloWorld工程Q?/span>Run As-Run on Server,选择刚才Client Services v6.1,直接finish可以了?/span>
在弹出的Lotus Expeditor Client的编辑窗口中点击打开菜单Q我们看到菜单项q没有发生什么变化,如下图:
回到EclipseQ我们发?/span>Eclipse打开了我们刚才创建的index.jsp,如下图:
说明index.jsp创徏成功了,我们q需要将q个HelloWorldd?/span>Lotus Expeditor的菜单项中。那么我们到底应该怎么做呢Q前面说q了Q?/span>Client Services web application区别于其?/span>Web Application是plugin.xml文g。打开q个文g看看吧,如下图:
q段代码的含义就是将我们?/span>HelloWorld注册?/span>Client Service中,q样我们可以可以在Client Server启动时访问到HelloWorld工程了。那么具体怎么?/span>Lotus Expeditor Client的菜单项中添加我们的工程呢?
扩充如下代码Q最l?/span>plugin.xml文g如下Q?/span>
我们再重新运?/span>Hello World工程Q看一?/span>Lotus Expeditor Client的菜单项Q是不是多出来了“你好”菜单Q如下图Q?/span>
注意Q?/span><contextRoot>/HelloWorld</contextRoot>?/span>url="/HelloWorld"/一定要对应?/span>
我们的简单东西到q里全部介l完了,下次来点高的东西,我也是边学边写,哈哈?/span>
我们已经完成?/span>Lotus Expeditor Client的安装,下一步需要进行实际的开发了?/span>
我不x照惯例搞一?/span>HelloWorld出来Q因为我拥有E序员的三个优点Q懒惎ͼ急躁和傲慢,哈哈Q所以,我决定找一找有没有什么现成的东西可以直接拿来利用的?/span>
让我们看一看,点击Help-Welcome,如下图:
恩,我觉得地球A的图标很好看啊(时候是个地理迷Q,我决定点地球仪看看里面有什么东ѝ瞧瞧我们发C什么?哦,q不正是我们现在q切需要的东西吗?
让我们点?/font>Lotus Expeditor Toolkit介进MH究竟,弹出一个帮助菜单,全英文,看v来挺唬h的?br />
好吧Q你被打败了Q我会点英文Q哈哈,我不紧不慢地打开Product overview,我的眼前一亮,using samples?多么爽啊。来来,让我们打开Installing samples using Eclipse看看里面都有些什?/font>sample啊?br />
例子q真不少Q由于我现在比较饿了Q所以我军_选择pizza Jsp Samples,点击如下图:
好了Q具体的执行Ҏ已经用黑体字Q其实都是黑体。。。)标示的很清楚了,我这里就不像唐僧一样唠叨了。我们来?/span>Lotus Expeditor Client上运行一?/span>Pizza Samples吧,先爽一爽?/span>
右键点击工程Q选择Run As-Run on Server,弹出如下对话框:
我们直接点击Finish看看效果如何Q会出现Lotus Expeditor Client的编辑窗口,要求输入密码Q初始密码一定要C哦,可以单地讑֮?/span>1234567。输入密码后p入了Lotus Expeditor Client的主面Q点d上角的蓝?/span>“打开”按钮Q如下图Q?/span>
菜单中Q?/span>Web览器,订单输入富客hhQ?/span>Enterprise Management Agent ServletQ订单数?/span>Webh?/span>Lotus自带?/span>web application,我们重点看一下刚才创建的pizza Jsp,点击最后一?/span>”hPizza JSP Web Application”,出现面如下Q?/span>
说明我们之前的操作都成功了,什么?你没出现q样的画面?人品问题Q自己再按照前面的步骤重新做一遍。其实问题的关键q不?/span>Lotus Expeditor,我们现在回过头看?/span>Eclipse里有什么变?br />
q行-cmdQ打开命o行窗口,netstat -a 查看zd的端口,如下图:
我们可以看到8777端口是活动的Q这?/span>8777端口是Client Service的默认端口了Q我们先不研I如何修改端口,Client Service的原理,那个先放到后面谈?/span>