1

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 への完全なリンクをコメントとして追加します。

4

1 に答える 1

1

合流プラグインの Bean スコープは何ですか?

シングルトンです

スコープはパブリック コンポーネント Bean と「プライベート」コンポーネント Bean の両方で同じですか?

はい

シングルトン スコープの Bean を確保するにはどうすればよいですか?

atlassian-plugin.xml で定義されている場合、それらはすでにシングルトンです。

コンポーネント Bean を 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
于 2015-08-24T08:23:03.437 に答える