tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceプラグインでcomponent-importを忘れてはまった件

もー、ホントに下らない件ではまってしまった。。。

自分も、Confluenceのプラグインを作ってみる(7) Atlassian Templateを使ってみる - tohokuaikiのチラシの裏で書いてるのに、理解してなかったからはまってしまった。

おさらい。

UnsatisfiedDependencyException - Error creating bean with name - Atlassian Developersあたりに書いてあることです。

エラーが発生して、Servletが404になってしまう。

ログを見ると、

[INFO] [talledLocalContainer] com.atlassian.util.concurrent.LazyReference$InitializationException: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jp.junoe.confluence.plugins.**************': Unsatisfied dependency expressed through constructor argument with index 3 of type [com.atlassian.sal.api.user.UserManager]: : No unique bean of type [com.atlassian.sal.api.user.UserManager] is defined: Unsatisfied dependency of type [interface com.atlassian.sal.api.user.UserManager]: expected at least 1 matching bean; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.atlassian.sal.api.user.UserManager] is defined: Unsatisfied dependency of type [interface com.atlassian.sal.api.user.UserManager]: expected at least 1 matching bean

とか出てる。あれ?依存性でこけてる?

ConfluenceでUserManagerとかを使う時の注意

このコンポーネントを使う際のやり方。

pom.xmlに追加

SAL Services - Atlassian Developers
のサービスを使いたい。
APIリファレンスはこちら

下記のdependencyを追加

        <dependency>
          <groupId>com.atlassian.sal</groupId>
          <artifactId>sal-api</artifactId>
          <version>2.10.17</version>
          <scope>provided</scope>
        </dependency>

このバージョンはNetBeansのエラーで出ていたので解決してもらったら現時点で一番新しい安定板がこれだったので追加した。すべてNetBeans任せ。こんな感じで依存性を追加すると、画面が出てきてインクリメンタル&サジェストしてくれるので便利。
f:id:tohokuaiki:20140514152957j:plain
f:id:tohokuaiki:20140514152955j:plain

atlassian-plugin.xmlに追加

これを忘れてハマってしまった。

    <component-import key="userManager" interface="com.atlassian.sal.api.user.UserManager" />
    <component-import key="loginUriProvider" interface="com.atlassian.sal.api.auth.LoginUriProvider" />

により、JavaでUserManager、LoginUriProvider、

import com.atlassian.sal.api.auth.LoginUriProvider;
import com.atlassian.sal.api.user.UserManager;
import com.atlassian.sal.api.ApplicationProperties;

ができるようになる。