2015-09-14 2 views
0

У меня есть компонент OSGi Transformer, который создается экземпляром sling. В моем OSGi компоненте у меня есть следующие аннотации:Как я могу прочитать заводские конфигурации для моего экземпляра OSGI

@Component(configurationFactory = true, metatype = true, policy =  ConfigurationPolicy.REQUIRE, label = "CDN Link Rewriter", description = "Rewrites links to all static files to use configurable CDN") 
@Service(value = TransformerFactory.class) 
public class StaticLinkTransformer implements Transformer, 
    TransformerFactory 

У меня есть некоторые свойства, которые я аннотированные в @property

@Property(label = "CDN Url prefix", description = "CDN URL prefix", value = "") 
private static final String CDN_URL_PREFIX = "cdn_url_prefix"; 

Теперь я могу предоставить несколько конфигураций для этого класса с помощью «+» войдите в консоль felix. Если у меня есть «N» количество конфигураций, sling создает экземпляры N объектов моего класса StaticLinkRewriter.

Вопрос: Как получить правильную конфигурацию для объекта, созданного экземпляром? Я имею в виду, когда sling создает экземпляры моих объектов, как я могу получить конфигурации, для которых был создан объект?

ответ

0

Я думаю, что этот компонент не инстанцирован по Слинг но декларативных Услуги.

Вы можете получить конфигурацию, если вы реализуете метод активации. Например .:

@Activate 
void activate(ComponentContext ctx) { 
    Dictionary configuration = ctx.getProperties(); 
    // use your configuration 
} 

Для получения дополнительной информации см 112 декларативных Услуг Спецификации глава спецификации OSGi Перечня.

+0

Спасибо за ответ, но метод активации будет вызываться только при добавлении новых конфигураций. Но я хочу получить конфигурации, когда объект моего класса создается. В коде есть метод init(), который вызывается при создании экземпляра объекта. В этом методе я не могу получить конфигурацию: метод инициализации ниже: '@Override \t общественности недействительным Init ( \t \t \t org.apache.sling.rewriter.ProcessingContext контекст, \t \t \t org.apache. sling.rewriter.ProcessingComponentConfiguration config) ' –

+0

Кто вызывает этот метод init? Вы уверены, что метод init вызывается до активации метода? Я могу представить следующий порядок: Объект создается DS, активируется метод, зарегистрирован сервис, метод init вызывается другой технологией из-за регистрации службы OSGi. Если вы сохраните конфигурацию в переменной-члене в методе активации, вы также сможете получить к ней доступ в методе init. –

+0

1. Я пытаюсь реализовать пользовательский ретранслятор ссылок, реализуя Sling Transformer. Если у меня есть 3 набора конфигураций для моего пользовательского ретранслятора ссылок, sling создает 3 экземпляра моего класса. После мгновенного создания sling вызывает мой метод init. В этом @Activate не попадает в изображение нигде. Следовательно, я не могу получить доступ к конфигурациям. 2. Даже если я сохраню конфигурации в статической переменной при вызове функции «Активировать», я получаю одинаковые конфигурации во всех моих трех экземплярах, которые побеждают всю цель фабрики config. Я думаю, что мне не хватает большого куска. –