上一篇我们介绍了用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版本出现问题。

如何解决这个问题?
以修改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已经加载并安装到我们的Virgo Snaps容器中,此时打开浏览器,访问http://localhost:8080/animal-menu-bar/看看效果吧。

OK,接下来我们依次将剩下的3个jar部署到Virgo Snaps容器中。
部署方法同animal,此处略过,直接上效果图。
部署Dog成功后,控制台输出
发现此时多了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停机带来的影响及损失。
如果调用BundleContext.installBundle方法进行安装,怎么操作?<br>我的安装后,不是一个web。但是能安装成功。也不是一个spring
顶(0) 踩(0) 回复部署animal包的时候出现A message with the key 'SN0000I' was not found. The inserts for the message were '[/animal-menu-bar]' 这是什么意思,网站上提示都部署成功了,但是实际上打开网页并未出现DOG图像
顶(0) 踩(0) 回复集成snaps至virgo tomcat中,应该看eclipse官网的snaps help<br> 1)Take the bundles and plan in the dist folder and place them in either the /repository/usr 或 /repository/ext folder of your Virgo install.<br> 2)config file at ${SERVER_HOME}/config/org.eclipse.virgo.kernel.userregion.properties. The property should be extended like this.<br> initialArtifacts=repository:plan/org.eclipse.virgo.kernel.userregion.springdm, <br> repository:plan/org.eclipse.virgo.web.tomcat, <br> repository:plan/org.eclipse.virgo.snaps
顶(0) 踩(0) 回复OSGi最成熟,最NB的开源开发平台JXADF,官网:http://osgi.jxtech.net
顶(0) 踩(0) 回复回复myseason: 自己找到了,可以bundle里面stop或start
顶(0) 踩(0) 回复可以部署上去了,但是在哪个页面管理里这几个jar呢,比如卸载?有人知道吗?请指点一下
顶(0) 踩(0) 回复<br>virgo在deploy时,默写浏览器不兼容。<br>在deploy后后台没有生成访问地址问什么?<br>[2015-07-14 11:33:38.311] http-bio-8080-exec-1 <DE0008I> Refreshed bundle 'org.eclipse.virgo.snaps.sample.animal-3.6.3.RELEASE' version '0.0.0'.<br><br><br>
顶(0) 踩(0) 回复如果出现Nothing deploye! 你就随便找个文件,不是jar包上传,然后就有反应了,现在再去上传simple文件夹下的jar包就可以了。
顶(0) 踩(0) 回复回复awenli: IE浏览器。。。。换个
顶(0) 踩(0) 回复virgo 的classloader的工作原理,大家有谁可以介绍一下吗?class not found 太纠结了。
顶(0) 踩(0) 回复回复李俊辉: work目录下自己建一个tmp目录
顶(1) 踩(0) 回复回复zhang90030: 自动就好了,估计是读数据的时候需要给系统多一点时间。
顶(0) 踩(0) 回复回复李俊辉: 大哥,说下怎么解决方案啊!!
顶(0) 踩(0) 回复回复李俊辉: 大哥,说下怎么解决方案啊!!
顶(0) 踩(0) 回复回复李俊辉: 回复李俊辉: 大哥,说下怎么解决方案啊!!
顶(0) 踩(0) 回复回复checkless: work目录下自己建一个tmp目录
顶(0) 踩(0) 回复回复vasdzhao: \work目录下自己建一个tmp目录
顶(1) 踩(0) 回复回复李俊辉: 兄弟怎么不上线了。如何解决的大家都等着呢,给个指导下,先感谢了!
顶(0) 踩(0) 回复回复李俊辉: 兄弟,咋解决的啊。
顶(0) 踩(0) 回复部署 animal.jar 的时候,报 Nothing deployed 查看 chrome 的控制台,提示找不到 http://localhost:8080/admin/upload 这个地址。 报的是500错误。。是不是缺少了什么bundle?
顶(22) 踩(0) 回复我布署animal jar包的时候,也是显示错误:Nothing deployed!<br>请问谁解决这个问题了啊
顶(0) 踩(0) 回复回复chris: 'repository:plan/org.eclipse.virgo.management/repository:plan/org.eclipse.virgo.snaps' 把中间的‘/'换成’,‘<br>'repository:plan/org.eclipse.virgo.management,repository:plan/org.eclipse.virgo.snaps'
顶(0) 踩(0) 回复animal jar部署不上去哦,不知道是什么原因。显示错误:Nothing deployed!
顶(1) 踩(0) 回复回复李俊辉: 怎么解决的
顶(3) 踩(1) 回复[2014-06-08 17:01:24.336] system-artifacts <DE0800E> URI 'repository:plan/org.eclipse.virgo.management/repository:plan/org.eclipse.virgo.snaps' is not of the expected form repository:<type>/<name>/<version>.
顶(0) 踩(0) 回复非常好的文章,谢谢分享!
顶(0) 踩(0) 回复现在可以部署上去了。
顶(0) 踩(0) 回复animal jar部署不上去哦,不知道是什么原因。显示错误:Nothing deployed!
顶(0) 踩(0) 回复选中 bundle后,点击deploy 后,出现 Nonthing Deployed!是什么原因?
顶(0) 踩(0) 回复选中 bundle后,点击deploy 后,出现 Nonthing Deployed!
顶(2) 踩(0) 回复部署snaps目录的例子jar包点击“Deploy”后弹出一个对话框“File name contains ‘/' or '\',this is not allowed“ 这个提示,因为部署的是sanps中例子的jar包,不可能有‘/’ 或‘\’符号啊!
顶(104) 踩(0) 回复回复jujunjun: 管理员帮忙删除了一些回复吧,当时网络有问题,导致回复了这么多。
顶(0) 踩(0) 回复回复jujunjun: 搞定,当时没有好好看这个异常,是在virgo的work目录下没有tmp目录导致的,自己手动创建这个tmp就OK了。
顶(0) 踩(0) 回复不一定用STS,自己搭建开发环境:<br><br>Eclipse IDE for Java EE Developers http://www.eclipse.org/downloads/<br>virgo server: http://www.eclipse.org/virgo/download/<br>Virgo Tooling https://wiki.eclipse.org/Virgo/Tooling
顶(0) 踩(0) 回复在部署demo的时候后台报下面的错误,这个如何解决啊?<br><br>[2014-05-28 18:36:05.572] INFO iLogServiceListener@7acc7439 org.osgi.service.log.LogService Bundle org.eclipse.virgo.management.console_3.6.2.RELEASE, No access restrictor found at classpath:/jolokia-access.xml, access to all MBeans is allowed <br>[2014-05-28 18:36:10.761] ERROR http-bio-8080-exec-9 org.eclipse.virgo.management.console.UploadServlet org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. D:\Ent\Apache\virgo-tomcat-server-3.6.2.RELEASE\work\tmp\upload_41a000_146426602b7__7faf_00000000.tmp (系统找不到指定的路径。) <br>
顶(0) 踩(1) 回复期待剖析virgo snaps 插件的详细机制。在http://osgi.com.cn/article/7289354上面说的太简单了。<br>我们用的是struts2。怎么让snaps+struts2+spring整合起来。struts2-osgi-plugin.jar写的太烂了没有看懂原理 snaps插件的原理也不十分懂。<br>找我讨论的联系方式, QQ: 16200780
顶(105) 踩(0) 回复