当前位置: 首页 > 知识库问答 >
问题:

从Felix SCR迁移到OSGI声明性服务时,服务未在Karaf中列出

通和裕
2023-03-14

我正在从Felix SCR注释迁移到R6 OSGI声明性服务,但该服务未在karaf中列出。根据下面的代码示例,ServiceImpl应该列出的是karaf。但它没有上市。是否有任何其他配置,我必须在pom。xml?

package com.sample.test;


import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.component.annotations.Deactivate;

    @Component (configurationPolicy = ConfigurationPolicy.OPTIONAL, immediate = true, service = SampleService.class)
    public class SampleServiceImpl implements SampleService
    {
    
     @Reference (policy = ReferencePolicy.DYNAMIC, service = AgentService.class , bind = "bindAgentService",unbind ="unbindAgentService")
    private AgentService agentService;
    
     
     @Activate
        protected void activate() {
            System.out.println("activate ");
        }
    
        @Deactivate
        protected void deactivate() {
            System.out.println("de-activate ");
        }
    }

这是我正在使用的pom.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <groupId>com.test.sample</groupId>
  <artifactId>compile</artifactId>
  <version>1.0.0</version>

  
  <dependencies>      
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>osgi.cmpn</artifactId>
       <version>6.0.0</version>
       <scope>provided</scope>
    </dependency>
  </dependencies>

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
      </plugin>
    </plugins>   
  </build>
</project>

共有1个答案

梁马鲁
2023-03-14
@Reference (policy = ReferencePolicy.DYNAMIC, service = AgentService.class , bind = "bindAgentService",unbind ="unbindAgentService")

您列出了两个方法,bindAgentServiceunbindAgentService,它们没有出现在您的类中。您还可以将@Reference注释应用于字段。你想要什么?现场注射?方法注射?二者都如果只需要字段注入,请删除批注中的bindunbind元素

 类似资料:
  • 创建服务接口,接口必须继承IService。 注意:在异步编程里,异步转同步调用是非常糟糕的,并且有可能死锁。为了避免这个问题,Uragano不支持同步方法,所有的服务方法必须是异步的。 [ServiceDiscoveryName("RPC")] [ServiceRoute("hello")] public interface IHelloService : IService { [Ser

  • 我正在从ApacheFelixSCR注释更新到OSGiDSR6注释,而引起我更多问题的是类中的@Property。 在我之前: 现在我有: 和 这一切中最奇怪的事情是: 以前,我可以将我的AImpl类视为组件。 现在,我无法将我的AImpl类视为组件,并且由于不满意的引用,使用它的每个人都无法启动。 为什么像这样改变配置会导致这种行为?也许我错过了什么? 更奇怪的是,我的xml在. jar里面,看

  • 在我的应用程序中,我有一个服务聊天原型客户端。该实现是一个tcp客户端,它在蓝图“init-method”中连接到远程服务器,并在“破坏方法”中断开连接。 我还有另一个捆绑包,它使用此ChatRogcolClient的连接从通道ChatChannel读取和发布消息。目前,我有一个xml文件,它创建了ChatProcolClient的bean,并创建了一个bean ChatChannel,其中注入了

  • 我正在将ApacheFelixSCR注释迁移到OSGI声明性服务[AEM]。在迁移过程中,我无法在DS中找到基数的精确替换。 现有的SCR实施: 现在它在OSGi声明性服务中迁移如下 在DS注释实现中,我必须映射@Property中存在的参数基数。请推荐我

  • 我正在尝试测试一个用Declaratice Services注释()注释的OSGi服务。我已经根据AEM多项目示例生成了我的项目。 每当我在IntelliJ中运行此测试时,OSGi Mock都会抱怨测试类中缺少SCR元数据。 这是否意味着我只能测试带有ApacheFelix附带的旧SCR注释的类?OSGi模拟的文档表明2.0版支持声明性服务注释。0及以上。我使用的版本符合此标准。

  • 我刚刚开始使用动物园管理员在卡拉夫的DOSGi。我在Karaf的一个实例中提供服务,在另一个实例中提供消费者。服务端运行良好。一旦发布,我可以在安装了Zookeeper服务器的Karaf控制台中使用log:display命令查看它,并且我也可以通过浏览器访问wsdl。问题出在消费端。当服务启动时,它应该写一条消息(下面的ref代码),但是它从来没有发生。消费者代码: 和component.xml: