我已经在 apche felix 中成功注册了 org.amdatu.mongo 服务,如下所示,
Bundle 如下所示,它导出处于活动/运行状态的服务。
现在我想在我的 portlet 中使用这个服务,我返回了下面的代码,
package com.example.portlet;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import java.io.IOException;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import org.amdatu.mongo.MongoDBService;
import org.apache.felix.dm.annotation.api.ServiceDependency;
import org.osgi.service.component.annotations.Component;
@Component(
immediate = true,
property = {
"com.liferay.portlet.display-category=category.sample",
"com.liferay.portlet.instanceable=true",
"javax.portlet.display-name=loveworld Portlet",
"javax.portlet.init-param.template-path=/",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.resource-bundle=content.Language",
"javax.portlet.security-role-ref=power-user,user"
},
service = Portlet.class
)
public class LoveworldmvcportletPortlet extends MVCPortlet {
@ServiceDependency
private volatile MongoDBService m_mongoDbService;
@Override
public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
System.out.println( m_mongoDbService);//**getting NULL**
super.doView(renderRequest, renderResponse);
}
}
我已经尝试使用注释@ServiceDependency 没有运气得到空值。我的 mongoDb 服务器运行良好!
我有如下 Menifest.mf 文件,
Manifest-Version: 1.0
Bnd-LastModified: 1469380000381
Bundle-ManifestVersion: 2
Bundle-Name: loveworld
Bundle-SymbolicName: loveworld
Bundle-Version: 1.0.0
Created-By: 1.8.0_51 (Oracle Corporation)
Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc;version=
"[1.0,2)",javax.portlet;version="[2.0,3)",javax.servlet,javax.servlet
.http,org.amdatu.mongo;version="1.0.0"
Javac-Debug: on
Javac-Deprecation: off
Javac-Encoding: UTF-8
Private-Package: com.example.portlet,content
Provide-Capability: osgi.service;objectClass:List<String>="javax.portl
et.Portlet",liferay.resource.bundle;bundle.symbolic.name=loveworld;re
source.bundle.base.name="content.Language"
Require-Capability: osgi.extender;filter:="(&(osgi.extender=jsp.taglib
)(uri=http://java.sun.com/portlet_2_0))",osgi.extender;filter:="(&(os
gi.extender=jsp.taglib)(uri=http://liferay.com/tld/aui))",osgi.extend
er;filter:="(&(osgi.extender=jsp.taglib)(uri=http://liferay.com/tld/p
ortlet))",osgi.extender;filter:="(&(osgi.extender=jsp.taglib)(uri=htt
p://liferay.com/tld/theme))",osgi.extender;filter:="(&(osgi.extender=
jsp.taglib)(uri=http://liferay.com/tld/ui))",osgi.ee;filter:="(&(osgi
.ee=JavaSE)(version=1.8))"
Service-Component: OSGI-INF/com.example.portlet.LoveworldmvcportletPor
tlet.xml
Tool: Bnd-3.2.0.201605172007
bnd.bnd 文件如下,
Bundle-SymbolicName: loveworld
Bundle-Version: 1.0.0
Import-Package: com.liferay.portal.kernel.portlet.bridges.mvc;version="[1.0,2)",javax.portlet;version="[2.0,3)",javax.servlet,javax.servlet.http,org.amdatu.mongo;version="1.0.0"
使用服务的 Portlet 如下所示,