OSGI的技术渐渐被采用到互联网应用的开发中.这里不讨论OSGI,即我们熟悉的Equinox,Felix是如何进.Java Web应用开发,这里讨论的是一个目前看来较新的方案——Eclipse Virgo.
Eclipse Virgo对OSGI进行了再次封装,底层使用的是Equinox.有朋友知道,其实Eclipse Virgo的OSGI部分是Spring-DM.没错,Virgo最早由Spring开发,Spring对tomcat进行了扩展,使该容器成了一个集OSGI容器,Web容器于一体的OSGI-Web应用服务器.后来捐献给了Eclipse,改名为Eclipse Virgo.
今天我在这里介绍一下,如何在我们的Web开发中加入OSGI的能力,使我们的应用变的模块化,并且具有动态性.
首先,还是来看如何搭建我们的开发环境.我们这里会使用到Virgo,Maven.假设看这篇介绍的朋友已经熟悉Maven,因为我们的重点不在Maven,所以略过。我们重点介绍Virgo如何配置,如何与Maven集成。
一、Virgo-tomcat-server 3.5.0-RELEASE
1.安装
下载地址:http://www.eclipse.org/downloads/download.php?file=/virgo/release/VTS/3.5.0.RELEASE/virgo-tomcat-server-3.5.0.RELEASE.zip
2.关联Maven
修改${virgo_home}/configuration/org.eclipse.virgo.repository.properties,增加本地maven仓库位置
ext.type=external
ext.searchPattern=repository/ext/{artifact}
usr.type=watched
usr.watchDirectory=repository/usr
mvn.type=external
mvn.searchPattern=${user.home}/.m2/repository/**/{bundle}.jar
chain=ext,usr,mvn
Virgo的启动加载顺序是:plugins,repository/ext,repository/usr,mvn。注意,我们这里说的是开发环境,所以需要配置maven。如果是线网环境,是没有maven的。那么只需要将所有bundle及依赖的第三方bundle放到repository/usr/即可。
3.打开userregion osgi控制台
修改${virgo_home}/repository/ext/osgi.console.properties.打开userregion控制台
telnet.enabled=true
telnet.port=2501
telnet.host=localhost
ssh.enabled=true
ssh.port=2502
ssh.host=localhost
可以通过 ssh admin@localhost -p 2502 登录osgi控制台
默认密码:springsources
windows下使用 telnet localhost 2501 登录osgi控制台
4.给virgo添加snaps支持
介绍一下snaps。Virgo对OSGI的WAB(web application bundle)规范做了支持,一个应用是由很多bundle组成的,但是有一个bundle是host,这个host里面要配置应用总的上下文假设:demo。其他web模块的bundle,假设有一个模块是用户管理user,还有一个是role。那么我们最终的请求路径就是http://localhost:8080/demo/user/xxx.html或者http://localhost:8080/demo/role/xxx.html。这就是Host-Snap概念。一个OSGI-Web应用,有一个host,另外按模块分有N个Snap。这里我们要用到Virgo的snaps支持,让它优先加载,作为userregion的能力给我们提供服务。
在${virgo_home}/repository/ext/下创建文件org.eclipse.virgo.snaps.plan,内容:
<plan name="org.eclipse.virgo.snaps" version="3.0.0" scoped="false" atomic="true"
xmlns="http://www.springsource.org/schema/dm-server/plan"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springsource.org/schema/dm-server/plan
http://www.springsource.org/schema/dm-server/plan/springsource-dm-server-plan.xsd">
<artifact type="bundle" name="org.eclipse.virgo.snaps.api" version="[3, 4)"/>
<artifact type="bundle" name="org.eclipse.virgo.snaps.core" version="[3, 4)"/>
</plan>
修改${virgo_home}/configuration/org.eclipse.virgo.kernel.userregion.properties文件,在文件末尾添加:
initialArtifacts=repository:plan/org.eclipse.virgo.kernel.userregion.springdm, repository:plan/org.eclipse.virgo.web.tomcat, repository:plan/org.eclipse.virgo.snaps
5.启动
我们使用的是Virgo3.5.0,它使用的spring版本是3.0.5.RELEASE。所以,确保mvn本地仓库中没有spring的其他版本,只存在3.0.5.RELEASE版本。否则会包冲突,导致virgo无法启动。
调试状态启动:./startup.sh -clean -debug
启动成功后,访问http://localhost:8080/admin查看osgi环境及bundle部署情况
用户名/密码:admin/springsource