【问题标题】:unsupported type java.util.concurrent.atomic.AtomicReference不支持的类型 java.util.concurrent.atomic.AtomicReference
【发布时间】:2021-10-21 23:44:54
【问题描述】:

我正在编写 OSGI 服务。启动服务后,我收到以下消息。请建议解决此问题。

@Component (service = Service.class, immediate = true)
public class ServiceImpl implements Service{

@Reference (name = "CounterService", policy = ReferencePolicy.DYNAMIC, cardinality = ReferenceCardinality.MANDATORY,
            bind = "bindCounter", unbind = "unbindCounter", service = CounterService.class)
    public static final AtomicReference<CounterService> myCounterService = new AtomicReference<>();

public void bindCService(CounterService counterService)
{     
    this.cacheService= cacheService;
}

public void unbindService(CounterService cacheService)
{     
    this.cacheService= null;
}

}

我在启动服务后收到此消息

-!MESSAGE [com.xxx.xxx.xxx.CounterImpl(29)] 组件类 com.xxx.xxx.xxx.CounterImpl 中的字段 counterService 具有不受支持的类型 java.util.concurrent.atomic.AtomicReference

【问题讨论】:

    标签: java osgi osgi-bundle declarative-services


    【解决方案1】:

    那么,为什么是 AtomicReference?您也不需要绑定和取消绑定服务。您似乎很困惑 :-) 您可能想看看 videosOSGi starter

    对于动态情况,这是可行的:

    @Component(immediate = true)
    public class ServiceImpl implements Service {
    
        @Reference    
        volatile CounterService myCounterService;
        
        @Activate
       void activate() {
        ...
        }
        
    }
    

    如果CounterService 不是动态的,这是一个非常好的模式:

    @Component(immediate = true)
    public class ServiceImpl implements Service {
    
        final CounterService myCounterService;
        
        @Activate
        public ServiceImpl( @Reference  CounterService  c ) {
            this.myCounterService = c;
        }
        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多