获取工厂服务的引用(OSGI-AEM上下文)
我试图获取对我创建的工厂服务的引用(在AEM 6.4.6中),但失败了。下面是代码(我尝试过搜索类似的代码,但没有找到直接的答案。我可能搜索得不够,或者我正在做的可能是完全错误的。期待专家的回复) 更新3:(最后更新1和2)-这是一个关于如何使用引用获取它的问题。不过,如果专家们能分享其他方法,那也太好了 服务代码(在第一个捆绑包中) 选项2(间接使用绑定和取消绑定)获取工厂服务的引用(OSGI-AEM上下文),osgi,aem,r6,Osgi,Aem,R6,我试图获取对我创建的工厂服务的引用(在AEM 6.4.6中),但失败了。下面是代码(我尝试过搜索类似的代码,但没有找到直接的答案。我可能搜索得不够,或者我正在做的可能是完全错误的。期待专家的回复) 更新3:(最后更新1和2)-这是一个关于如何使用引用获取它的问题。不过,如果专家们能分享其他方法,那也太好了 服务代码(在第一个捆绑包中) 选项2(间接使用绑定和取消绑定) @Reference( name=“godaDataServiceFactory”, 基数=ReferenceCardinali
@Reference(
name=“godaDataServiceFactory”,
基数=ReferenceCardinality.MULTIPLE,
policy=ReferencePolicy.DYNAMIC,
bind=“bindGoDataserviceFactory”,
unbind=“unbindGoDataserviceFactory”)
List godaDataServiceFactoryList=new ArrayList();
受保护的同步void BindAdataserviceFactory(最终GodaDataServiceFactory配置){
info(“Goda配置工厂:{}”,config);
godaDataServiceFactoryList.add(config);
}
受保护的同步void unbindGodaDataServiceFactory(最终GodaDataServiceFactory配置){
godaDataServiceFactoryList.remove(配置);
}
所有这些似乎都不起作用。在第一种情况下,godaDataServiceFactory为null。第二种情况下,列表总是空的。请注意,使用者是一个servlet
我的GitHub回购协议
消费者->
API->
API IMPL->
更新1:
@Reference(target = "(sample=test)")
private GodaDataServiceFactory godaDataServiceFactory;
Consumer https://github.com/GodaProjects/aem652
API https://github.com/GodaProjects/api
API Impl https://github.com/GodaProjects/apiImplJcr
对于选项1,servlet仍然不满意
参考godaDataServiceFactory不满意 服务名称:com.goda.core.services.GodaDataServiceFactory 目标过滤器:(样本=测试) 基数:1..1 策略:静态 政策选择:不情愿 无服务限制 对于第二个选项,列表保持为空 更新2 消费者项目是使用原型13创建的(具有使用工厂服务的servlet)-> API项目是使用原型18创建的(具有工厂的API接口)->
API IMPL项目是使用Archetype 18创建的(具有API项目中API的实现)->我想我知道了。问题的根本原因似乎是在3个单独的包中具有相同的包结构(aem652、api和apiJcrImpl具有相同的包com.goda.core)。这符合OSGi无论如何都不鼓励的拆分包的领域。而且这种行为也很不可预测。它从一个包中寻找另一个包中不存在的类,并抛出“classnotfound”。我真的很困惑。不管怎么说,很明显,他们正在以某种模式相互掩蔽,我既没有时间也没有精力去弄清楚。可以说,我所做的不是很谨慎。这就来了。这就是解决办法 编辑:
@Reference(target = "(sample=test)")
private GodaDataServiceFactory godaDataServiceFactory;
Consumer https://github.com/GodaProjects/aem652
API https://github.com/GodaProjects/api
API Impl https://github.com/GodaProjects/apiImplJcr
我想我明白了。问题的根本原因似乎是在3个单独的包中具有相同的包结构(aem652、api和apiJcrImpl具有相同的包com.goda.core)。这符合OSGi无论如何都不鼓励的拆分包的领域。而且这种行为也很不可预测。它从一个包中寻找另一个包中不存在的类,并抛出“classnotfound”。我真的很困惑。不管怎么说,很明显,他们正在以某种模式相互掩蔽,我既没有时间也没有精力去弄清楚。可以说,我所做的不是很谨慎。这就来了。这就是解决办法 编辑:
@Reference(target = "(sample=test)")
private GodaDataServiceFactory godaDataServiceFactory;
Consumer https://github.com/GodaProjects/aem652
API https://github.com/GodaProjects/api
API Impl https://github.com/GodaProjects/apiImplJcr
您是否尝试过只使用@Reference注释而不使用任何选项?是的,相同。事实上我发现了一些东西。需要更长的时间来构建响应。过一段时间就可以了。你试过没有任何选项的@Reference注释吗?是的,同样。事实上我发现了一些东西。需要更长的时间来构建响应。过一会儿我会做的。