加入社区

订阅:www.yunweipai.com/feed

QQ群:
1群:201777608 - 运维综合
2群:526871767 - 运维综合
3群:1689067 - Linux Shell脚本

微博:weibo.com/tektea

微信:yunweipai(或扫描以下二维码)

合作伙伴

小猪动图 - GIF动图素材库_GIF在线工具

Eclipse OSGi被嵌入到tomcat后的console调试方法

使用过eclipse OSGi开发过的同学都知道,OSGi有一个控制台,可以交互式执行命令,对OSGi的bundle调试非常有帮助。
如果你还不明白上面那句话,你可以参考IBM Developer workers上的这边介绍OSGi的文章: Explore Eclipse's OSGi console

上面“ Explore Eclipse's OSGi console” 文章中举例的是通过Eclipse IDE的console进入OSGi的console,这个是因为OSGi默认的console是System.in。
但是在实际项目运行中,你会将System.in重定向到文件,或者你使用的第三方框架给你重定向了System.in(除非是需要通过CLI与交互的项目),这时候该如何在OSGi的console上做调试呢?

我们以基于OSGi的RAP(Rich Ajax Platform)开发为例子,如果RAP程序运行在tomcat容器中,那么System.in就是被tomcat重定向到了catalina.out文件,这时候你是无法通过OSGi的console来调试的。

这个问题的解决方法就是启用OSGi的远程console调试,OSGi支持console监听一个端口,外部用户可以通过telnet到这个端口,登录到控制台。
在RAP+Tomcat的场景下,OSGi的参数文件在 ${你项目tomcat目录}/webapps/${你的app名称}/WEB-INF/web.xml,我们修改其中一个参数

...	 
<servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet </servlet-class>
<init-param>
<param-name>commandline</param-name>
<strong><param-value>-console 54321</param-value></strong>	
</init-param>	
<init-param>
<param-name>enableFrameworkControls</param-name>
<param-value>true</param-value>	
</init-param>
...

注意到上面的-console 54321,这里给-console加了一个数字,意思就是告诉console监听54321这个端口。然后,我们telnet上去就可以执行OSGi命令了。
如果没有54321,仅仅是-console,那么console就将System.in作为输入。

最后要注意的是,这个方法对开发调试阶段很有用,但是在项目正式发布中一定要删除,因为这个端口是无任何权限管理,任何人知道你的IP地址和端口都可以登录到你的OSGi后台。后果可想而知。

转载请注明:运维派 » Eclipse OSGi被嵌入到tomcat后的console调试方法

0
3.2k
2