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

Wednesday, April 20, 2016

Alfresco Community Edition 5.1の新機能を見てみよう

こんにちは。大谷です。

今回は、Alfresco Community Edition 5.1の新機能について紹介します。既にAlfresco勉強会の方で「Alfresco Community 5.1.e 機能紹介」という発表があって、GUI上でのモデル定義とスマートフォルダ機能については触れられていますが、ここではそれ以外の変更点についても紹介したいと思います。

なお、インストール方法については「Alfresco Community Edition 5.1をインストールしてみよう」という記事を見てみてください。


今回使っているバージョンは?


2016/02/17にリリースされたAlfresco Community Edition 5.1.eというバージョンです。Community 5.1.x系の最新版であり、かつ初のGA(Generally Available)版となります。

実は、5.1系からバージョンの呼称が変わっていて、201508_EA(Early Access)、201509_EA、201510_EA、201512_EA、201602_GAとバージョンを重ねてきました。そして、それぞれが内部的にはこれまでの命名規則と同じ5.1.a、5.1.b、5.1.c、5.1.d、5.1.eというバージョン番号が振られています。というわけで、5.1.e = 201602_GA版ということになります。


新機能の前に、出来なくなったこと


大きく2つの機能が落ちています。1つはNFS、もう1つはjBPMです。

ファイルサーバ機能としてNFSが利用できなくなった

AlfrescoはFTP、CIFS、WebDAV等のファイルシステムアクセス機能を持っていますが、これまで利用できたNFS機能が標準機能から外れました。ただ、ソースコードはGitHub上に公開されているので、それをビルド/パッケージングすることで引き続きNFS機能を利用することはできるようです(未検証ですすいません…)

ワークフローエンジンとしてjBPMを選択できなくなった

これまでもjBPMはオプション扱いで、alfresco-global.propertiesで設定変更することで利用できましたが、5.1からはalfresco-global.propertiesで設定することもできなくなりました。完全にActivitiに移行したということになります。しかし、Spring bean定義が生きていることや、jBPM関連のjarファイルが相変わらず同梱されているところを見ると、Spring beanの設定を変更することで相変わらずjBPMを利用できるかもしれません(こちらも未検証ですすいません…)


5.1で出来るようになったこと


次に、Alfresco Community Edition 5.1の新機能を挙げていきます。これまで幾度となく要望があがっていてやっと実現したもの、Alfresco Explorer(=過去の遺物)でしか操作できなかったものがやっとAlfresco Shareに実装されたものなど、大小様々なエンハンスメントがありましたが、ここでは主要なものをいくつか挙げたいと思います。


スマートフォルダ機能

まずは、スマートフォルダから紹介します。スマートフォルダとは、指定した切り口(条件)に合致したコンテンツを仮想的なフォルダに表示する機能です。よく仮想フォルダなどと呼ばれています。データベースでいうところのビューみたいなものかと思います。まず、この機能を使うためにはAlfrescoの設定を変更する必要があります。<tomcat_dir>/shared/classes/alfresco-global.propertiesで、以下のようにスマートフォルダの設定をtrueに変更します(デフォルトでfalseとなっています)。

smart.folders.enabled=true

Alfrescoを再起動したら、管理者でログインして「リポジトリ」から リポジトリ/データディクショナリ/スマートフォルダテンプレート フォルダに移動し、ここにjson形式で書かれたテンプレートファイルをアップロードします(今回はデフォルトで入っているsmartFoldersExample.jsonを利用します)。テンプレートファイルをアップロードしたらコンテンツ詳細画面の「タイプの変更」でコンテンツタイプを「スマートフォルダテンプレート」に変更してください。


以上でスマートフォルダのテンプレート登録が終わりました。続いて、テスト用にフォルダを作り、フォルダ詳細画面の「アスペクトの管理」から「システムスマートフォルダ」アスペクトを追加します。すると、フォルダのプロパティ編集画面にテンプレート設定欄が表示されるので、適用するテンプレートを選択して保存します。


では、スマートフォルダテンプレートを設定したフォルダを見てみてください。メガネアイコンの付いたフォルダが表示され、そのフォルダ内に指定の条件に合致するコンテンツが表示されているはずです。


この機能、従来はAlfresco Workdeskという製品で実現されていたのですが、Workdeskの開発が終わったためか、Alfrescoの標準機能として搭載されました。要望としてよく伺っていた機能なので(特に競合製品で出来て標準のAlfrescoではできていなかった)、Alfrescoの適用範囲というか利用シーンがググッと広がるんじゃないかなと思っています。


GUI上でのモデル定義機能

これも大きなエンハンスメントですが、Alfresco Shareの管理画面上からカスタムモデルを定義できるようになりました!これまでも、Data Dictionaryフォルダ以下にモデル定義のxmlファイルをアップロードして動的にモデル定義を読み込ませることはできましたが、
  • モデル定義をxmlで記述しなくてはならない
  • Alfresco Shareのフォーム定義(要Alfresco再起動)を別途行わないとAlfresco Share上でカスタムプロパティが表示されない
という状況でした。Alfresco 5.1からは、カスタムモデル定義が管理画面上の操作で完結するようになります。

以下、簡単にカスタムモデルの定義方法を見ていきます。まず、管理者でログインし、「管理ツール」→「モジュールマネージャ」に移動して「モデルの作成」をクリックします。ここで、カスタムモデルの情報を入力します。


次に、作成したカスタムモデルを開き、「カスタムタイプの作成」もしくは「アスペクトの作成」をクリックし、タイプもしくはアスペクトの情報を入力します。


続いて、作成したカスタムタイプもしくはアスペクトを開き、「プロパティの作成」をクリックし、プロパティを追加します。名前やラベル、データ型の他、必須か否か、複数値、デフォルト値、制約、インデックス種類を設定することができます。


必要なプロパティを追加し終わったら、アクションの「レイアウトデザイナー」をクリックします。

ここで、Share上での表示フォームを設定します。「デフォルトのレイアウトを適用」をクリックすると標準的な表示レイアウトを作ってくれるので、それをベースに調整するのもよいかもしれません。なお、このステップは必須で、レイアウトを保存しないとカスタムモデルが有効になりません。


必要なモデル定義が完了したら、カスタムモデルのアクションから「有効化」をクリックすることでモデルを有効にすることができます。エクスポートを実行すると、モジュールとしてパッケージングされたモデル定義/フォーム定義を取得することができます。GUIベースでモデル定義を進めて、エクスポートした定義ファイルで詳細を調整する、というようなモデル定義の進め方もできるうえ、モデル定義の可搬性も高くなって嬉しい事ずくめです。


以上でカスタムモデル定義が使えるようになります。適当なコンテンツの「タイプの変更」をクリックすると、先ほど追加したモデルが選択できるようになっているはずです。


ホームページ指定機能

ログイン後に○○のページに遷移してほしいという要望は結構あって、これまでは都度カスタマイズで対応していたのですが、この機能を使うとユーザ毎に自分の好きなページをホームページに指定して、ログイン直後に表示することができます。


「解凍先(Unzip to)」アクション

これも、Alfresco Explorerで出来ていた機能がAlfresco Shareで実現されたパターンになります。Alfresco上にアップロードされたZIPファイルもしくはACP(Alfresco Content Package)ファイルを、指定したフォルダに展開する機能です。ルールのアクションとしては既に実装されていたのですが、ZIPファイルもしくはACP ファイルのアクションから直接実行できるようになりました。



「所有者になる(Take Ownership)」アクション

これまでAlfresco Explorerで出来ていたコンテンツ所有権の取得をAlfresco Shareで実行できるようになりました。コンテンツ所有権は権限管理上地味に重要な概念で、コンテンツ所有者はそのコンテンツに対して特別な権限が与えられています。しかし、Alfresco 5.0からAlfresco Explorerが廃止となり、コンテンツ所有権をGUI上で操作できない状況になっていました。

Admin Consoleでのノードブラウズと管理

Alfresco Community Edition 5.0系の後半から、Enterprise Edition限定だったAdmin Consoleの一部がCommunity Editionにも開放されました。 http://localhost:8080/alfresco/s/admin/ にアクセスすると、Admin Consoleにログインすることができます。モデル/テナント/ワークフローの各コンソールが利用できる他、ノードブラウザを利用することができます。Alfresco Shareにもノードブラウザがあるのですが、Admin Consoleではノードに対して以下のような操作を行うことができるようになりました。
  • ノードの削除
  • ノードの強制削除(アーカイブせずに削除)
  • 所有権の獲得
  • 権限を元に戻す
  • ノードの復元(アーカイブされたもののみ)
  • ノードプロパティの削除


さいごに


以上が、Alfresco Community Edition 5.1の新機能になります。是非みなさんもAlfresco Community Edition 5.1をインストールして、これらの新機能を確認してみてください。


Friday, April 15, 2016

CmisSync intégré dans l'offre du numéro 1 japonais de la comptabilité en ligne

Le numéro 1 japonais des solutions de comptabilité en ligne, A-SaaS, a décidé de renforcer son offre en fournissant à ses clients un service de synchronisation et partage de fichiers.

Plutôt que d'implémenter une solution propriétaire, A-SaaS a choisi de réutiliser les produits "sur étagère" d'Aegif.

CmisSync était exactement ce qu'il fallait: Client de synchronisation facile à utiliser, et infrastructure flexible.

Aegif a donc créé une version renommée de CmisSync avec les logo, nom de produit, et adresse d'authentification de A-SaaS:



Du côté serveur, A-SaaS a choisi NemakiWare, un serveur de GED (Gestion Électronique de Documents) open source et conforme au standard CMIS, tournant sur AWS.

A-SaaS cite les raisons suivantes d'offrir ce service à ses clients:
  • Plus sécurisé que les va-et-vient de documents par email:
    • Pas de risque d'envoyer au mauvais destinataire.
    • Recevoir moins de documents par email signifie être plus prudent quand on en reçoit, le résultat étant une meilleure résilience aux virus et à l'ingénierie sociale.
  • Moins de risque de perte de données.
  • Introduction aisée aux fonctionnalités de GED.
  • Meilleure collaboration entre les employés.

Nicolas Raoul

Wednesday, April 13, 2016

Japanese SaaS accounting leader launches cloud storage service, powered by CmisSync

The #1 web-based accounting solution in Japan, A-SaaS, is now strengthening its offer by providing file cloud storage to its customers.

EFSS (Enterprise File Sync & Share) is not easy to get right, so rather than implementing its own proprietary solution, the Tokyo-based company chose to reuse off-the-shelf products made by Aegif.

Aegif's CmisSync product provided exactly what was needed: Easy-to-use file synchronization and flexible back-end.

Aegif has built a rebranded version of CmisSync with a custom logo, product name and authentication address:


Unknown to users, the backend is NemakiWare, an open source CMIS-compliant ECM server, running on AWS.

The accounting company cited the following reasons for offering this service to their customers:
  • Safer than sending document back-and-forth by email:
    • No risk of sending to unintended recipients.
    • Receiving less documents via email means being more careful when receiving one, leading to stronger resilience to viruses and social engineering.
  • Less risk of data loss.
  • Lower entry barrier to feature-rich document management.
  • Better collaboration between employees.

Nicolas Raoul

Friday, April 8, 2016

Liferay Portal 7 リリース!

こんにちは。ナクラです。
先日のことですが、ついにとうとう全世界が待ちわびていた(?)Liferayの新バージョン
Liferay Portal 7 CE GA1 がリリースされました!

前回のマイナーバージョンアップLiferay Portal 6.2.3が2015年4月だったことを考えると
ほぼ丸1年、またLiferay Portal6.0のリリースは2010年3月だったので、そこから数えるとなんと6年ぶり(!)のメジャーバージョンアップとなります。

詳しいことはこの記事に書かれていますが、
新機能について、読めない英語を必死で読んで自分なりに簡単にまとめておきます。

Java8に対応

  • 併せてTomcatも8に対応

内部のモジュール化

  • OSGiプラットフォーム対応

新しいフォーム作成画面

  • フォームのフィールドを設定するときに、複数列にしたり、フォーム画面を複数ページにまたがるように作成できる

コンテンツ編集機能の強化

  • Liferay社謹製の新しいWYSIWYGエディタ(Alloy Editor)
  • Webコンテンツをフォルダ分けできるようになった
  • Webコンテンツのバージョン間の差分表示
  • テンプレートやコンテンツのサイト間共有 

コンテンツへの地図情報の付加

  • Webコンテンツ、データリスト、文書ファイルに地図情報を付加できるようにフィールドを追加できる

モダンなデザイン

  • 最近はやりのデザイン対応したサイトを作れる 

ブログ、フォーラム、Wikiの改良

ステージング機能の改善 

  • メニューから簡単にステージング設定ができる
  • 複雑なパブリッシュシナリオに対応

画像ファイルの選択画面の改善

  • アップロードしたファイルの画像を見て選択できる

ページロードの速度アップ 

  • 全体リフレッシュを避けて、部分描画でその部分だけをロード

既存のアプリケーションの見映えの改良

  • Bootstrapを改良したLexiconフレームワークで見映えをよくした

ナビゲーションメニューの改良

  • Dockbarにあったメニューが画面横に移動

インフラの改良

  • 検索エンジンをLuceneからElasticSearchに置き換え
  • JAX-RS対応
  • デバイスマネージャ
  • 新コンフィグAPI
  • 新アップグレードフレームワーク

まだまだ、いろいろと改良点はある(1750も!)みたいですが
今後も機能追加をやっていくようですね。

今回まとめた新機能についてはまた個別に詳しく紹介できればと思っています。

最後に、新しくなったLiferayのトップ画面を紹介しておきます。
すごくカッコ良くなってますね!