从 Sling/CQ 中的捆绑包获取 OSGi 服务

发布于 2024-12-22 09:27:30 字数 364 浏览 2 评论 0原文

我正在使用Day CQ。我想使用 Felix 控制台中提供的连接池将一些数据存储在 SQL Server 数据库中。我可以通过使用在defineObjects 标记中定义的SlingScriptHelper 类型的“sling”对象从JSP 执行此操作。

sling.getService(DataSourcePool.class).

但是,我想使用在OSGi 包中创建的servlet 来处理来自客户端的请求。该servlet 没有defineObjects 标记,因此未定义“sling”对象。我没有看到在我的 servlet 中创建有效的 SlingScriptHelper 对象的方法,但看起来它必须是可能的。

有办法吗?

I am using Day CQ. I want to store some data in a SQL Server DB, using the connection pool available in the Felix console. I can do this from a JSP, by using the "sling" object of type SlingScriptHelper defined in the defineObjects tag

sling.getService(DataSourcePool.class).

However, I want to use a servlet created in an OSGi bundle to handle requests from the client. The servlet doesn't have a defineObjects tag, so the "sling" object is not defined. I don't see a way to create a valid SlingScriptHelper object in my servlet, but it seems like it has to be possible.

Is there a way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

脱离于你 2024-12-29 09:27:30

要从 java OSGi 组件获取服务,您不需要 SlingScriptHelper,您可以使用 BundleContext.getService(...) 方法,或使用 SCR 注释让 SCR 将服务注入您的组件中。

作为示例,您可以查看 Sling 的 Slingbucks 示例 使用 SCR 注释,ConfirmedOrdersObserver 类 例如以这种方式获取 SlingRepository:

   @Reference
   private SlingRepository repository;

参见 http://felix.apache.org/site/apache-felix-maven -scr-plugin.html 用于处理这些注释的 Maven 插件。

To get a service from a java OSGi component you don't need the SlingScriptHelper, you can either use the BundleContext.getService(...) method, or use SCR annotations to let SCR inject the service in your component.

As an example, you can look at how some components in Sling's Slingbucks sample use SCR annotations, the ConfirmedOrdersObserver class for example gets the SlingRepository in this way:

   @Reference
   private SlingRepository repository;

See http://felix.apache.org/site/apache-felix-maven-scr-plugin.html for the Maven plugin that handles these annotations.

两人的回忆 2024-12-29 09:27:30

您可以使用 #getServiceReference 和 #getService 方法,使用 BundleContext 来获取服务。例如,如果您对 ResourceResolverFactory 感兴趣,您可以像这样获取它:

BundleContext bundleContext = FrameworkUtil.getBundle(MyClass.class).getBundleContext();
ServiceReference factoryRef =
     bundleContext.getServiceReference(ResourceResolverFactory.class.getName());
ResourceResolverFactory resolverFactory = 
    (ResourceResolverFactory) bundleContext.getService(factoryRef);

You can use the BundleContext to get to the Service, by using the #getServiceReference and #getService methods. For example, if you were interested in the ResourceResolverFactory, you could get it like so:

BundleContext bundleContext = FrameworkUtil.getBundle(MyClass.class).getBundleContext();
ServiceReference factoryRef =
     bundleContext.getServiceReference(ResourceResolverFactory.class.getName());
ResourceResolverFactory resolverFactory = 
    (ResourceResolverFactory) bundleContext.getService(factoryRef);
小苏打饼 2024-12-29 09:27:30
YourClass obj = this.getSlingScriptHelper().getService(yourclass.class);
obj.whatever();
YourClass obj = this.getSlingScriptHelper().getService(yourclass.class);
obj.whatever();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文