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,我们修改其中一个参数
[code lang=”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>

[/code]

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

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

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部