Какова область действия компонента плагина слияния и как им управлять?
Я разрабатываю плагин слияния с использованием Atlassian SDK. При использовании плагинов версии 2, согласно документации Atlassian, для каждого экземпляра компонента, если компонент общедоступен, он также отображается как сервис OSGI (который я вижу на консоли Felix). (См. Документ Atlassian.)
Пока в моем плагине слияния есть 3 сопутствующих элемента, один из которых является общедоступным, а другие - "частными" (public="false"). Мой основной бин (названный "хранилище артефактов") - тот, который общедоступен - я использую в некоторых классах макросов и внедряю его через конструктор. В atlassian-plugin.xml
я объявил компонент так:
<component key="artifact-store" class="info.magnolia.sys.confluence.plugin.artifactinfo.artifactstore.ArtifactCache" name="Artifact store to cache artifacts" public="true">
<interface>info.magnolia.sys.confluence.plugin.artifactinfo.ArtifactSearch</interface>
<description key="artifact-store.decription">Artifact store to cache artifacts based on Atlassian cache api.</description>
</component>
Документ Atlassian гласит: "Экземпляры создаются для каждого использования (prototype-scope) ..." Я сомневаюсь в этом. При отладке моих макросов я всегда вижу один и тот же экземпляр "магазина артефактов", поэтому я считаю, что область действия НЕ "прототип". Это было бы хорошо для меня, я хочу объем "синглтон", но я не уверен, так ли это на самом деле.
Для дальнейшего контроля bean-компонентов Atlassian рекомендует объявлять bean-компоненты в META-INF/spring/, поэтому я создал "определение" spring bean-компонентов artifact-info-plugin/src/main/resources/META-INF/spring/artifact-info-plugin.xml
; я добавил туда один боб:
<bean id="artifactSearchBean" class="info.magnolia.sys.confluence.plugin.artifactinfo.artifactstore.ArtifactCache" scope="singleton">
<description>A bean chaching artifact data</description>
</bean>
В atlassian-plugin.xml
я изменил определение компонента на:
<component key="artifact-store" class="bean:artifactSearchBean" name="Artifact store to cache artifacts" public="true">
<interface>info.magnolia.sys.confluence.plugin.artifactinfo.ArtifactSearch</interface>
<description key="artifact-store.decription">Artifact store to cache artifacts based on Atlassian cache api.</description>
</component>
Я попробовал это, но у меня не работает, больше нет бобов; ни один из компонентов не создан; как следствие, макросы (компоненты-компоненты) также больше не доступны.
Подводя итоги вопросов:
- Какова сфера применения плагинов для слияния
<component/>
? - Одинакова ли область действия как для общедоступных, так и для "частных" компонентных компонентов?
- Как я могу убедиться, что у вас есть синглтон-бин?
- Действительно ли возможно объявить компонент компонента в
META-INF/spring/beans.xml
? Если да, то как? Не могли бы вы привести короткий пример?
Может быть, еще интересная информация о моем окружении: in pom:
<confluence.version>5.8.9</confluence.version>
<confluence.data.version>5.8.9</confluence.data.version>
<amps.version>5.1.11</amps.version>
в atlassian-plugin.xml: <atlassian-plugin plugins-version="2"/>
Поскольку мне не разрешено добавлять более 2 ссылок, я добавлю полные ссылки в файл pom, плагин xml и beans xml в качестве комментариев.
1 ответ
Какова сфера применения плагинов для слияния?
Это синглтон
Одинакова ли область действия как для общедоступных, так и для "частных" компонентных компонентов?
да
Как я могу убедиться, что у вас есть синглтон-бин?
Если они определены в atlassian-plugin.xml, они уже одноэлементные.
Действительно ли возможно объявить компонентный компонент в META-INF/spring/beans.xml? Если да, то как? Не могли бы вы привести короткий пример?
Я никогда не пытался определить beans.xml. У меня есть только конфигурация аннотации весны: добавлен src/main/resources/META-INF/spring/spring.xml со следующим содержимым:
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="com.jiraworkcalendar" />
</beans