【发布时间】:2020-01-15 00:37:41
【问题描述】:
我有一个我已经实现的接口。我已经用 org.apache.felix.scr.annotations 包的 @Component 和 @Service 注释了 impl。
我为我的 impl 写了一个简单的构造函数
public MyImpl(){
LOG.info("New instance created!!");
}
我还在@activate 和@deactivate 方法中添加了记录器。
我希望看到“新实例已创建!!”只有一次,但我可以看到我在页面上发出的每个请求都会调用激活和停用方法(此服务由该页面中使用的 Sling 模型调用)
我看到的是“创建了新实例!!”记录了几次。
这意味着 OSGi 容器会创建我的 Service 的多个实例,并且每次都会调用 activate 和 deactivate 方法。
这表明这不是单例。
只有在我卸载我的包时才应丢弃该对象。
请帮助我了解这里发生了什么。
我想在 AEM 中实现真正的单例
我已经在使用 Apache Felix 的 AEM 6.5 实例中实现了这一点。
编辑:
添加服务属性:
aemRootUrl http://localhost:8080
api.http.connections_manager.timeout 60000
api.http.cookie_max.age 18000
api.http.max_connections 200
api.http.max_connections_per_host 20
api.http.timeout.connection 300000
api.http.timeout.socket 300000
api.server.ssl.trust_all_certs true
api.server.url https://10asdasdsad
api.server.username admin
component.id 3925
component.name com.example.foundation.core.connection.impl.HybrisConnectionImpl
non_akamai.api.server.url hadasdadasd
service.bundleid 585
Service PID com.example.foundation.core.connection.impl.HybrisConnectionImpl
service.scope bundle
Using Bundles com.example.dumb-foundation.core (585)
更改值以隐藏客户特定信息
编辑:: 我已经删除了 SCR 注释并将它们替换为 OSGI 注释,我已经明确指定了
@Component(service =HybrisConnection.class, immediate=true,scope = ServiceScope.SINGLETON)
但仍然显示为 scope=bundle。
我是否应该对它的依赖项强制执行 Singleton 和 OSGi 注释,以使其成为正确的 Singleton?
【问题讨论】:
-
你能从 /system/console/components 或 /system/console/services 分享你的服务属性吗?
-
@mahsum 如你所述添加了它们
-
顺便说一句。您应该切换到官方声明性服务注释。 felix 已弃用。
-
你能添加关于如何在吊索模型中获得参考的部分