Какова область действия компонента плагина слияния и как им управлять?

Я разрабатываю плагин слияния с использованием 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
Другие вопросы по тегам