Monday, December 5, 2016

Alfresco Community 5.1, 5.2でalfresco-sdkを使ってmavenビルドする際の注意点

こんにちは。大谷です。

先日Alfresco Community 5.1.gでビルド環境を作る際にハマりポイントがあったので、備忘代わりにブログエントリをば。

バージョン番号が違う?


「Alfresco SDK 2.2でJARパッケージの拡張モジュールを作る」などのエントリを参考にしてalfresco-sdkベースのmavenビルド環境を作ったのですが、おなしな状況が発生しました。

pom.xmlの alfresco.version 5.1.g(記事執筆現在の最新のGA版)として、 mvn integration-test -Prun でカスタムモジュールのビルドとテストサーバ起動を行いました。いざ http://localhost:8080/alfresco/ にアクセスしてみると、なんかバージョン番号がおかしい…なんと「Community - 5.2.0 (r128301-b8)」と表示されました。
5.1.gと指定してビルドしてるはずなのに何故か5.2.0...

念のためインストーラインストールの5.1.g(201605-GA)を確認すると「Community - 5.1.0 (r127059-b7)」と表示されるので、mavenビルド環境に何か問題がありそうです(なお、schema番号も10,003と10,001で異なります)。

原因と解決方法は…


Alfrescoのドキュメントをよく読んでみると、原因と解決方法が書いてありました。結論から言うと、alfresco.warのartifactIdが変わったことが原因でした。

Alfresco Documentationのこの記事によれば、Alfresco Community 5.1.e以降ではalfresco.warのartifactIdが旧来の"alfresco"から"alfresco-platform"に変わったようです。pom.xmlのpropertiesタグ内に <alfresco.repo.artifactId>alfresco-platform</alfresco.repo.artifactId> と追記することで対応できます。

    <properties>
        <!-- The following are default values for data location and Alfresco Community version.
             Uncomment if you need to change (Note. current default version for Enterprise edition is 5.0.1)
-->
          <alfresco.version>5.1.g</alfresco.version>
          <alfresco.repo.artifactId>alfresco-platform</alfresco.repo.artifactId>
<!--
          <alfresco.data.location>alf_data_dev</alfresco.data.location> -->

        <!-- This control the root logging level for all apps uncomment and change, defaults to WARN
            <app.log.root.level>WARN</app.log.root.level>
        -->

        <!-- Set the enviroment to use, this controls which properties will be picked in src/test/properties
             for embedded run, defaults to the 'local' environment. See SDK Parent POM for more info.
        <env>local</env>
        -->
    </properties>

pom.xmlの設定を上記のように変更してリビルドすると、以下のように5.1.gの適切なバージョン番号 が表示されるようになるかと思います。

5.1.gの場合の正しいバージョン番号はこれ

5.1系、5.2系でalfresco-sdkを使って開発を進める際にはご注意ください。

Thursday, December 1, 2016

Alfresco勉強会#36 Alfresco 5でカスタムREST APIを作ってみよう

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

2016年11月30日(水)に弊社オフィスで開催された第36回Alfresco勉強会で、「Alfresco 5でカスタムREST APIを作ってみよう」という発表をしました。なお、もう1本の発表は「Google Docs連携の機能のご紹介」というタイトルで、Google Docsを使ってオンライン編集し、保存時にはAlfrescoに直接書き戻す連携方法が紹介されました。

なお、今回一番のトピックは、参加者が14人と過去最高を記録したことかと思います(パチパチ)。参加者が集まるようになって純粋に嬉しい反面、開催スペースが手狭でご不便をおかけしてしまいました。

さて本題ですが、Alfrescoはコア機能のほとんどをREST APIという形で外部から利用可能になっています。Spring Web Scriptsというフレームワークを使って実現しているのですが、そのWeb Scripts自体の簡単な説明と、Web Scriptsを使ったREST APIの追加方法を簡単に紹介しました。



資料でも紹介していますが、以下の3ステップで簡単にREST APIの追加ができます。
  1. 定義ファイル(xml)、ロジック(JavaScriptもしくはJavaで記述)、レスポンス生成用テンプレート(ftl)の3つを作る
  2. 所定の場所に格納する
  3. Web Scriptsをリフレッシュする

想像よりだいぶ簡単にできると思いますので、興味のある方は是非チャレンジしてみてください。
例えば以下のような場合には、必要なロジックを実装したカスタムREST APIを実装するメリットがあると思います。
  • 外部システムと連携したいけど期待される処理が実装されたREST APIが無い
  • 複数のREST APIを順次呼ぶような連携方式になってしまう

というわけで、次回Alfresco勉強会は2017年1月25日(水)になります。興味のある方はconnpass上のイベントから参加登録をお願いします。

また、Alfrescoの基本的な使い方や機能を知りたい、という方向けに「OSSドキュメント管理Alfrescoセミナー :  導入からチームコラボレーションの設定まで」というセミナーを定期開催しています。こちらの方が体系だったAlfrescoの説明を聞けると思いますので、興味がある方は是非お申込みください。

Alfresco勉強会#36 Google Docs連携の機能のご紹介

こんにちは。てらしたです。

昨日11/30(水)に第36回目のAlfresco勉強会が開催されました。今回もいつもと同様に発表は2つあったんですが、もう一方の発表が開発者向けの技術的な話だったので私の方は手抜バランスを取って軽めのテーマにしました。

Alfrescoはアップロードされたコンテンツを編集するための機能を標準でいくつか実装しているんですが、その中からGoogle Docs連携の機能についてご紹介しました。


コンテンツをGoogleドキュメントで編集して更新するこの機能は「Microsoft Officeでの編集」や「オフライン編集」と違ってブラウザで全て完結するので、例えばMS OfficeがインストールされていないクライアントPCでもインターネットに繋がってさえいればOfficeファイルを編集することができたり、クライアントPCのローカルにファイルを置きたくない場合等、使える場面はいろいろあるのではないかと思います。ただ、Googleドキュメントで編集したファイルをダウンロードしてMS Officeで開いたら体裁が微妙にズレてしまうといった問題は(Alfrescoとは関係ないところで)発生してしまう可能性があるので、用途に合わせてどの編集機能を使うか選んでいただくのがよいと思います。

次回のAlfresco勉強会は1月25日(水)です。勉強会の冒頭でAlfrescoの概要についてさらっと紹介する時間を取っているので、Alfresco全く触ったことないという方でもざっくりとしたイメージは掴めるのではないかと思います。ご興味のある方は以下のリンクから参加登録をお願いします。

第37回 Alfresco勉強会

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

また、勉強会ではカスタマイズ開発や設定方法といった技術的な内容が中心になるのですが、それ以前にAlfrescoとはどのようなソフトウェアなのか、どのように活用できるのかといった内容をご紹介するセミナーも開催しております。ご興味がある方は以下のリンクからお申込みいただければと思います。

OSSドキュメント管理Alfrescoセミナー:導入からチームコラボレーションの設定まで

Tuesday, October 25, 2016

Alfresco勉強会#35 Javascript Console Add-onのご紹介

こんにちは。そうまです。

先月9月28日(水)に、弊社オフィスにて第35回Alfresco勉強会が開催され、そこで「Javascript Consoleのご紹介」という内容で発表させていただきました。

「Javascript Console」はAlfresco Shareの管理画面上で、JavaScript APIへアクセスするスクリプトを作成・実行することを可能にする開発者や管理者向けのAdd-onです。
「Javascript Console」Add-onを利用することで、繰り返し行うことのある定型的な操作をスクリプトで自動化したり、フォルダのルールで実行するスクリプトの作成やデバッグをAlfresco Share上で行えるようになります。
また、内蔵のスクリプトエディタにJavaScript APIを考慮したコード補完機能が付いているので、スクリプトの作成を効率的に行うことができます。

使いこなすと非常に便利なAdd-onですので、Alfrescoの開発や管理をしている方は一度試してみてはいかがでしょうか?



次回のAlfresco勉強会は11月30日(水)です。ここ最近の勉強会では本題に入る前にAlfrescoの概要についてさらっと紹介するようにしているので、Alfresco全く触ったことないという方でもざっくりとしたイメージは掴めるのではないかと思います。ご興味のある方は以下のリンクから参加登録をお願いします。

第36回 Alfresco勉強会

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

Monday, October 3, 2016

Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ

こんにちは。てらしたです。

先週9/28(水)に第35回Alfresco勉強会が開催されました。今回は個人的にやってみたかったカスタマイズとして、AlfrescoのアクティビティフィードをSlackに流すというのを試してみたのでその方法をご紹介しました。Slackに送れることを確認することが第一の目的だったので送る内容のフォーマット等は改善点ということにして後回しにしています。実用化するにはまだまだ改良が必要ですが、こうすれば送れるということがわかっただけでも意味があったと思います。サンプルのソースコードもGithubに置いてあるので興味がある方はぜひ手元で試してみていただければと思います。


次回のAlfresco勉強会は11月30日(水)です。ここ最近の勉強会では本題に入る前にAlfrescoの概要についてさらっと紹介するようにしているので、Alfresco全く触ったことないという方でもざっくりとしたイメージは掴めるのではないかと思います。ご興味のある方は以下のリンクから参加登録をお願いします。

第36回 Alfresco勉強会

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

Wednesday, August 3, 2016

Alfresco勉強会#34 Alfrescoをカスタマイズする時に知っておくと便利なこと

こんにちは。てらしたです。黄色チームでまったりやってます。課金はまだしてません。

さて、1週間も経ってしまいましたが先週7/27(水)に第34回Alfresco勉強会が開催されました。

今回はAlfrescoを初めてカスタマイズする人にとって取っ掛かりになればいいなと思い、Alfrescoをカスタマイズする時に知っておくと便利なこと、というタイトルで発表しました。詳しい内容は以下の資料を見ていただればと思いますが、Alfrescoの大まかな構成と個人的にオススメしたいソースコードの確認方法についてご紹介しました。


Eclipseを使いこなせればもっと簡単にできること(特にgrepかける方法のあたり)がありそうな気がしているので、こういう方法もあると知っている方がいればぜひ勉強会で教えていただけるとうれしいです。

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

第35回 Alfresco勉強会

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

Monday, August 1, 2016

Alfresco勉強会#34でAlfresco5のプレビュー機能とコンテンツ変換機能について発表しました

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

 先日Alfresco勉強会でAlfresco5のファイルプレビュー機能とその裏で使われるコンテンツ変換機能について発表しました。



プレビュー機能は便利だけどプレビューがうまく働かない場合がそれなりにあり、その場合はバックエンドで動いているコンテンツ変換の設定を見直すことでプレビューできるようになりますよ、というような話の流れでした。主な発表内容は以下のとおりです。
  • ファイルプレビュー機能の概要とデモ
  • うまくプレビューできない例
  • コンテンツ変換機能の概要
  • 利用可能なコンテンツ変換の確認方法
  • コンテンツ変換の設定の在り処と設定変更方法
  • コンテンツ変換の設定変更によるプレビュー機能の改善

また、発表後の質問では、プレビューのためのコンテンツ変換(最終的にPDFに変換します)が重なるとサーバの負荷が高まることや、別途PDFが生成されることによるストレージ容量への影響などの話が出ました。
なお、資料の最後の方のCSV=>PDFへのコンテンツ変換を設定変更してCSVのプレビュー文字化けを回避する方法については、5.1.gではうまく動作しませんでした(5.0.xではうまくいってたのですが…)。特定のテキストファイルをPDFに変換する際にエラーを吐いてしまうようです。

最後に次回Alfresco勉強会のお知らせですが、次回は2016年9月28日(水)に開催される予定です。興味のある方は第35回Alfresco勉強会のページから参加申し込みをお願いします。

Thursday, July 21, 2016

NemakiWareでEFKスタックを立てました

こんにちは。linzhixingです。

文書管理製品NemakiWareも、開発だけでなく保守運用フェーズが増えてきたため、ログの収集・分析にEFKスタック(今更感)を立ててみました。とくにクラウドサービスとしてNemakiWareを提供する場合、CMIS規格に沿ってマルチリポジトリ=マルチテナントのように扱うケースがあるので、ログをリポジトリごと(顧客ごと)に分けて即時に分析したいというニーズがあります。

EFKスタック(ElasticSearch, fluentd, Kibana)の組み合わせで、
- fluentd によりNemakiWareからログをリアルタイムでElasticSearchに送信
- ElasticSearchに登録されたログをKibanaにより様々な切り口でビジュアライズ
します。

@Ubuntu14.04
NemakiWare 2.4(?), td-agent 0.12.20,

@ログ取得用の環境
ElasticSearch 2.3.4, Kibana 4.5.2
を使用します。

(NemakiWareの現在のバージョンは2.3.15で、ここではログ出力内容をエンハンスしたバージョンを使用していますが、この記事の内容には影響ありません。エンハンスは次期リリースに含められる予定です)

細かい設定はいくらでもできますが、世の中に解説記事は溢れているので、
ここではひとまず最短でハマらずにログ収集・分析ができること、を目指します。

NemakiWare 

NemakiWareをUbuntuにインストールします。
https://github.com/aegif/NemakiWare/releases

こんな感じのログが出るようになる予定です。
{"@timestamp":"2016-07-15T08:49:58.414+09:00","@version":1,"thread_name":"http-nio-8080-exec-12","level":"INFO","message":{"uuid":"56e06eea-e70c-4d4f-bb3e-ad60f955cbcc","repo":"bedroom","user":"admin","when":"completed","time":12519,"method":"getChildren","input":{"folderId":"c0a29c9e5a4f28f3117cc6edada56c39"},"output":{"num":100,"hasMoreItems":false,"totalNum":100}}}

リポジトリやユーザだけでなく、処理にかかった時間やメソッドの入出力値も取ることができます。

fluentd

fluentd自体はRubyのgemとして提供されていますが、特にこだわりがなければRubyインタプリタ等も同梱されていてapt-getやyumでインストールできるtd-agentを使います。

# td-agentのインストール
http://docs.fluentd.org/articles/install-by-deb
curl -L https://td-toolbelt.herokuapp.com/sh/install-ubuntu-trusty-td-agent2.sh | sh

# fluent-plugin-elasticsearchのインストール
(fluentdにはfluent-gemでインストールできるたくさんのプラグインがあります)
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

# NemakiWareからElasticSearchへの転送設定
/etc/td-agent/td-agent.confを編集します。
詳しくは説明しませんが、
- <source>でNemakiWareのログをtailで監視し、tagを付けて<match>に渡す
  type jsonにより、ログの持つタイムスタンプやログレベルといった情報がjson形式で解釈されます 。
  ログメッセージ自体もNemakiWareによりjson形式で出力されている部分も含めて、全体がjsonになります。
  その結果、ElasticSearchやKibanaで、jsonのフィールド(message.input.folderId 等)構造にそって、そのまま検索することができます。
- tagが一致する<match>が実行される
  さきほどインストールしたfluent-plugin-elasticsearchプラグインが利用されています。
  Kibanaともともと相性がよいLogstash形式を指定しておきます。

<source>
  type tail
  path /opt/NemakiWare/apache-tomcat-8.0.28/logs/nemakicore.log
  pos_file /tmp/fluentd_nemaki_core_pos
  format json
  tag nemaki.core
</source>

<match nemaki.core>
  type elasticsearch
  logstash_format true
  logstash_prefix logstash
  # ElasticSearchのホストに書き換えてください
  host xxx.xxx.xxx.xxx
  port 9200
  type_name nemaki-core-log
</match>

#td-agentを再起動して設定を反映
sudo service td-agent restart

ElasticSearch

ElasticSearchとKibanaは、ログの収集・分析用ですので、NemakiWare + td-agentとは別インスタンスに立てます。
 
適当にインストールしてください。(適当)
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html 
http://qiita.com/hana_moto/items/762aae6b8f2a93d176d2
http://qiita.com/inouet/items/6276c5a08c4fe5eecdb5

localhost:9200にアクセスして、jsonのメッセージが返ってくれば正常に起動しています。

UIとしてHEADをインストールしてもよいかもしれません。
sudo /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

# 設定
- 外部への公開
デフォルトではElasticSearchのホストはlocalhostにバインドされており、そのままでは外部から接続できません。
/etc/elasticsearch/elasticsearch.ymlの"network.host"で、IPアドレス外部への公開先を指定できます。
同じインスタンス上にあるKibanaだけを外部公開する場合はlocalhostのみで構いませんが、ElasticSearchもUIで見たいとか、Kibanaが更に別インスタンスである場合には、外部に公開するよう設定します。
ここではElasticSearchの中身を外から覗きたかったため、簡単のため0.0.0.0としています。

-マッピング
ログの項目(タイムスタンプなど)のインデクスへのマッピングとして、項目の値型やアナライズをするかどうか等は、事前に決めておくこともできますし、マッピングを変更するにはインデクスの作り直しが必要になるのでそのほうが望ましい場合もありますが、ここでは何もマッピング情報を定義せず、ElasticSearchに最初に送られたログデータにより自動的にマッピング情報を認識してもらいます。

幸い、Logstash形式を指定しているので、ログのインデクスはデフォルトでは日次で新しく立てられています。ログの内容が変わったりマッピングを変更したい場合は、次の日のインデクスから変更を適用することができます。

新しいマッピングフィールドが追加される分にはインデクスの再作成は必要ありません。
NemakiWareが出力するjson形式のログは、メソッドの入出力内容を細かく制御できるので、今までログに出していなかった引数をあらたに出すようにした場合、とくに何もしなくても、ElasticSearchやKibanaでそのフィールドにより検索することができます。

Kibana

適当にインストールしてください。(適当)
公式 https://www.elastic.co/jp/downloads/kibana からwgetして展開するか、
リポジトリを登録してパッケージからインストールすることができます。
http://qiita.com/windows222/items/57423a420d57399cbc3e#kibana

/opt/kibana/config/kibana.ymlのelasticsearch.urlに、ElasticSearchのURLを指定します。ここでは同一インスタンスになります。

sh ./opt/kibana/bin/kibana もしくは自動起動の設定をして、Kibanaを起動します。
http://localhost:5601にアクセスしてKibanaのぺージが表示されれば、正常起動しています。
 
# Out of Memory対策
Kibanaを素のままで動かしていると、そのうちOut of Memoryエラーで、そのインスタンス全体がにっちもさっちも動かなくなります。(メモリが潤沢にある場合は大丈夫なのかもしれませんが、2GB程度だと死にます)
原因は
http://mnatsu31.hatenablog.com/entry/2015/12/14/154427

Node.jsのv8エンジンがメモリを無制限に消費するためだそうです。
起動スクリプト本体である/opt/kibana/bin/kibanaファイルを編集して、Node.jsに対してオプションを外から渡せるようにしてあげましょう。

/opt/kibana/bin/kibanaファイル
-exec "${NODE}" "${DIR}/src/cli" ${@}
+exec "${NODE}" $NODE_OPTIONS "${DIR}/src/cli" ${@}
 
と編集した上で、
 
NODE_OPTIONS="--max-old-space-size=250" /opt/kibana/bin/kibana
により起動します。
 
# ElasticSearchからデータを取得していることの確認
画面上部ナビゲーションバーのDiscoverで、タイムスタンプごとの単純なCount数ヒストグラムと、そのソースになっているjsonログデータが確認できます。
NemakiWare固有のログのjsonフィールドも認識されています。
  
 # Kibanaで表示するグラフの設定
Kibanaには、ElasticSearchに保存されたログデータを検索して、グラフとして表示する機能が充実しています。
画面上部ナビゲーションバーのVisualizeから、作成するグラフの種類を選びます。

特にsaved searchを作成していないので、From a new searchを選択します。

左カラムで、X軸(値を集計するための切り口=バケット)とY軸(集計された値=メトリクス。CountやAverage等)を指定します。


ここでは単純に、Y軸にはログの件数(Count)を指定しつつ、X軸にはタイムスタンプに加えて各リポジトリごとにY軸の値を分解するようSplit Linesをサブバケットとして追加してあります。
グラフ右側に、アクセスのあったリポジトリが数種類表示されており、折れ線グラフもリポジトリごとに色分けされています。

X軸を工夫してCMISメソッドごとの切り口を追加し、Y軸を工夫してログ件数のかわりに平均処理時間をグラフにする、ということもできるようになります。


今回はここまでです。
主にKibanaによる可視化をゴールとして最短で進みましたが、せっかくfluentdを使っているので、保守運用のうえで必要になる各種ミドルウェアからのログも集約し、アプリ側のログとKibana上で突き合わせられるようにしたいところです。
機会があれば、また。

まとめ

- EFKスタックをインストールした。
- 次期NemakiWareの新しいjson形式ログにより、リアルタイムで様々な切り口によるログ分析が可能になった。ノーモア目検。

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のトップ画面を紹介しておきます。
すごくカッコ良くなってますね!


Wednesday, April 6, 2016

Alfresco Community Edition 5.1をインストールしてみよう

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

先日、埼玉県幸手市にある権現堂堤というところに桜と菜の花を見に行きました。以前から一度は行きたいと思っていたのですが、実際に目にしたピンクと黄色の鮮やかなコントラストは想像以上でした。ちなみに権現堂堤は秋になるとたくさんの曼珠沙華が咲き誇り、こちらも壮観です。


さて、ここからが本題なのですが、今回はAlfresco Community Edition 5.1のインストール方法について紹介しようと思います。AlfrescoはWindows / Mac / Linux向けにそれぞれインストーラを提供しているので、インストーラをクリックするだけでとても簡単にセットアップすることができます。

なお、この記事で使用しているAlfrescoのバージョンはAlfresco Community Edition 201602 GAというものです。 記事執筆時点でのコミュニティ版の最新版となります。なお、このバージョンは内部的には5.1.eとナンバリングされているため、以後5.1.e(5.1系)と呼ぶことにします。

これまで4.2.xや5.0.xと呼ばれていたバージョン番号が何故5.1から変わってしまったのか、正確なところは分かりませんが、5.1からalfresco(Alfrescoのコアリポジトリを提供するアプリケーション)とshare(AlfrescoのUIを提供するアプリケーション)のソフトウェアライフサイクルが独立したことに起因するのではないかと想像しています。

まずはインストーラのダウンロードから


というわけで、まずはインストーラをダウンロードします。目的のインストーラはCommunity file list 201602-GAからダウンロードできます。OSに応じたものをダウンロードしてください。このサイトではインストーラの他に、手動インストール用のモジュールなどもダウンロードできます。

インストーラを実行しよう


早速インストーラをキックしましょう。64bit版Windowsであればalfresco-community-installer-201602-win-x64.exeを実行します。以下、Windows版のインストーラに沿って見ていきます。

まずは言語選択画面が表示されるので、インストーラの表示言語を選択して「OK」をクリックします。ここで選択するのはあくまでもインストーラの表示言語です。インストールされるAlfrescoの言語ではありません(ここでの選択に関わらず、Alfrescoの対応する全ての言語リソースがインストールされます)。


続いて「次へ」をクリックします。



次に、インストールの種類を選択します。ここでは「詳細設定」を選択して「次へ」をクリックします。


必要なコンポーネントを選択して「次へ」をクリックします。各項目の内容は以下のとおりです。
  • Java : Java SE Runtime Environment 1.8。Alfrescoの起動に必要だが既にインストールされている場合は不要。
  • PostgreSQL : PostfreSQL 9.4.4。Alfrescoが利用するRDBMS。別にインストールされたRDBMSも利用可能だが、これを選択しておくとAlfresco専用にRDBMSを用意する上に構成も自動的に行われる。
  • LibreOffice : LibreOffice 4.4.5。オフィス系文書のコンテンツ変換やテキスト抽出に利用される。ひとまず選択したままでよい。
  • Solr1 : Apache Solr 1。基本的にはSolr 4を使うべきなので選択しないままでOK。
  • Solr4 : Apache Solr 4。検索に利用される。別途検索エンジンを用意しないのであれば選択したままにする。
  • Alfresco Office Services : SharePoint Protocol Support機能。AlfrescoがMicrosoft SharePointのフリをして、Alfresco上にあるオフィス系文書を直接MS Officeで開いたりAlfrescoに書き戻したりすることができる。不要であればチェックを外す。
  • Web Quick Start : Webコンテンツ管理モジュール。必要ならチェックを付ける。
  • Googleドキュメントの統合 : Google Docs連携モジュール。Alfresco上にあるコンテンツをGoogle Docsで開いたりAlfrescoに書き戻したりすることができる。不要であればチェックを外す。


次に、インストールフォルダを選択して「次へ」をクリックします。



データベースのポート番号を指定します。PostgreSQLを選択していた場合はデフォルトの5432番でOKです。



Tomcatのポート設定を行います。Tomcatの前面にApache等のWebサーバを立てる場合はそのドメイン名を入力します。Tomcatの各ポートはデフォルトのままでよいと思いますが、Tomcatで直接80番にホストしたいとか、他のTomcatサーバと競合する等の場合はポート番号を変更します。日本語表示にするとAJPポートが下に切れてしまうのはAlfrescoの伝統です。というのは冗談で、デフォルトで8009番と入力されていて、もちろん変更することも可能です。



続いて、LibreOfficeのポート番号を指定します。他のサービスとポートが競合しない限り、デフォルト設定のままでよいと思います。


次に、FTPポートを指定します。デフォルトでAlfrescoサーバにFTPアクセスすることができ、そのポート番号を指定します。このFTPサーバ機能は、スキャナ等との連携や、初期データ登録、Windows Explorerを使ったAlfrescoへのアクセスなどに利用することができます。


管理者アカウントのパスワードを入力します。デフォルトの管理者ユーザ名はadminです名前です。



最後にWindowsサービスとして登録する際のスタートアップの種類を選択します。自動起動にしたい場合は「自動」を選択します。



以上で設定は終わりです。「次へ」をクリックするとインストールが始まります。



インストールが終わると以下のようなダイアログが表示されます。「Alfresco Communityを起動する」にチェックが入っていると、「終了」をクリックした後にAlfrescoサービスが開始されます。なお、Windowsの場合はAlfrescoは以下の2サービスからなっています。
  • alfrescoPostgreSQL : PostgreSQL(RDBMS)のサービス 
  • alfrescoTomcat : AlfrescoをホストするTomcatのサービス

Alfrescoにアクセスしてみよう


Alfrescoが起動したら、ブラウザで http://localhost:8080/share/ にアクセスしてみましょう。以下のダイアログが表示されたら、ユーザー名adminと先ほど設定したパスワードを入力します。



正常にインストールされていれば、ログインに成功して以下のような画面が表示されるはずです。



これでAlfrescoを利用する準備が整いました。

うまく動かない場合は…


うまく起動しない場合は以下の内容を確認してみてください。
  1. Alfresco起動設定の確認。Windowsの場合は <alfresco_dir>/tomcat/bin/alfrescoTomcatw.exe でJVMオプション等を確認/設定することができます。



  1.  ログの確認。以下のようなログがあります。
    • <alfresco_dir>/alfresco.log : Alfrescoアプリケーション(コアリポジトリ)ログ
    • <alfresco_dir>/share.log : Shareアプリケーション(UIアプリ)ログ
    • <alfresco_dir>/solr.log : Solrアプリケーション(検索エンジン)ログ
    • <alfresco_dir>/tomcat/logs/alfrescotomcat-stderr.log : Tomcat標準エラー出力ログ
    • <alfresco_dir>/tomcat/logs/alfrescotomcat-stdout.log : Tomcat標準出力ログ
    • <alfresco_dir>/tomcat/logs/catalina.log : Tomcatログ
    • <alfresco_dir>/tomcat/logs/localhost_access_log.txt : アクセスログ

まとめ


今回はAlfresco Community Edition 5.1のインストーラインストールを紹介しました。インストーラを使うと必要なモジュールのインストールと設定がとても簡単にできます。実際に利用する環境を構築するためには、要件に合わせた更なる設定とパフォーマンスチューニング等が必要になりますが、お試しで軽く使ってみようという程度であればインストーラでインストールしたもので十分かと思います。是非みなさんも試してみてください。

なお、Alfresco Community Edition 5.1の新機能についてはAlfresco勉強会での発表がありましたのでこちらの記事が参考になります。後ほどこのブログでも紹介したいと思います。


Thursday, March 31, 2016

GitLab にプッシュすると差分が自社サイトに FTP されるようにしてみた

こんにちは、すぎもとです。

普段は別のブログに書いていますが、今回は社内のシステム環境の話だったのでこちらにポストしてみます。

Aegif のコーポレートサイトは静的サイトで構築されています。最近リニューアルしました。ところが記事の更新などがあったとき、マーケティングを担当にしている同僚が手で涙ぐましい修正をしていたことが判明しまして、JavaScript で一部の作業を自動化をすることにしたんですね。

そうやって、やはり複数人が係わるようになると、編集→更新の流れをもう少し楽にしたいなという話が出てきました。まずは社内の Git リポジトリ環境(GitLab)にサイトのソースを置くことに。でも、ここまでやったら、プッシュしたら自動で本サイトに反映したいということになりますよね。

Web サイトが置いてあるサーバは Git が使えないので、GitLab 側からFTPすることにしました。やったことは以下の通りです。

GitLab のあるサーバは Ubuntu 14.04 です。まずは git-ftp を導入します。デフォルトでやってみたら最新が落ちてこなかったので PPA を追加して、apt-getします。

# add-apt-repository ppa:resmo/git-ftp
# apt-get update
# apt-get install git-ftp

つぎに GitLab が管理している Git リポジトリにカスタムのサーバサイドフックを作成し、プッシュされたときに FTP されるように設定します。

GitLab の管理するリポジトリはサーバのローカルパスで言うと


/var/opt/gitlab/git-data/repositories/aegif/CorporateSite.git 

みたいな場所に保管されます。このリポジトリ直下に

custom_hooks 

ディレクトリを作成し、そのなかに post-receiveという名前でスクリプトを作成します。スクリプトは以下のような記述にしました。

#!/bin/bash 
cd /path/to/tempdir/CorporateSite 
git --git-dir=.git pull 
git --git-dir=.git ftp push --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir

このスクリプトのオーナーは git:git にしておき、実行権限を付けておきます(GitLabがキックするので)。なお Git コマンドを発行する行には上述の通り、 --git-dir=.git がないと怒られます。

注意点としては、普通の Git リポジトリなら custom_hooks 内で直接 git ftp できてしまうんですが、 GitLab が使う Git リポジトリは bare リポジトリなので、いったんサーバのローカル環境でで別の場所に取得してしてそこから FTP します。

ですので、サーバローカル内で手動 git clone を /path/to/tempdir/CorporateSite にしておきます。さらに FTP サーバ側に差分を送ることが出来るように、初回は手動で git ftp init をしてファイル群をアップロードしておきます。

以後はプッシュされると差分だけが上がるようになります。今回はステージング環境は存在しなかったので、master から直接本番環境にあげてしまっています。 けっこう時間がかかることが予想できたので nohupで起動させて放置しておきました。

nohup git ftp init --branch master --user XXXX --passwd xxxxx ftp://xxxx.jp:21/pathtodir > /path/to/git-ftp-log&

初回アップロードは1時間くらいかかりました。その後、試しにテストファイルを手もとからプッシュして、自社サイトの更新を確認しました。

こう書くとけっこう簡単に作業したか見えますが、思ったより時間がかかってしまいました。というのも git-ftp で出てくる記事が古いんですよね。おかげで、余計なライブラリとか入れちゃったり、bare リポジトリの存在をすっかり忘れて、アップロードできないと悩んだりして無駄に時間を費やしてしまいましたよ。

今こそほとんどワンライナーで出来ちゃいますが、昔はそこまで簡単じゃなかったようですね。イマドキの Web サーバはサーバのほうに Git が入ってたりしますし、そもそもサイト自体も動的なことがおおかったりするわけで、 FTP で更新するというので情報が少ないのも仕方ないですね。

今回、この試みで、うちの会社では技術者以外の同僚にも Git をつかってもらうことになりました。とりあえず GUI で使ってもらうべきだろうと SourceTree を入れてもらいましたが、 Mac 版と Windows 版でだいぶ構成が違ったり(更新担当者はどちらも使います)無償版でも無償ライセンスの登録が必要になっていたりと導入自体にハードルがあってなかなか大変。ひとまずはブランチなどを使わずに、「うっかり壊しても技術部門に相談してくれればもとに戻せるリポジトリ」みたいな扱いで master 直接プッシュでまずは運用をはじめてみました。

この非技術者による Git 運用についてはまた軌道に乗ったらお伝えできたらと思います。

Friday, March 25, 2016

Alfresco勉強会#32 Alfresco Bulk Import toolのご紹介


こんにちは。ご無沙汰しております、Aegifのそうまです。

先日3月23日(水)に、弊社オフィスにて第32回Alfresco勉強会が開催され、そこで「Bulk Import toolのご紹介」という内容で発表させていただきました。

「Bulk Import tool」は名前の通り、コンテンツをまとめてAlfrescoへインポートするツールで、以前はAdd onとして提供されていたのですが、現在(Alfresco 4.0以降)はAlfrescoの配布物に含まれておりインストールした直後から使えます。

他のインポート手段に比べ比較的高速で、ファイルの複数バージョンを設定したり、メタデータを与えることが出来たりと手軽な割に便利なツールなのですが、Alfrescoを利用されていても意外と知らない方が多いように感じていましたので、今回紹介させていただきました。

Alfrescoを使いはじめたり利用をしていく上で、これまで別の場所に蓄積されたコンテンツをAlfrescoへインポートする機会は多いのではないかと思います。その際に利用可能なインポートツールの1つとして参考にしていただけると幸いです。




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

第33回Alfresco勉強会

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

Alfresco勉強会#32 Alfresco Community 5.1.eの機能紹介

こんにちは。てらしたです。ご無沙汰しております。しばらく書いていなかった上に今回は他のメンバーがAlfresco勉強会で発表した内容の紹介という手抜きっぷりですがご容赦ください・・・。

先日3月23日(水)に第32回のAlfresco勉強会が開催されました。発表は2つあり、1つは「AlfrescoのBulk Import toolのご紹介」(詳細はこちら)、もう1つはここでご紹介する「Alfresco Community 5.1.eの機能紹介」でした。

5.1.eで新たに追加された機能としてShare UIからのモデル定義とスマートフォルダの機能を紹介してもらったんですが、個人的にはスマートフォルダで助かる場面は色々あるんじゃないかと思いました。Alfrescoにすでに入っているコンテンツを何らかの属性をキーに引っ張ってきて横断的に見たいってケースはそれなりにあるんじゃないかと思うんですよね。もともとWorkdeskというAlfrescoとは独立した別のアプリケーションを使えば実現できた機能ではあるんですが、Alfrescoの標準機能として使えるようになったのは大きいと思います(Workdeskは開発終了したみたいですし)。

Share UIからのモデル定義も欲しかった人にはうれしい機能だと思うので、スマートフォルダも含めて詳細については以下の発表資料をご覧いただければと思います。


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

第33回Alfresco勉強会

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

Thursday, January 28, 2016

Alfresco勉強会#31でAlfrescoにウイルススキャンを実装する話をしました

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

先日、第31回Alfresco勉強会が開催されました。今回はいつもより参加者が少なかったこともあり、具体的なAlfrescoの利用方法や便利機能、設定項目など、様々な内容についてディスカッションが行われました。

さて、今回の発表ですが、私が、「Alfresco 5.0にウイルススキャン機能を実装してみる」というタイトルでAlfrescoにアップロードされたコンテンツをウイルススキャンするようなカスタマイズについて発表しました。



Alfresco自体はウイルススキャンのエンジンを持っていないため、ファイルアップロードのタイミングで外部のウイルススキャンを利用する必要があるのですが、 それらを実現するために必要な仕組みの説明と実際のデモをご覧いただきました。当日のスライドを見ると分かるのですが、ウイルススキャンを実装するために以下の仕組みを利用しました。
  • Policy(とBehaviour)
  • Transaction Listener
  • Action
  • RuntimeExec

サンプルコードはBitbucketで公開しておりますので、是非お試しください。