当前位置: 首页 > 知识库问答 >
问题:

Adobe AEM/OSGI:如何从任何类访问OSGI服务?

邰德业
2023-03-14

我有一个服务(位于核心/服务内部)和服务实现(位于核心/服务/impl)。

我有一个扩展com的现有类(位于core/impl/view/components内部)。土砖cq。很明显。WCMUsePojo。使用getSlingScripterHelper,这个类可以访问我上面提到的服务。

我正在尝试在不使用WCMUsePojo的情况下访问该服务。我怎么做?

谢谢!

共有3个答案

戚良弼
2023-03-14

如果您想从HTL脚本支持bean访问服务,可以使用Sling模型(而不是WcmUsePojo)并使用@inject注释将引用注入到您的服务中。

慎芷阳
2023-03-14

您可以使用@参考从任何其他类调用服务,而无需使用WCMUsePojo。

class MyClass
{
    @Reference
    private MyService myService;

    void myMethod()
    {
      myServie.callYourServiceMethod();
    }
}
白浩气
2023-03-14

您可以直接从服务注册中心获取服务-

    final Bundle bundle = FrameworkUtil.getBundle(this.getClass());
    final BundleContext bundleContext = bundle.getBundleContext();
    ServiceReference<MyService> ref = bundleContext.getServiceReference(MyService.class)
    MyService myService = bundleContext.getService(ref);
    // use the service
    bundleContext.ungetService(ref);
 类似资料:
  • 在我的应用程序中,我有一个服务聊天原型客户端。该实现是一个tcp客户端,它在蓝图“init-method”中连接到远程服务器,并在“破坏方法”中断开连接。 我还有另一个捆绑包,它使用此ChatRogcolClient的连接从通道ChatChannel读取和发布消息。目前,我有一个xml文件,它创建了ChatProcolClient的bean,并创建了一个bean ChatChannel,其中注入了

  • 问题内容: 我有一个OSGi应用程序。使用EJB context.lookup,我必须将Thread上下文类加载器设置为bundle类加载器,以便进行转换。像这样: 输出是 org.apache.felix.framework.BundleWiringImpl@7468776f 此代码有效。如果我有ArrayList我无法转换的问题 此代码返回ClassCastException。 检查 返回NU

  • 问题内容: 我使用了来自Maven回购的log4j-1.2.17捆绑包。我尝试在捆绑软件中执行此代码(我的捆绑软件调用了log4j-1.2.17捆绑软件) 但是我有错误 捆绑包已按顺序加载 如何解决这个错误?拜托,对不起我的英语。最好的问候,亚瑟。 问题答案: 由于您的Log4j类似乎已由sun.misc类加载器加载,我认为某些东西正在从OSGi外部提供log4j类。有Log4J条目解释了为什么它

  • 我正在使用AdobeAEM 6.0,对ApacheFelix和Sling还是一个新手,我想知道如何从带有@service注释的OSGI服务获取SlingHttpServletRequest实例。 是否可以从ResourceResolverFactory或SlingRepository获取请求? 我知道SlingHttpServletRequest可用于扩展SlingAllMethodsServle

  • 我已经创建了一个AEMServlet。现在我已经用servlet本身创建了OSGi配置(如下所示的数组类型的MULTI_字段),因为它也被定义为服务。现在,我的需求是如何在doGet方法中访问这个osgi配置。下面是servlet的代码。

  • 问题内容: 如何从jar库创建OSGi捆绑包? 问题答案: 如果您使用的是eclipse:有一个向导。 它允许您选择许多jar库,并创建一个包含这些jar的插件项目(即OSGi捆绑包)。 你可以在这里找到它: