Как читать конфигурацию OSGI через простой Java-класс - PullRequest
0 голосов
/ 18 мая 2018

Мне нужно получить некоторые значения конфигурации OSGI через простой Java-класс, который не зарегистрирован как сервис, поэтому я не могу использовать аннотации @Reference или @Inject.Я использовал контекст Bundle для получения конфигурации, но он работает.

public void getArticleName() {
        final BundleContext bundleContext = FrameworkUtil.getBundle(ArticleNameService.class).getBundleContext();
        try {
            String articleName = (String) bundleContext.getService((bundleContext.getServiceReferences(ArticleNameService.class.getName(), " article.name "))[0]);
                     LOG.info("articleName......"+ articleName);
        } catch (InvalidSyntaxException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Класс обслуживания

@Service(ArticleNameService.class)
@Component(
        metatype = true)
@Properties({
        @Property(
                name = "article.name", unbounded = PropertyUnbounded.ARRAY, cardinality = Integer.MAX_VALUE,
                label = "article addrnameess"),
         })

public class ArticleNameServiceImpl implements ArticleNameService
{

    private static final String ARTICLE_NAME = "article.name";

    private String[] articleName;


    protected final void activate(final ComponentContext componentContext)
    {
        final Dictionary<String, Object> configurationProperties = componentContext.getProperties();

        if (configurationProperties != null)
        {
            articleName = PropertiesUtil.toStringArray(configurationProperties.get(ARTICLE_NAME));
        }
    }

    @Override
    public final String[] getArticeName()
    {
        return articleName;
    }

это правильный способ сделать?если нет то какой правильный вариант получить его?

1 Ответ

0 голосов
/ 19 мая 2018

Вы можете получить любую конфигурацию, используя ConfigurationAdmin.Для ваших компонентов DS pid по умолчанию - это FQName вашего класса компонентов.

    Bundle bundle = FrameworkUtil.getBundle(this.getClass());
    BundleContext context = bundle.getBundleContext();
    ServiceReference<ConfigurationAdmin> reference = context.getServiceReference(ConfigurationAdmin.class);
    ConfigurationAdmin configAdmin = context.getService(reference);
    Configuration conf = configAdmin.getConfiguration("yourpid");
    String articleName = (String)conf.getProperties().get("article.name");
    context.ungetService(reference);
...