gst*_*low 2 java osgi apache-felix osgi-bundle aem
我有以下组件:
@Component(
label = "Service name",
description = "Service description",
metatype = true,
immediate = false)
@Properties({
@Property(
label = "My Label"
name = "property-name",
value = "my value",
propertyPrivate = true
)
})
@Service
public class SampleServiceImpl implements SampleService {
private final Logger log =
LoggerFactory.getLogger(this.getClass());
/**
* OSGi Properties *
*/
private static final String DEFAULT_SAMPLE = "hello!";
private String mySample = DEFAULT_SAMPLE;
@Property(label = "Prop name",
description = "Prop description",
value = DEFAULT_SAMPLE)
public static final String PROP_SAMPLE = "sample";
...
@Activate
protected void activate(final Map<String, String> config) {
mySample = PropertiesUtil.toString(config.get(PROP_SAMPLE), DEFAULT_SAMPLE);
}
@Deactivate
protected void deactivate(final Map<String, String> config) { }
}
Run Code Online (Sandbox Code Playgroud)
它在 cq 启动后注册。这是预期的行为。
如何开始呢?我找不到这个界面。
是的,这是非直接组件的预期行为。来自Felix Meschberger 在 dev.day.com 上的博客文章,
\n\n\n\n\nOSGi 声明式服务规范定义了三种类型的组件:
\n\n\n
\n- \n
直接组件在提供的捆绑包启动时立即创建,并且可能会也可能不会提供服务
- \n
延迟组件提供服务,但仅在服务使用者使用时才创建。
- \n
工厂组件是通过调用为组件注册的组件工厂服务的 ComponentFactory.newInstance(Dictionary) 方法按需创建的。
因此,如果您设置immediate = false,您将拥有一个延迟组件,该组件由运行时 \xe2\x80\x94 按需激活,您不需要自己显式启动该组件。
您应该检查的主要内容是组件处于“已启用”或“已注册”状态(正如您提到的那样)而不是“不满意”(在这种情况下找不到对其依赖项的引用)需要)。
\n\n来自 Felix 文档\xe2\x80\xa6
\n\n\n\n状态_已注册
\n\n该组件已成功激活,但在首次使用时是一个等待实例化的延迟组件或服务工厂组件(值为 32)。
\n
| 归档时间: |
|
| 查看次数: |
7411 次 |
| 最近记录: |