Monday, May 23, 2016

Alfresco SDK 2.2でJARパッケージの拡張モジュールを作る

こんにちは。おおたにです。

今回はAlfresco SDKを使ってAlfresco Community Edition 5.1系向けの開発を行うためのtipsを紹介したいと思います。なお、Alfresco SDKの詳細やEclipse+Alfresco SDKでの開発方法については本ブログの記事「Alfresco勉強会#26でAlfresco SDK + Eclipseによる開発方法について発表しました」を参照すると実践的な情報が得られると思います。

記事執筆時点でのAlfresco Community Editionの最新版は5.1.fです。5.1系に対応したAlfresco SDKは2.2.xで、現時点での最新版は2.2.0です。以下ではこれらの最新版を用いて、JARパッケージングされた拡張モジュールを作りたいと思います(拡張モジュールのJARパッケージングは5.1で初めてサポートされました)。

なお、事前準備としてこちらのドキュメントの内容をひととおり設定しておく必要があります。

Alfresco SDKで拡張モジュールを作ってみる(Alfresco Repository編)


では早速拡張モジュールを作っていきます。JARパッケージングの場合はGitHubで公開されているAlfresco SDK Examplesを使うのが手っ取り早いです。Download ZIP等でコード一式をダウンロードして展開しておきます。手順は以下のとおりです。

1. ./samples/alfresco-simple-module/repo/pom.xml を以下のように編集する。
  • alfresco-sdk-parent のバージョンを2.1.0から2.2.0に変更する
  • alfresco-rad のバージョンを2.1.0から2.2.0に変更する
  • <alfresco.version>5.0.d</alfresco.version> をコメントの外に出し、<alfresco.version>5.1.f</alfresco.version> に変更する
  • alfresco.versionを5.1.e以降にする場合は、<alfresco.version>の次の行に<alfresco.repo.artifactId>alfresco-platform</alfresco.repo.artifactId>を追記する(2016/12/05追記)
  •  tomcat7-maven-plugin の <dependencies> 内に以下の2つのdependencyを追加する(これ重要)
<dependency>
    <groupId>org.alfresco</groupId>
    <artifactId>alfresco-repository</artifactId>
    <version>${alfresco.version}</version>
    <classifier>h2scripts</classifier>
    <exclusions>
        <exclusion>
            <groupId>*</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.codehaus.plexus</groupId>
    <artifactId>plexus-archiver</artifactId>
    <version>2.3</version>
</dependency>

2. 以下のコマンドを実行してテスト用サーバを起動する。
> cd ./samples/alfresco-simple-module/repo
> mvn integration-test -Prun

Mavenの諸々の処理の後にTomcatが起動し、ログにエラー無く Starting ProtocolHandler ["http-bio-8080"] と出力されればOKです。以下のようなエラーが出ている場合はpom.xmlの記述が足りないor間違っている可能性があります。

 org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Failed to get resource: alfresco/ibatis/#resource.dialect#/activities-insert-SqlMap.xml

このサンプルには以下のカスタム実装が同梱されていますので動作を確認してみてください。
  •  Alfresco Repository起動時に標準出力に"SDK Sample Repo JAR class has been loaded"と出力するカスタムクラス
  •  拡張モジュール読み込み時にログに"Test debug logging. Congratulations your JAR is working"と出力するカスタムクラスとログレベル変更ファイル
  • 静的/動的コンテンツ http://localhost:8080/alfresco/alfresco-simple-repo-module/index.html
  • テスト用サーブレットとサーブレットマッピング(test-servlet)
  • 簡単なテキストを返すJava-backed WebScript(/sample/helloworld)
  • ワークフローのプロセス定義my-process
  • モデル定義のコンテンツタイプmyc:dox
もちろん、個別にインストールしたAlfrescoのクラスパスに生成されたJARファイルをコピーすることで拡張モジュールを適用することができます。

Alfresco SDKで拡張モジュールを作ってみる(Alfresco Share編)


続いて、Alfresco Share向けの拡張モジュールを作ります。引き続きAlfresco SDK Examplesを使います。手順は以下のとおりです。

1. ./samples/alfresco-simple-module/share/pom.xml を以下のように編集する。
  • alfresco-sdk-parent のバージョンを2.1.0から2.2.0に変更する
  • <alfresco.version>5.0.d</alfresco.version> を <alfresco.version>5.1.f</alfresco.version> に変更する
  • <dependencies> 内の spring-surf-api dependency を以下の内容に置き換える(このissueへの対応策です)
<dependency>
    <groupId>org.alfresco.surf</groupId>
    <artifactId>spring-surf-api</artifactId>
    <version>${dependency.surf.version}</version>
    <scope>provided</scope>
</dependency>

2. 以下のコマンドを実行してテスト用サーバを起動する。
> cd ./samples/alfresco-simple-module/share
> mvn integration-test -Prun -Ddependency.surf.version=6.3

Mavenの諸々の処理の後にTomcatが起動し、ログにエラー無く Starting ProtocolHandler ["http-8081"] と表示されればOKです。以下のようなエラーが出ている場合はpom.xmlの記述が足りないor間違っている可能性があります。

 [ERROR] 'dependencies.dependency.version' for org.springframework.extensions.surf:spring-surf-api:jar is missing.

http://localhost:8081/share にアクセスしてAlfrescoにログインできることを確認したら、サンプルに含まれる以下のカスタム実装の動作を確認してみてください。
  •  Alfresco Share起動時に標準出力に"SDK Sample Share JAR class has been loaded"と出力するカスタムクラス
  • 静的/動的コンテンツ http://localhost:8081/share/alfresco-simple-share-module/index.html
  • テスト用サーブレットとサーブレットマッピング(test-servlet)
  • Aikau Pageを生成するWebScript(/helloworld)
こちらも生成されたJARファイルをAlfresco Shareのクラスパスにコピーすることで拡張モジュールを適用することができます。


以上が、Alfresco SDK 2.2.0 + Alfresco Community Edition 5.1.fでJARパッケージの拡張モジュールを開発するための大まかな手順となります(それぞれ若干の追加ステップが必要となりますが、将来的にはAlfresco SDKが吸収してくれそうな気がします)。是非皆様も最新のAlfresco SDKを使ったAlfrescoカスタマイズを試してみてください。

No comments: