【发布时间】:2012-01-10 00:58:48
【问题描述】:
一段时间以来,我一直在开发一个使用 Apache Felix 作为我的 OSGi 运行时的应用程序,到目前为止,进展非常顺利。但是,我现在想采用依赖注入,Apache Felix 的“默认”机制似乎是 iPOJO。
但是,我发现有关 Apache felix 的文档和教程太薄弱了,我无法找到任何地方。所以我准备改变,但首先我最好解释一下我正在尝试做的(非常简单的)想法。
给定两个捆绑包;
消费者捆绑
package bundles.consumer;
class Consumer implements BundleActivator{
@Inject
private Producer producer;
public void bundleActivated(BundleContext con) {
this.producer.getNextItem();
}
}
生产者捆绑包
package bundles.producer;
@Singleton
class Producer {
public String getNextItem() {
return "item x";
}
}
我希望 OSGi 运行时启动 Consumer 包,意识到它需要一个 Producer 才能工作,然后框架启动 Producer 包并将实例注入到 Consumer 中。简单的。 iPOJO 建议仅使用注释(@Singleton、@Inject)或类似的方法来实现这一点,但我根本无法让它工作。 OSGi 显然有声明式服务,但这意味着要编写大量 XML,我真的想避免这些。
Anywoo,我准备适应 JBoss、Equinox 或替代 OSGi 运行时和替代依赖注入机制,无论是 Peaberry、Spring DM 还是完全不同的东西。我已经在使用 Maven。
我要问的是,有人可以使用生产者和消费者的想法创建一个 Hello World 来帮助我入门吗?我真的花了很多时间阅读并发现学习曲线难以逾越!
编辑,我尝试使用 SCR:http://tydus.net/codeExamples/mvnScr.tar
【问题讨论】:
-
我同意这些答案,但想澄清一个误解。 iPOJO 不一定是 Felix 的“默认”DI 框架,它只是托管在 Apache 上的另一个项目。 iPOJO 适用于 Felix、Equinox、Knopflerfish 等。声明式服务 (DS) 也适用于 Felix、Equinox、Knopflerfish……Spring-DM 也是如此……Blueprint 也是如此。没有必要仅仅因为你无法让 iPOJO 工作而改变你的 OSGi 容器。
-
另外,请描述为什么您无法让 iPOJO 工作,以及它究竟是如何失败的。它应该有效,但您没有向我们提供足够的信息来建议修复。
-
尼尔,我知道你第一条评论中的情况,如果我原来的帖子有一点乱码,请原谅我。虽然我非常愿意花时间让 iPOJO 正常工作,但这里几乎是跑题了。根据其他成员的建议,我目前正在试验 SCR。实际上,我在寻求帮助时确实向您发送了一封电子邮件,但感谢您可能太忙而无法获得一对一的教程! (虽然那会很棒!)
标签: java osgi apache-felix