atlassian SDK を使用して合流プラグインを開発しています。アトラシアンのドキュメントによると、plugins-version 2 を使用する場合、Bean がインスタンス化されるたびに、Bean が公開されている場合、OSGI サービスとしても公開されます (Felix コンソールで確認できます)。(アトラシアンのドキュメントを参照してください。)
これまでのところ、合流プラグインには 3 つのコンポーネントがあり、そのうちの 1 つはパブリックで、他は「プライベート」(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 docu は次のように述べています: 「インスタンスは使用ごとに作成されます (プロトタイプ スコープ) ...」マクロをデバッグするとき、常に「artifact-store」の同じインスタンスが表示されます。そのため、スコープは「プロトタイプ」ではないと思います。これは私にとっては問題ありません。スコープ「シングルトン」が必要ですが、それが本当にそうであるかどうかはわかりません。
さらに Bean を制御するために、アトラシアンは META-INF/spring/ で Bean を宣言することを推奨しているため、Spring Bean の「定義」を作成しましたartifact-info-plugin/src/main/resources/META-INF/spring/artifact-info-plugin.xml
。そこに 1 つの Bean を追加しました。
<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 を使用する) も使用できなくなりました。
質問を要約するには:
- 合流プラグインの Bean スコープは何
<component/>
ですか? - スコープは、パブリック コンポーネント Bean と「プライベート」コンポーネント Bean の両方で同じですか?
- シングルトン スコープの Bean を確保するにはどうすればよいですか?
- でコンポーネント Bean を宣言することは本当に可能
META-INF/spring/beans.xml
ですか? はいの場合、どのように?簡単な例を教えてください。
私の環境に関するいくつかのさらに興味深い情報: 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 への完全なリンクをコメントとして追加します。