OSGi诊断组件的缺失依赖性

时间:2015-11-26 11:02:28

标签: osgi

在开发过程中,我们倾向于分解我们的声明性服务组件,因此OSGi自然不会激活其他依赖组件。有没有办法诊断潜在的问题,即。 "为什么组件未被激活?"

对于简单的依赖图:

[BroadcastReceiver]
[IntentFilter(new[] { Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.LowPriority)]
public class BootReceiver : BroadcastReceiver
{ 
    public override void OnReceive(Context context, Intent intent)
    {
        Intent serviceStart = new Intent(context, typeof(MainActivity));
        serviceStart.AddFlags (ActivityFlags.NewTask);
        context.StartActivity(serviceStart);                
    }
}

如果A------>B------>C------->E ^ | D-------+ 无法激活所有相关组件,ECDB也不会被激活。我需要一个控制台命令来询问"为什么A未被激活?"并且答案将包含答案," A取决于B,B取决于C,C取决于E,E不可用"。

1 个答案:

答案 0 :(得分:1)

目前不存在,但可以使用myController/myAction API开发。这肯定会成为一个有趣而有用的项目。

您的两个诊断选项是:

  1. gogo shell中的ScrServicescr:list命令。这些将告诉您为什么单个组件不活动。例如,如果您问为什么A不活动,它会告诉您它对scr:info服务有一个不满意的引用。然后,您必须跟踪哪个组件应该注册B服务,并找出未激活的原因。等等。

  2. X-Ray plugin for Felix WebConsole将为您提供服务和组件的图形表示。它不会像您要求的那样直接为您提供根本原因,但它可以帮助有经验的用户比B命令更快地追踪问题。