Tuesday, July 1, 2014

LiferayのDocuments and Mediaポートレットでウイルススキャンを行う

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

先日、社員旅行で房総半島を訪れました。弊社の社員旅行は宿/夕食以外全て自由行動というゆるい感じなので、うちはマザー牧場や鴨川シーワールドを見て回りました。

マザー牧場のモルちゃん。ダッコできます。かわええええ!

さらに、今年の社員旅行は12歳未満お断りな宿に子連れで泊まれるという何ともありがたい企画でして(くわしくはこちら)、まあ子連れじゃ食べられないような料理をいただいたりしたわけです。ちなみに、料金は自分+同伴者1人+自分の子供分は全て会社が負担してくれるので、重ね重ねとてもありがたいです。

子連れではなかなか食べられないコース料理。美味しくいただきました。

もちろん子供向けにも本気料理が…。味見しましたが、とても美味しかった。

夜には蛍とウミホタルを見に行くツアーがあったので参加しましたが、臆病なうちの娘(3歳)はずっと号泣しておりました。まあ暗いので仕方ないですね…。

こんな感じで今年も社員旅行を楽しんだわけですが、聞くところによると来年は弊社10周年とのことで、もうひと頑張りしてくれるとのこと。今から楽しみで仕方ありません。海外期待しちゃっていいのかな…

さて、前置きが長くなってしまいましたが、今回はLiferayのDocuments and Mediaポートレットでウイルススキャンを行う方法についてお話ししたいと思います。アップロードされたファイルのウイルスチェックというのはよく伺う要望なのですが、Liferayはその仕組みをデフォルトで備えています。具体的には、ウイルススキャンツールを別途導入し、そのツールとの連携設定を施すだけで実現できます。以下ではその設定手順を説明します。


まずはClam AntiVirusのインストールから


まず初めに、ウイルスチェックツールClam AntiVirusをインストールします。Clam AntiVirusであればLiferayがデフォルトで対応しており、簡単な設定だけで連携することができます。

インストール方法はOSによって異なるのですが、Windowsであればインストーラでインストールし、CentOSであればyumにRPMforgeリポジトリを追加してyum installで導入します。必要に応じて、clamscanコマンドをパス無しで実行できるようにパスを通してください。


Liferayでウイルススキャンの設定を行う


続いて、Liferay側でClam AntiVirusとの連携設定を行います。portal-ext.propertiesに以下の2行を追加します。

dl.store.antivirus.enabled=true
dl.store.antivirus.impl=com.liferay.portlet.documentlibrary.antivirus.ClamAntivirusScannerImpl

設定はこれだけ、とても簡単です。設定が終わったらLiferayを再起動します。


動作確認してみよう


設定が終わったら早速動作確認してみましょう。事前準備として、クライアントPCのリアルタイムスキャンを切っておくか、そのようなツールが入っていないPCをクライアントとして利用しましょう。クライアントPCにリアルタイムスキャンが設定されていると、テスト用のウイルスファイルが自動除去されてしまってテストができないからです。

テスト用のウイルスファイルをこちらからダウンロードし、このファイルをLiferayのDocuments and Mediaポートレットにアップロードします。正しく動作していると、以下の2点が確認できるはずです。
  • 画面に「Documents and Media is temporarily unavailable」と表示され、ファイルアップロードに失敗します。
  • ログファイル(catalina.out)に「com.liferay.portlet.documentlibrary.antivirus.AntivirusScannerException: Virus detected in...」と出力されます。ウイルスが検出されてExceptionが投げられていることが分かります。
もしファイルアップロードに成功してログに何も出力されない場合は、clamscanというコマンドを実行できるか否か、設定が正しく追記されているか等を確認してください。


いかがでしょうか。Liferayのウイルススキャン機能が比較的簡単に設定できることがお分かり頂けましたでしょうか。是非みなさまもお試しいただければと思います。







Friday, June 27, 2014

第22回Alfresco勉強会が開催されました

こんにちは。寺下です。この1年くらい体重が右肩上がりだったので何か手を打たないとこのままズルズルいってしまうと危機感を抱き、先々週くらいから弁当を持参するようにしています。ランチで外食に行ってしまうと、ごはんおかわり無料とか麺大盛り無料とかいう誘惑に抗い難く、ついつい食べ過ぎてしまうんですよね。そんなわけで弁当生活を始めたんですが、初めてなので当然弁当スキルなどなく、まずはできることからということで今のところ冷凍食品に頼っています。ただ、やってから気付いたんですがこの冷凍食品が普通においしい。僕の肥えてない舌では焼売とか店で出てきても気付けないんじゃないかと思われるレベル。このまま冷凍食品に頼る日がしばらく続きそうです。

さて、ここから本題ですが6/25(水)に22回目のAlfresco勉強会が開催されました。
今回もいつもどおり発表テーマを2つ用意してあったのですが、まだAlfrescoをインストールしただけであまりちゃんと触っていないという参加者の方が多かったため、発表は1つだけにして残りを質疑応答にするという前回と同じ形式で行いました。また、最後に少し時間があったのでAlfrescoの新しいWebクライアントであるWorkdeskを画面を見ながら簡単にご紹介させていただきました。今回見送った2つ目の発表は「Workdeskの検索テンプレートの作り方」だったのですが、これについては次回の勉強会で発表したいと思います。

今回発表した方の内容は、前回の予告どおりAlfrescoのマルチテナントについてでした。以下、簡単にご紹介します。詳しい内容は発表資料を見ていただければと思います。

Alfrescoのマルチテナント機能


発表資料はこちら

発表者は戸谷で、テナントの作り方やテナントを指定してログインする方法といったマルチテナント機能の使い方から始まり、各テナントのコンテンツの保存場所を分ける方法、カスタムモデルやWebScriptをテナント毎に管理することができるか、等の内容について紹介してくれました。最後にマルチテナントでは使えない機能の説明もあり、この機能を使用するかどうか検討する際には参考になるのではないかと思います。

次回の勉強会は8月27日(水)に開催予定です。たくさんの方のご参加をお待ちしております。参加申し込みはこちらからお願いします。

Thursday, June 19, 2014

Activiti BPM Platformことはじめ4(レポートを追加してみよう)

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

今回はActiviti BPM Platformのレポート機能について紹介します。Activitiは簡易的なレポーティング機能を備えており、シンプルなレポートであればActivitiのみで完結して出力することができます。以下では新しいレポートを作成してみたいと思います。なお、Activitiのインストール、利用方法については以下の記事を参考にしてください。

Activiti BPM Platformことはじめ(インストール方法とか)
Activiti BPM Platformことはじめ2(Activiti Explorerの使い方とか)
Activiti BPM Platformことはじめ3(Activiti Modelerの使い方)


レポートの仕組み


Activitiにおけるレポートの実体はプロセスです。具体的には、レポートのデータを生成するスクリプトを実行するプロセスということになります。レポートを実行すると、プロセス開始時のフォームでパラメータを入力し、それを受けてスクリプトが実行されて結果が出力されます。


カスタムレポートを追加してみよう


というわけで、早速カスタムレポートを追加してみましょう。レポート定義=プロセス定義なので、Activiti ModelerやEclipse Designer(Eclipseのプラグインですね)などで定義を作成してActivitiにデプロイするという流れになります。ここでは、ユーザごとのワークフロー開始数を表示するレポートを作ってみたいと思います。なお、今回はActiviti 5.15.1を使っています。

1. 新規モデルを追加する

Activiti Explorerにユーザkermitでログインし、「Processes」->「Model workspace」に移動して「New Model」をクリックします。Nameに「Sample Model」と入力し、「Activiti Modeler」を選択して「Craete
」をクリックします。



2. レポート定義(プロセス定義)を作成する

自動的にActiviti Modelerの画面に遷移するので、まずはプロセスの属性を設定します。ここで重要なのは、Target namespaceをactiviti-reportとすることです。Activitiはこの属性を見てレポート用のプロセス定義であることを識別します。
  • Name : Sample Report
  • Target namespace : activiti-report


続いて、Start event、Script task、End eventを以下のように接続、設定します。
  • Start event
    • Id : start
    • Name : start
    • Form properties : 後述
  • Script task
    • Id : createReport
    • Name : createReport
    • Script format : js
    • Script : 後述
  • End event
    • Id : end
    • Name : end


Start eventのForm properties属性については、Start eventの属性設定欄のForm propertiesをクリックし、以下の内容を入力して「Ok」をクリックします。Start eventのフォーム設定は、一般的にはワークフロー開始時の情報入力のために使われますが、レポートにおいてはレポート出力に必要なパラメータを指定するために使われます。
  • Id : chartType
  • Name : Chart Name
  • Type : enum
  • Required : Yes
  • 選択肢
    • Id : pieChart, Name : Pie chart
    • Id : barChart, Name : Bar chart



Script taskのScriptも同様に属性設定欄のScriptをクリックし、以下のスクリプトを入力して「Ok」をクリックします。

importPackage(java.sql);
importPackage(java.lang);
importPackage(org.activiti.explorer.reporting);

var reportData = new ReportData();
var dataset = reportData.newDataset(); 
dataset.type = execution.getVariable("chartType");
dataset.description = "Test Report ";

var result = ReportingUtil.executeSelectSqlQuery("SELECT START_USER_ID_, count(ID_) FROM ACT_HI_PROCINST where START_USER_ID_ is not null group by START_USER_ID_");
while (result.next()) {
    dataset.add(result.getString(1), result.getLong(2)); 
}
execution.setVariable("reportData", reportData.toBytes());



最後に、画面左上のSaveアイコンをクリックし、表示された保存ダイアログで「Save」をクリックします。保存が完了したら画面右上の×をクリックしてActiviti Modelerを終了します。

コードについて補足すると、実行変数reportDataにReportData型のオブジェクトを格納することで、このオブジェクトを使ったレポート表示が行われます。また、ReportingUtil#executeSelectSqlQuery()を使うとDBに対して直接クエリを発行することができるので、レポート内容の取得によく利用されます。

3. レポート定義をデプロイする

自動的にActiviti Explorerの「Processes」->「Model workspace」に戻るので、先ほど作ったSample Modelを選択して画面右上の「Deploy」を実行します。



デプロイに成功すると、「Reports」->「Generate reports」に「Sample Report」が表示されるようになります。



動作確認してみよう


では、動作確認してみましょう。Chart typeを選択して「Generate report」をクリックすると、指定した形式でユーザ毎のプロセス数が表示されるはずです。



どうでしょうか。単純なレポートであれば比較的簡単に作成できることがお分かり頂けたかと思います。皆さんも是非カスタムレポートにチャレンジしてみてください。なお、今回はActiviti Modelerを使いましたが、このツールの制約により定義できないような項目がある場合にはEclipse Designerを利用するとよいかと思います。

Wednesday, June 11, 2014

Alfresco 4.2のMicrosoft Office連携(オンライン編集機能)をSSL化する

こんにちは。最近めっきり運動不足なおおたにです。

あまりに運動不足なので久々にテニスを再開しようと考えていたところ、なかなか興味深いガジェットがソニーから出てました。SSE-TN1というものです。ざっくり言うと、テニスのプレーをリアルタイムに分析してくれるセンサーです。ラケットのグリップエンドに付けて使うもので、ショットの種類を始め、インパクトの位置やラケット速度、ボールの回転や速度などを分析してくれます。さらに、動画を撮影しながら分析することで、ショットの質を動画と併せて確認できるとか。詳しくはこちらとかでレビューされてますので参考までに。

ただし、このセンサーに対応しているラケットがYONEXの一部モデルのみというところには注意が必要です。ちょうど道具を一通り買い換えようと思っていたところだったのですが、色々試打した結果他社のラケットを買ってしまいました(まあはやりのBabolatです)。これからラケットを買おうという方、そしてガジェット好きな方は是非ご一考を。

というわけで、今回はAlfresco 4.2のMicrosoft Office連携(オンライン編集)機能について書いていこうと思います。


AlfrescoのMicrosoft Office連携とは?なぜSSL化するのか?


以前、「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」という記事でAlfrescoのMicrosoft Office連携について説明しましたので、詳しくはそちらをご覧ください。この設定を行うと、Alfresco上のファイルをMicrosoft Officeで直接開き、編集、保存できるようになります。

この機能は、AlfrescoがSharePointの振りをすることで実現しているのですが、この記事では1つ問題を棚上げしていました。それは、以下のどちらかを行わないとMicrosoft Officeでファイルを開けないというところで、後者についてしか説明していませんでした。
  • 通信をSSL化する
  • クライアントPCのレジストリをいじる
前者の方がより好ましい解決方法ですので、以下ではこのSSL化の方法について説明していきます。


どこをSSL化するのか?


これは、Microsoft OfficeとAlfresco間の接続をSSL化するということになります。AlfrescoはVTIモジュールと呼ばれるSharePointのフリをするためのモジュールを用意しており、Microsoft Officeとの通信はこのVTIモジュールが担当します。VTIモジュールは、Alfrescoサーバ上のjettyにホストされ、デフォルト7070番で通信します(もちろん変更可能です)。SSL化すべきはこのVTIモジュールということです。


SSLの設定を行う


以下、具体的な手順を説明するのですが、まずはMicrosoft Office連携機能をインストールしましょう。手順は「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」を参考にしてください。

準備ができたら早速SSLの設定を行っていきましょう。今回はテスト用の自己署名証明書を作成しますが、実運用に向けては正統な証明書を準備する必要があります。

1. 自己署名証明書を作成する

まずはSSL用の自己署名証明書(いわゆるオレオレ証明書)を作成します。以下のコマンドを実行します(以下はWindowsでのものですが、Linuxも同様です)。キーストアのパスやパスワードは適宜変更してください。
> %JAVA_HOME%/bin/keytool.exe -genkeypair -alias alfresco -keystore D:/alfresco/alf_data/keystore/vti.ssl.keystore -storepass changeit -keypass changeit  -keyalg RSA -validity 365 -keysize 2048 -storetype JKS


2. VTIの設定を変更する

続いて、VTIモジュールの設定を変更します。以下の2つのファイルを弄る必要があります。まずはalfresco-global.propertiesに以下の3プロパティを設定します。vti.server.ssl.keystoreは先ほど作成したキーストアのパス、vti.server.ssl.passwordは先ほど指定したパスワードを設定します。

<tomcat_dir>/shared/classes/alfresco-global.properties
vti.server.external.protocol=https
vti.server.ssl.keystore=D:/alfresco/alf_data/keystore/vti.ssl.keystore
vti.server.ssl.password=changeit

続いて、vti-context.xmlというVTIモジュールの定義ファイルを修正します。vtiServerConnectorのbean定義が2つあるので、non-SSL用をコメントアウトし、SSL用のものを有効にします。

<tomcat_dir>/webapps/alfresco/WEB-INF/classes/alfresco/module/org.alfresco.module.vti/context/vti-context.xml
<!-- Use this Connector for plain text (non-SSL) communications -->
<!--
<bean id="vtiServerConnector" class="org.mortbay.jetty.bio.SocketConnector">
    <property name="port">
         <value>${vti.server.port}</value>
    </property>
    <property name="headerBufferSize">
         <value>32768</value>
    </property>
</bean>
-->
<!-- Use this Connector instead for SSL communications -->
<!-- You will need to set the location of the KeyStore holding your -->
<!--  server certificate, along with the KeyStore password -->
<!-- You should also update the vti.server.protocol property to https -->
<bean id="vtiServerConnector" class="org.mortbay.jetty.security.SslSocketConnector">
    <property name="port">
         <value>${vti.server.port}</value>
    </property>
    <property name="headerBufferSize">
         <value>32768</value>
    </property>
    <property name="maxIdleTime">
         <value>30000</value>
    </property>
    <property name="keystore">
         <value>${vti.server.ssl.keystore}</value>
    </property>
    <property name="keyPassword">
         <value>${vti.server.ssl.password}</value>
    </property>
    <property name="password">
         <value>${vti.server.ssl.password}</value>
    </property>
    <property name="keystoreType">
         <value>JCEKS</value>
    </property>
</bean>


早速試してみよう


以上の設定が終わったら、Alfrescoを再起動して http://localhost:8080/share/ にアクセスしてみましょう。もしレジストリを非SSLでの認証を許可するために弄ってある人は、元に戻してPCを再起動しておきます。あとは「AlfrescoのMicrosoft Office連携(オンライン編集機能)を試してみよう」の記事にある手順でオンライン編集を実行し、「このWebサーバーへのアクセスは規定で無効になっています。...」のダイアログが表示されずにMicrosoft Officeでファイルを開ければ設定成功です。

もちろん本番環境で利用する際は自己署名証明書では問題なので、適切な証明書を適用する必要があります。また、更に詳しい説明はAlfresco Documentationを参照してください。

今回の説明は以上になります。是非VTIモジュールのSSL化に挑戦し、快適なオンライン編集ライフを楽しんでください(って何だ!)

Friday, June 6, 2014

日本初のLiferayプラチナパートナーに認定されました

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

早速ですが、弊社、日本初のLiferayプラチナパートナーに認定されました!(パチパチ)

Liferay社がイージフを日本初のプラチナパートナーに認定 | プレスリリース | お知らせ | aegif
Liferayがイージフ社を日本初のプラチナパートナーに認定 - All Liferay Press Releases | Liferay

プラチナパートナーになるためには、Liferayサブスクリプションの年間売上やLiferay認定技術者数などの制約があります。今回はLiferay社に弊社の貢献や技術力が認められたということなので、素直に嬉しい出来事であるとともに、今後もより一層Liferayに注力すべく気の引き締まる思いであります。

ちなみに、Liferayのサービスパートナー制度では、パートナーを主にシルバー、ゴールド、プラチナの3レベルに分けています。パートナーは全世界で140社ほどあり、そのうちのプラチナパートナーは25社、アジアでは2社、日本では弊社1社ということになります(2014年6月現在)。


かくして、弊社Liferayチームはお祝いの寿司(回らないやつ)にありつけたわけであります。いやーとてもおいしくいただきました、回らない寿司。
  

Thursday, May 29, 2014

CmisSync for Macのベータ版をリリースしました

はじめまして、今年3月にAegifに入社した相馬です。
入社後からずっと関わってきたCmisSyncのMac版が、ようやくベータ版としてお披露目できるようになりました。

CmisSyncをご存じない方のために簡単に説明いたしますと、CMISという文書管理の標準規格に対応している文書管理サーバとローカルのPC間で自動的にファイルの同期をすることができるソフトです。機能としてはDropBoxやOneDriveを想像していただくと近いのですが、CMIS規格に対応しているサーバであれば同期可能なので同期先がサービス提供元に限られることがなく、また、複数の種類のECMサーバと同期することができます。
Microsoft社のSharePointもCMIS規格に対応していますので、CmisSyncを使うとMacとの間で同期が可能です。これは結構便利ではないでしょうか?

CmisSyncについて詳しくはこちらのサイトをご覧ください。Macのベータ版も右下の「DOWNLOAD NOW!!」からダウンロードしていただけます。

なお、現時点ではベータ版のため、
  • いわゆるUTF-8-MAC問題により、環境によっては一見同じ名前のファイル・フォルダがサーバ上に重複して同期される場合がある
  • GUIの対応言語が英語のみ
といった制限と機知の問題があります。
特にUTF-8-MACの問題は日本語の場合、濁点・半濁点を含むファイル・フォルダ名で発生してしまいますので、申し訳ありませんがベータ版では日本語環境での利用は非推奨とさせていただきます。

正式版に向けて皆様からのご意見、バグリポートをお待ちしております!
cmissync@aegif.jp

CmisSync for Mac OS X: beta released!

CmisSync, the ECM synchronization tool, is now available for Mac!


You can now synchronize between Alfresco/Documentum/FileNet/SharePoint/etc and your Mac.
- Automatically downloads/uploads changes
- Allows you to work even when offline
- Smart conflict resolution

This is a beta version, with the following bugs remaining:
- No activity indicator when downloading
- Japanese: Mac OS X transforms パ (1 character) into ハ゜ (2 characters)

Don't hesitate to use it, we are waiting for your feedback at CmisSync@aegif.jp
Professional support is available from Aegif at 120USD per user per year, please contact us at the email address above to learn more.