2 * Copyright (c) 2016 Brocade Communications Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.blueprint.ext;
10 import org.osgi.service.blueprint.container.ComponentDefinitionException;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
15 * Factory metadata corresponding to the "static-reference" element that obtains an OSGi service and
16 * returns the actual instance. This differs from the standard "reference" element that returns a dynamic
17 * proxy whose underlying service instance can come and go.
19 * @author Thomas Pantelis
21 class StaticReferenceMetadata extends AbstractDependentComponentFactoryMetadata {
22 private static final Logger LOG = LoggerFactory.getLogger(StaticReferenceMetadata.class);
24 private final String interfaceName;
25 private volatile Object retrievedService;
27 StaticReferenceMetadata(final String id, final String interfaceName) {
29 this.interfaceName = interfaceName;
33 protected void startTracking() {
34 retrieveService(interfaceName, interfaceName, service -> {
35 retrievedService = service;
41 public Object create() throws ComponentDefinitionException {
44 LOG.debug("{}: create returning service {}", logName(), retrievedService);
46 return retrievedService;
50 public String toString() {
51 StringBuilder builder = new StringBuilder();
52 builder.append("StaticReferenceMetadata [interfaceName=").append(interfaceName).append("]");
53 return builder.toString();