获取工厂服务的引用(OSGI-AEM上下文)

获取工厂服务的引用(OSGI-AEM上下文),osgi,aem,r6,Osgi,Aem,R6,我试图获取对我创建的工厂服务的引用(在AEM 6.4.6中),但失败了。下面是代码(我尝试过搜索类似的代码,但没有找到直接的答案。我可能搜索得不够,或者我正在做的可能是完全错误的。期待专家的回复) 更新3:(最后更新1和2)-这是一个关于如何使用引用获取它的问题。不过,如果专家们能分享其他方法,那也太好了 服务代码(在第一个捆绑包中) 选项2(间接使用绑定和取消绑定) @Reference( name=“godaDataServiceFactory”, 基数=ReferenceCardinali

我试图获取对我创建的工厂服务的引用(在AEM 6.4.6中),但失败了。下面是代码(我尝试过搜索类似的代码,但没有找到直接的答案。我可能搜索得不够,或者我正在做的可能是完全错误的。期待专家的回复)

更新3:(最后更新1和2)-这是一个关于如何使用引用获取它的问题。不过,如果专家们能分享其他方法,那也太好了

服务代码(在第一个捆绑包中)

选项2(间接使用绑定和取消绑定)

@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注释吗?是的,同样。事实上我发现了一些东西。需要更长的时间来构建响应。过一会儿我会做的。