使用过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]
注意到上面的
如果没有54321,仅仅是-console,那么console就将System.in作为输入。
最后要注意的是,这个方法对开发调试阶段很有用,但是在项目正式发布中一定要删除,因为这个端口是无任何权限管理,任何人知道你的IP地址和端口都可以登录到你的OSGi后台。后果可想而知。
本文链接:http://www.yunweipai.com/817.html
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/53148.html