我有servlet Web应用程序,并且希望使用白羊座蓝图将apache karaf捆绑作为服务注入Web应用程序中。
以下是注入捆绑包的步骤:
1)在blueprint.xml中添加了具有ID和接口值的参考标记 示例代码在这里
<reference id="jsonStore" interface="com.test.test.jsonstore.service.JsonClientStore" />
2)添加了将ref属性作为参考ID的bean标签,该标签与我们在blueprint.xml文件中注入的捆绑在一起。 示例代码在这里
<bean id="echo" class="com.test.test.core.jsonrequest.JsonServlet">
<property name="jsonStore" ref="jsonStore"/>
</bean>
3)blueprint.xml文件的位置作为context-param标记了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应用程序?
答案 0 :(得分:0)
我不使用白羊座蓝图解决了上述问题。
我在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);
}
这段代码解决了我的问题。