Friday, May 27, 2016

Alfresco勉強会#33でファイルの自動削除機能を実装する話をしました

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

先日第33回Alfresco勉強会が開催され、そこでファイル自動削除機能の実装について発表させていただきました。

out-of-the-boxのAlfrescoでは、ファイルの有効期限を管理するための属性を付与することはできるのですが、 その有効期限に応じた何らかのアクション(削除とかアーカイブとか)を実行するための機能は提供されていません。そこで、今回の発表では、有効期限を過ぎたコンテンツを自動削除するようなスケジュールジョブの実装方法を紹介しました。なお、ジョブの実装を変えることで、コンテンツのアーカイブを実現することも可能です。



カスタマイズにはAlfresco SDKを使ったのですが、Alfresco SDK + Eclipseの開発の進め方については以前の勉強会で発表された「Alfresco SDK+Eclipseで開発してみよう」Alfresco公式のドキュメントがとても役に立つので是非チェックしてみてください。


なお、次回の第34回Alfresco勉強会は2016年7月27日(水)ですので、興味がある方はAlfresco勉強会ページから参加登録してみてください。

Thursday, May 26, 2016

Alfresco勉強会#33 Alfresco Solr Admin UI

こんにちは。てらしたです。昨日5/25に第33回Alfresco勉強会が開催されました。

参加していただいた方の中で、Alfresco興味あるけどまだあまり触ってないしどんな機能があるのかもよく知らないんだよね、といった方が多い場合は(もちろんそのような方も大歓迎なので)あらかじめ用意していた発表の前にAlfrescoの概要についてご紹介するようにしているのですが、今回もその流れで進めました。以下の記事にある過去の勉強会の資料を使用してご説明したので、興味がある方はご覧ください。

Alfresco勉強会#27で Alfrescoの主要機能についての紹介発表をしました
Alfresco勉強会#32 Alfresco Community 5.1.eの機能紹介

上記のAlfrescoの概要の後に、今回用意していた内容であるSolr Admin UIの開き方についてご紹介しました。また、AlfrescoではなくSolrの機能なんですが、シノニム(類義語)検索についても簡単にご紹介しました。


ここからさらに進んでSolr Admin UIの具体的な使い方や望みの検索結果を得るための設定方法を知りたい場合はSolrに関する書籍やWebサイトで調べていただくのが近道だと思います。

最後に、発表資料の中でもご紹介していますが、Alfresco 5.1のSolrに関して非常に詳しく解説されているページをご紹介しておきたいと思います。今回の発表内容はこのページのほんの一部を抜き出したものです。AlfrescoのSolrに関して大体のことは書いてあるんじゃないかと思うほど詳しく書かれているので、何か調べたい時は役に立つと思います。

Searching with Alfresco 5.1 Community

さて、次回のAlfresco勉強会は7月27日(水)です。たくさんの方のご参加お待ちしております。参加登録は以下のリンクからお願いします。

第34回 Alfresco勉強会

もちろん発表も大歓迎です。発表はできないけどこういう内容が知りたい、こんなところで困っているから教えてほしい、といった要望があればconnpassのフィードに投稿していただければと思います。

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カスタマイズを試してみてください。