上一篇我们介绍了用java开发模块化web所需最基本环境(STS+Virgo),本节将介绍如何集成Snaps到Virgo中并演示几个官方的小Demo。
1.预备知识
Snaps是什么?
可以参考http://osgi.com.cn/article/7289354。
2.集成Snaps
首先,我们进入http://www.eclipse.org/virgo/download/,下载Virgo Snaps。
下载并解压,目录结构如下:
下面我们将Snaps System 集成到 Virgo Tomcat Server中。
步骤一:
dist目录中存放的是snaps相关jar包,我们将该目录下的所有内容拷贝到${SERVERHOME}/repository/usr(${SERVERHOME}是指你本机安装的virgo server的根路径,譬如F:\virgo-tomcat-server-3.6.2.RELEASE\repository\usr)以及${SERVER_HOME}/repository/ext目录下。
步骤二:
修改文件${SERVER_HOME}/configuration/org.eclipse.virgo.kernel.userregion.properties,在该文件末尾追加repository:plan/org.eclipse.virgo.snaps(即在initialArtifacts的右边赋值),使virgo server 在启动时能加载我们集成的snaps相关功能。
步骤三:
检查我们集成的snaps功能是否生效,在STS中启动我们的Virgo Server。在控制台检查输出信息,如果配置安装正确,则会打印出如下图所示信息。
成功集成Snaps之后,接下来我们将官方提供的Demo部署到Virgo Server上面。
我们在STS IDE中启动Virgo Server,打开浏览器输入http://localhost:8080/ 进入管理页面。
点击Artifacts选项卡,进入部署页面。
添加sample文件夹下的jar包,之后点击Deploy。
点击Deploy之后,部署结果弹出,为什么会产生错误?仔细观察,不难发现是bundle版本出现问题。
注意:产生这个问题的原因是Virgo Snaps官方demo jar文件未及时修改更新版本所致。
如何解决这个问题?
以修改org.eclipse.virgo.snaps.sample.animal-3.6.2.RELEASE.jar为例。
用rar软件打开jar包,打开META-INF目录,修改MANIFEST.MF文件,将3.1修改为4,然后保存修改。
修改完毕后,重新部署一下这org.eclipse.virgo.snaps.sample.animal-3.6.2.RELEASE.jar。
此时弹出正确部署的结果。
其他jar包修改方法类似,此处略。
成功部署我们的host-bundle之后,STS控制台会输出 Host created for path '/animal-menu-bar'
这表明host已经加载并安装到我们的Virgo Snaps容器中,此时打开浏览器,访问http://localhost:8080/animal-menu-bar/看看效果吧。
OK,接下来我们依次将剩下的3个jar部署到Virgo Snaps容器中。
部署方法同animal,此处略过,直接上效果图。
部署Dog成功后,控制台输出 Snap bound to path '/animal-menu-bar/dog' 接下来刷新http://localhost:8080/animal-menu-bar/页面。
发现此时多了Dog这个链接。
点击Dog链接,会看到一个十分可爱的DOG。
3.总结
通过官方Demo可以看出,animal是host,而dog、blue、cat都是snap,即snap是attach(依附)在host上面的。snap不能单独运行,必须依赖于某一个唯一的host。我们可以将dog、blue、cat等jar视为我们开发的新模块,在部署新的模块时,不需要重启Server,就像例子展示的那样,动态的在Virgo Server管理页面上安装部署jar,实现热插拔及动态部署的功能。这一点相对于传统方式有很大的灵活性以及扩展性,不用担心因服务器端程序版本升级或添加新模块而停掉Server,已减少Server停机带来的影响及损失。
转载自:http://osgi.com.cn/article/7289515