如何使用白羊座蓝图在Web应用程序中将apache karaf捆绑包作为服务注入?



我有servlet Web应用程序,并希望使用Aries蓝图将apache karaf捆绑包作为服务注入Web应用程序中。

以下是注入捆绑包所遵循的步骤:

1( 在蓝图中添加了带有 ID 和接口值的引用标记.xml 示例代码在这里

<reference id="jsonStore" interface="com.test.test.jsonstore.service.JsonClientStore" />

2( 添加了带有 ref 属性的 bean 标签作为引用 ID,我们在蓝图.xml文件中注入的捆绑包。 示例代码在这里

<bean id="echo" class="com.test.test.core.jsonrequest.JsonServlet">
<property name="jsonStore" ref="jsonStore"/>
</bean>

3(蓝图.xml文件位置作为上下文参数标记Web.xml。 示例代码在这里

<context-param>
<param-name>blueprintLocation</param-name>
<param-value>OSGI-INF/blueprint/blueprint.xml</param-value>
</context-param>

4(在Web.xml中添加了Listner类。 示例代码在这里

<listener>
<listener-class>org.apache.aries.blueprint.web.BlueprintContextListener</listener-class>
</listener>

5( @Inject用于在 servlet 类中注入特定捆绑包的注释。 示例代码在这里

@Inject(ref="jsonStore")
JsonClientStore jsonStore = null;

以下链接仅供参考文档使用 http://aries.apache.org/modules/blueprintweb.html

仍然没有注入捆绑包,请有人可以帮忙吗?

如何将这些 Karaf 捆绑包作为服务注入到 servlet 应用程序?

我在不使用白羊座蓝图的情况下解决了上述问题。

我在servlet中添加的以下方法来获取注入的捆绑包,我将捆绑包名称作为serviceName参数发送到下面的方法,这将发回注入的捆绑包所需的服务,通过使用它将使用该服务中存在的方法。

private <T> T getService(Class<T> serviceName) {
Bundle bundle = FrameworkUtil.getBundle(serviceName);
if ( bundle == null ) {
return null;
}       
BundleContext bundleContext = bundle.getBundleContext();
ServiceReference serviceRef = bundleContext.getServiceReference(serviceName);  
if (serviceRef == null)          
return null;
return (T) bundleContext.getService(serviceRef);
}

这段代码解决了我的问题。

相关内容

  • 没有找到相关文章

最新更新