Liferay没有看到我的服务实现,尽管服务排名很高

Liferay没有看到我的服务实现,尽管服务排名很高,liferay,osgi,liferay-7,liferay-dxp,gogo-shell,Liferay,Osgi,Liferay 7,Liferay Dxp,Gogo Shell,我编写了一个包含此服务实现的模块: 部署后,GogoShell认为我的模块没有实现该服务,如下所示。但是,我的模块实现的其他两个服务是可见的 g! inspect capability service 548 myaudit_1.0.0 [548] provides: --------------------------------- service; javax.servlet.Filter with properties: servlet-filter-name = Audit Dow

我编写了一个包含此服务实现的模块:

部署后,GogoShell认为我的模块没有实现该服务,如下所示。但是,我的模块实现的其他两个服务是可见的

g! inspect capability service 548
myaudit_1.0.0 [548] provides:
---------------------------------
service; javax.servlet.Filter with properties:
   servlet-filter-name = Audit Download Filter
   url-pattern = /documents/*
   servlet-context-name = 
   component.name = my.DownloadFilter
   component.id = 2573
   service.id = 7181
   service.bundleid = 548
   service.scope = bundle
   Used by:
      org.eclipse.osgi_3.10.200.v20150831-0856 [0]
service; com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand with properties:
   service.ranking = 100
   mvc.command.name = /document_library/view_file_entry
   javax.portlet.name = com_liferay_document_library_web_portlet_DLPortlet, com_liferay_document_library_web_portlet_DLAdminPortlet, com_liferay_document_library_web_portlet_IGDisplayPortlet
   component.name = my.MyViewFileEntryMVCRenderCommand
   component.id = 2576
   service.id = 7182
   service.bundleid = 548
   service.scope = bundle
   Used by:
      org.eclipse.osgi_3.10.200.v20150831-0856 [0]
我做错了什么

关于信息,在我的模块的jar中,这个
OSGI-INF/my.MyAuditMessageProcessor.xml
存在:

<?xml version="1.0" encoding="UTF-8"?>
<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="my.MyAuditMessageProcessor" immediate="true" activate="activate" modified="activate" configuration-pid="my.MyAuditMessageProcessorConfiguration">
  <implementation class="my.MyAuditMessageProcessor"/>
  <service>
    <provide interface="com.liferay.portal.security.audit.AuditMessageProcessor"/>
  </service>
  <property name="eventTypes" type="String" value="*"/>
  <property name="service.ranking" type="Integer" value="100000"/>
</scr:component>

正如Christian所指出的,问题在于我的组件有未满足的需求。请注意,它不同于缺少需求的捆绑包,它是下面的一个级别

我的捆绑包满足了所有要求,但我的模块缺少一个要求。以下是我是如何发现的:

  • 启动Gogo Shell
  • 类型
    scr:list
  • 幸运的是,您的组件应该在长长的列表的末尾
  • 这将为您提供组件的id,例如2587
  • 类型
    scr:info 2587
  • 对于缺少的依赖项,将显示
    unsatifiedreference
    Target:null

  • 在我的例子中,我试图直接@Reference@组件,而不是服务。我通过创建ElasticsearchService接口并使Elasticsearch组件实现它来解决问题。

    正如Christian所说,问题在于我的组件有未满足的需求。请注意,它不同于缺少需求的捆绑包,它是下面的一个级别

    我的捆绑包满足了所有要求,但我的模块缺少一个要求。以下是我是如何发现的:

  • 启动Gogo Shell
  • 类型
    scr:list
  • 幸运的是,您的组件应该在长长的列表的末尾
  • 这将为您提供组件的id,例如2587
  • 类型
    scr:info 2587
  • 对于缺少的依赖项,将显示
    unsatifiedreference
    Target:null

  • 在我的例子中,我试图直接@Reference@组件,而不是服务。我通过创建一个ElasticsearchService接口并让Elasticsearch组件实现它来解决这个问题。

    你能检查一下你的jar是否包含你服务的DS xml吗?@ChristianSchneider:补充,谢谢你的提示!您是否可以尝试使用scr外壳命令查看您的组件是否有一些未满足的要求?您使用的是DXP还是Liferay Portal 7 CE?请记住,审计是DXP唯一的功能。@MilenDyankov:是的,我在DXP上。您能检查一下您的jar是否包含您服务的DS xml吗?@ChristianSchneider:添加,谢谢您的提示!您是否可以尝试使用scr外壳命令查看您的组件是否有一些未满足的要求?您使用的是DXP还是Liferay Portal 7 CE?请记住审计是DXP唯一的功能。@MilenDyankov:是的,我在DXP上。很好,你找到了。。但实际上遗漏了什么?在你展示的代码中,不可能缺少参考资料?@ChristianSchneider:对不起,我忽略了代码的一部分,我更新了问题和答案。看到了。对不满意的强制引用是服务不存在的一个典型原因。很好,您找到了。。但实际上遗漏了什么?在你展示的代码中,不可能缺少参考资料?@ChristianSchneider:对不起,我忽略了代码的一部分,我更新了问题和答案。看到了。对不满意的强制引用是服务不存在的典型原因。
    g! inspect capability service 548
    myaudit_1.0.0 [548] provides:
    ---------------------------------
    service; javax.servlet.Filter with properties:
       servlet-filter-name = Audit Download Filter
       url-pattern = /documents/*
       servlet-context-name = 
       component.name = my.DownloadFilter
       component.id = 2573
       service.id = 7181
       service.bundleid = 548
       service.scope = bundle
       Used by:
          org.eclipse.osgi_3.10.200.v20150831-0856 [0]
    service; com.liferay.portal.kernel.portlet.bridges.mvc.MVCRenderCommand with properties:
       service.ranking = 100
       mvc.command.name = /document_library/view_file_entry
       javax.portlet.name = com_liferay_document_library_web_portlet_DLPortlet, com_liferay_document_library_web_portlet_DLAdminPortlet, com_liferay_document_library_web_portlet_IGDisplayPortlet
       component.name = my.MyViewFileEntryMVCRenderCommand
       component.id = 2576
       service.id = 7182
       service.bundleid = 548
       service.scope = bundle
       Used by:
          org.eclipse.osgi_3.10.200.v20150831-0856 [0]
    
    <?xml version="1.0" encoding="UTF-8"?>
    <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0" name="my.MyAuditMessageProcessor" immediate="true" activate="activate" modified="activate" configuration-pid="my.MyAuditMessageProcessorConfiguration">
      <implementation class="my.MyAuditMessageProcessor"/>
      <service>
        <provide interface="com.liferay.portal.security.audit.AuditMessageProcessor"/>
      </service>
      <property name="eventTypes" type="String" value="*"/>
      <property name="service.ranking" type="Integer" value="100000"/>
    </scr:component>