基于OSGi的Virgo环境搭建(二)——集成Snaps

 由  rocky.wang 发布

上一篇我们介绍了用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 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停机带来的影响及损失。


wangs 2016-09-26 15:53

部署animal包的时候出现A message with the key 'SN0000I' was not found. The inserts for the message were '[/animal-menu-bar]' 这是什么意思,网站上提示都部署成功了,但是实际上打开网页并未出现DOG图像

顶(0) 踩(0) 回复

hasan 2016-04-28 11:37

集成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) 回复

wmz 2015-10-04 20:23

OSGi最成熟,最NB的开源开发平台JXADF,官网:http://osgi.jxtech.net

顶(0) 踩(0) 回复

myseason 2015-08-06 00:28

回复myseason: 自己找到了,可以bundle里面stop或start

顶(0) 踩(0) 回复

myseason 2015-08-06 00:14

可以部署上去了,但是在哪个页面管理里这几个jar呢,比如卸载?有人知道吗?请指点一下

顶(0) 踩(0) 回复

arnold66 2015-07-14 11:38

<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) 回复

zbeboy 2015-07-07 19:51

如果出现Nothing deploye! 你就随便找个文件,不是jar包上传,然后就有反应了,现在再去上传simple文件夹下的jar包就可以了。

顶(0) 踩(0) 回复

leiFei 2015-03-25 15:33

回复awenli: IE浏览器。。。。换个

顶(0) 踩(0) 回复

洪庆斌 2015-01-18 18:06

virgo 的classloader的工作原理,大家有谁可以介绍一下吗?class not found 太纠结了。

顶(0) 踩(0) 回复

gec 2014-10-06 10:42

回复李俊辉: work目录下自己建一个tmp目录

顶(1) 踩(0) 回复

李俊辉 2014-09-15 14:47

回复zhang90030: 自动就好了,估计是读数据的时候需要给系统多一点时间。

顶(0) 踩(0) 回复

zhang90030 2014-09-15 14:47

回复李俊辉: 大哥,说下怎么解决方案啊!!

顶(0) 踩(0) 回复

zhang90030 2014-09-15 14:47

回复李俊辉: 大哥,说下怎么解决方案啊!!

顶(0) 踩(0) 回复

zhang90030 2014-09-15 14:42

回复李俊辉: 回复李俊辉: 大哥,说下怎么解决方案啊!!

顶(0) 踩(0) 回复

我心永恒 2014-09-02 20:22

回复checkless: work目录下自己建一个tmp目录

顶(0) 踩(0) 回复

wangsheng 2014-07-31 11:31

回复vasdzhao: \work目录下自己建一个tmp目录

顶(1) 踩(0) 回复

checkless 2014-07-21 00:28

回复李俊辉: 兄弟怎么不上线了。如何解决的大家都等着呢,给个指导下,先感谢了!

顶(0) 踩(0) 回复

ss007cc 2014-07-03 17:04

回复李俊辉: 兄弟,咋解决的啊。

顶(0) 踩(0) 回复

liang.Zhang 2014-07-02 22:24

部署 animal.jar 的时候,报 Nothing deployed 查看 chrome 的控制台,提示找不到 http://localhost:8080/admin/upload 这个地址。 报的是500错误。。是不是缺少了什么bundle?

顶(22) 踩(0) 回复

vasdzhao 2014-06-27 10:17

我布署animal jar包的时候,也是显示错误:Nothing deployed!<br>请问谁解决这个问题了啊

顶(0) 踩(0) 回复

vic 2014-06-21 16:08

回复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) 回复

vic 2014-06-21 14:01

animal jar部署不上去哦,不知道是什么原因。显示错误:Nothing deployed!

顶(1) 踩(0) 回复

王磊 2014-06-18 22:37

回复李俊辉: 怎么解决的

顶(3) 踩(1) 回复

chris 2014-06-08 17:02

[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) 回复

李俊辉 2014-06-06 14:47

非常好的文章,谢谢分享!

顶(0) 踩(0) 回复

李俊辉 2014-06-06 14:47

现在可以部署上去了。

顶(0) 踩(0) 回复

李俊辉 2014-06-06 11:13

animal jar部署不上去哦,不知道是什么原因。显示错误:Nothing deployed!

顶(0) 踩(0) 回复

李俊辉 2014-06-06 10:52

选中 bundle后,点击deploy 后,出现 Nonthing Deployed!是什么原因?

顶(0) 踩(0) 回复

李俊辉 2014-06-06 10:51

选中 bundle后,点击deploy 后,出现 Nonthing Deployed!

顶(2) 踩(0) 回复

awenli 2014-06-03 15:13

部署snaps目录的例子jar包点击“Deploy”后弹出一个对话框“File name contains ‘/' or '\',this is not allowed“ 这个提示,因为部署的是sanps中例子的jar包,不可能有‘/’ 或‘\’符号啊!

顶(104) 踩(0) 回复

jujunjun 2014-05-29 11:11

回复jujunjun: 管理员帮忙删除了一些回复吧,当时网络有问题,导致回复了这么多。

顶(0) 踩(0) 回复

jujunjun 2014-05-29 11:09

回复jujunjun: 搞定,当时没有好好看这个异常,是在virgo的work目录下没有tmp目录导致的,自己手动创建这个tmp就OK了。

顶(0) 踩(0) 回复

snoopy7713 2014-05-29 08:58

不一定用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) 回复

jujunjun 2014-05-28 18:38

在部署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) 回复

snoopy7713 2014-05-27 09:30

期待剖析virgo snaps 插件的详细机制。在http://osgi.com.cn/article/7289354上面说的太简单了。<br>我们用的是struts2。怎么让snaps+struts2+spring整合起来。struts2-osgi-plugin.jar写的太烂了没有看懂原理 snaps插件的原理也不十分懂。<br>找我讨论的联系方式, QQ: 16200780

顶(105) 踩(0) 回复
查看评论