OSGi环境调试心得

本文介绍了在OSGi环境中使用SpringDM1.2、Equinox、Virgo3.0.3、Eclipse3.6、Maven3和JDK1.6进行开发时的配置和调试心得。遇到冲突问题可能源于stage目录和work目录的状态,建议检查这两个目录。此外,还发现夜间工作可能由于硬件长时间运行导致问题,重启电脑并在白天重新配置能有效解决。

框架用的是springDM1.2+Equinox+Virgo3.0.3+Eclipse3.6+maven3+jdk1.6

1 svn上的代码要绝对的干净
2 eclipse 插件要完整
3 maven本地库如果全一点儿也会省力不少
4 virgo eclipse maven 版本和其他人一致
5 注意pom的父子继承关系,有时需要把parent引入
6 jar包相对好说,war包的话,要把工程搞成dynamic web 工程
然后在.setting文件里配置deploy路径,包括webapp整个目录、class、js等
7 整个工程编译需要用install
单个的工程可以只用package,因为不需要总安装到本地库
如果pom间有依赖,就需要install了
8 加到server下的bundle会由ide deploy到virgo的stage目录下,如果目录为空,就publish一下,如果还没有,启动server的时候stage打过去也是ok的
9 由于是ide帮助deploy,所以刚才提到的.setting文件夹的文件就可能会被多次用到
不过配置好,就不会反复修改了
10 依赖的bundle提前存在usr中,需要时会自动加载
11 最后运行时,实际是work中的bundle在跑
如果启动server时冲突,需要确保stage、pickup、usr中的bundle不重复
然后清work目录
其实eclipse的clean功能没啥用
推荐不要和mvn的clean混用
如果是0.0.0的bundle,极有可能是bundle部署失败,或者缓存问题,或者里面的内容不全

就这样了,遇到报confict也有可能是这个原因,启动前查看一下stage目录和work目录

后来发现半夜搞和白天搞的效果也不一样,估计是主板烧的时间太长了,对于底层的脚本支持情况不是很到位,重启电脑,第二天白天再搞一次就好了

### OSGi服务调试方法及工具 OSGi(Open Service Gateway Initiative)是一种模块化系统,允许Java应用程序通过动态加载和卸载模块来实现灵活的功能扩展。然而,在开发过程中可能会遇到各种问题,因此掌握有效的调试方法和工具有助于提高效率。 #### 调试方法 1. **日志记录** 日志是排查OSGi服务问题的重要手段之一。可以通过配置日志级别来捕获更详细的运行时信息[^1]。通常建议设置`log.level=DEBUG`以便获取更多细节。 2. **Bundle状态检查** 使用命令行工具或者图形界面查看Bundle的状态是非常必要的。如果某个Bundle未能正常启动,则可能是因为依赖缺失或其他错误原因[^2]。可以利用Gogo Shell中的`lb`(list bundles)指令快速了解当前环境下的所有Bundle及其状态。 3. **Wire分析** 在复杂的OSGi环境中,Services之间存在大量的wires连接关系。当怀疑某项功能未按预期工作时,应该仔细审查这些connections是否存在异常情况。例如,某些required capabilities没有被满足可能导致service无法激活[^3]。 4. **远程调试支持** 大多数现代IDE都提供了针对OSGi框架的良好集成方案,使得开发者能够方便地进行断点设定、变量观察等操作。Eclipse PDE就是一个典型例子,它专门设计用于构建基于插件的应用程序并提供强大的调试特性[^4]。 #### 推荐工具 - **Apache Felix Gogo Shell**: 提供了一个交互式的REPL(Read-Eval-Print Loop),让用户可以直接输入命令查询bundle和服务的信息。 - **Bndtools**: Eclipse的一个插件项目,专注于简化OSGi应用的创建过程以及增强其可维护性。内置有丰富的视图组件帮助理解整个系统的结构布局[^5]。 - **Equinox Console**: Equinox容器自带控制台接口,除了基本管理外还增加了额外的一些特色功能比如跟踪事件流等功能[^6]。 ```java // 示例代码展示如何打印出所有的已注册的服务 import org.osgi.framework.BundleContext; import java.util.ServiceLoader; public class DebugService { public static void main(String[] args){ BundleContext context = ... ; // 获取上下文对象的方式取决于具体实现 System.out.println("Registered Services:"); for (String service : context.getServiceReferences(null, null)) { System.out.println(service); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值