2
在基於依賴管理器的組件模型中,我試圖將組件的所有樣板都放到基類中。我已經在eclipse + bndtools中連接了所有東西,並且可以成功地將@Init
,@Start
,@Stop
加入到我的基類中,但是當我將「命名」@ServiceReference
向上移動時,編譯插件開始拋出錯誤。OSGi Felix依賴關係管理器註釋和抽象類
對於另外一些情況下這是什麼我的方法是什麼樣子,你可以看到我使用的init
和start
方法動態,這樣我可以擺脫儘可能多的樣板儘可能的。
@ServiceDependency(name = "commands")
protected void setCommands(CommandList commands) {
this.commands = commands;
}
@Init
Map init() {
return new HashMap() {{
put("commands.filter", Filter.property(Properties.COMMAND_LIST_ID, getCommandListId()));
put("commands.required", "true");
}};
}
@Start
Map start() {
...
return new HashMap() {{
put(Properties.COMMAND_LIST_LISTVIEW_ID, getCommandListViewId());
}};
}
這是堆棧跟蹤蝕打印出:
java.lang.Error: DM Annotation plugin failure
at org.apache.felix.dm.annotation.plugin.bnd.AnnotationPlugin.analyzeJar(AnnotationPlugin.java:130)
at aQute.bnd.osgi.Analyzer.doPlugins(Analyzer.java:588)
at aQute.bnd.osgi.Analyzer.analyze(Analyzer.java:171)
at aQute.bnd.osgi.Builder.analyze(Builder.java:344)
at aQute.bnd.osgi.Analyzer.calcManifest(Analyzer.java:618)
at aQute.bnd.osgi.Builder.build(Builder.java:81)
at aQute.bnd.osgi.Builder.builds(Builder.java:1243)
at aQute.bnd.build.ProjectBuilder.builds(ProjectBuilder.java:520)
at aQute.bnd.build.Project.buildLocal(Project.java:1417)
at org.bndtools.builder.NewBuilder.rebuild(NewBuilder.java:655)
at org.bndtools.builder.NewBuilder.rebuildIfLocalChanges(NewBuilder.java:545)
at org.bndtools.builder.NewBuilder.build(NewBuilder.java:199)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:299)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:302)
at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:358)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:381)
at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143)
at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
在工作中我們使用Eclipse的PDE + SCR(XML),它工作得很好用抽象類繼承。現在,我重溫在綱要規範故有此說關於SCR註釋:
聲明服務註解是不能繼承的,他們只能 可以在給定的類中,標註在其超類層次結構 或接口不被考慮在內。
結束語我自己的依賴管理ontop的程序上的依賴關係,經理人可能似乎是適當的。我會調查/原型,看看它是如何工作的。