Я разрабатываю плагин слияния, используя slass. При использовании плагинов-версии 2, в соответствии с документами Atlassian, для каждого компонента создается экземпляр компонента, если компонент является общедоступным, он также отображается как служба OSGI (которую я могу видеть на консоли Felix). (См. atlassian docu.) .)Какая область видимости компонента компонента слияния и как его контролировать?
У меня есть 3 copmponents в моем плагине слияния, один из них является общедоступным, остальные являются «частными» (public = «false»). Мой главный bean (называемый «artifact-store») - тот, который является общедоступным - я использую в некоторых макроклассах и вставляю его через конструктор. В 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 доку говорит: «Экземпляры создаются за использование (прототипы область видимости) ...» Сомневаюсь об этом. При отладке моих макросов я всегда вижу один и тот же экземпляр «artifact-store», поэтому я считаю, что область не является «прототипом». Это было бы хорошо для меня, я хочу область «singleton», но я не уверен, действительно ли это.
Для дальнейшего контроля над фасолью Atlassian рекомендует декларировать бобы в META-INF/spring /, поэтому я создал весенние бобы «определение» 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>
Я пробовал, но не работаю для меня, есть больше не доступно bean bean; ни один из компонентов не создается; как следствие, макросы (компоненты компонентов потребления) также больше не доступны.
Подытожим вопросы:
- Что боб сфера слияния плагин
<component/>
? - Является ли область одинаковой для общественных и частных компонентов компонентов?
- Как я могу обеспечить, чтобы beone-бленд с одним ядром?
- Действительно ли можно объявить компонентный компонент в
META-INF/spring/beans.xml
? Если да, то как? Не могли бы вы привести краткий пример?
Некоторая возможно дальнейшим интересная информация о о моем окружении: в П:
<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, plugin xml и beans xml в качестве комментариев.
- П: https://gist.github.com/Watcher24/247d7b633095e1a8ce59 - плагин-XML: https://gist.github.com/Watcher24/62937ba288bdd2eeb552 - бобы-XML: https://gist.github.com/Watcher24/1e6fd0d6fdc48f4cb9d6 –