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.

Tuesday, May 27, 2014

CmisSync now on Facebook: Like us and win 5 free ebooks "Alfresco CMIS"!

CmisSync is now on Facebook!
Like us to enter the raffle to win the ebooks "Alfresco CMIS" :-)
272 pages, $20 value. The raffle will choose 5 winners on the 6th of June.


The book Alfresco CMIS, despite its title, is useful for any CMIS server. Alfresco is mostly used as an example, which is convenient because Alfresco is easy to set up and comes with CMIS out-of-the-box.
I got this book and loved it, so I run this small raffle to jump-start our Facebook page :-)

The book is centered on practical usage rather than theory, which is great for implementers who want to quickly create a CMIS client. Other CMIS books tend to cover the CMIS specification with all the details needed to implement a CMIS server... which is not needed for 99% of us.

The first chapter describes what CMIS is good for, the main ways to use it, and quickly explains the necessary concepts.

After a minute of server-side installation, the reader is already running AtomPub-based requests to list a folder or create a document. The third chapter covers more advanced operations like check-out, permissions, relationships and searching. The fourth chapter is where it goes Alfresco-specific, explaining how CMIS is implemented in Alfresco, just skip it if you are not on Alfresco.

One of the most useful parts is the fifth chapter, which details how to access a CMIS server with Java in order to create, move, modify and delete content, manage versions, permissions, relationships, and generally whatever you would want to do with a repository. The book covers secondary types, a new concept in CMIS 1.1, a much nicer to to handle Alfresco's aspects than what is described in older documentation.

The new trend is to use CMIS via scripting, and the book devotes a whole chapter to the topic, guiding the reader into writing CMIS clients in plain JavaScript, JQuery, Groovy, and Spring Surf. CMIS is indeed a great way to create Alfresco Share extensions.

The "I" in CMIS is for Interoperability, and the last chapter puts this in context by having you single-handedly implement useful interconnections between Alfresco and big names of the Open Source Enterprise world such as Drupal and Mule.

Friday, May 23, 2014

Liferayアップグレードの流れと注意点

こんにちは。ドラゴンクエスト・ファイナルファンタジー両シリーズとも1作もプレイしたことのないおおたにです。

まあ子供のころにコンシューマ機を持っていなかったのが原因なんですが、例えばドラクエのレベルアップ音とかモンスターとか呪文とか、何となくは知っていますがあまりなじみがないため、エニックスとかスクウェアとかそういう話題には笑顔だけで対応するしかありません。

そんなこんなで最近は、子供にコンシューマ機を買い与えることについて考えています。 賛否両論ある話ですよね。実体験からすると経験の幅が広がる事が将来にわたってプラスに働くと思うのでそこは買い与えるつもりでいるのですが、やはりそれに執着してしまうことで逆に幅が狭まるだろうから、買い与えるタイミングをどう判断するか迷いどころです。

というわけで(どういうわけだ!)、今回はLiferayのアップグレード(バージョンアップ)の方法と気を付けるべき点について見ていきます。ターゲットとしているLiferayのバージョンは、6.0、6.1、6.2あたりです。

# ちなみに個人的には、レベルアップ音よりも宝箱開ける音、呪文じゃなくて半キャラずらしの肉弾戦の方がなじみがあります。というわけで、なかなか一般的な会話として出しにくいネタなわけですね。はい、ただ言いたいだけですすいません…。


Liferayアップグレードの大まかな流れ


まず、Liferayをアップグレードする際に必要なデータは以下の2つです。
  • データベース
  • ファイルシステム上のファイル(文書ライブラリ等で管理されるファイルのストア)

基本的にはこの2つを新しいバージョンのLiferayに食わせれば、あとは自動的にLiferayがアップグレードの処理を行ってくれます。では、もう少し具体的にLiferayアップグレードの流れを見てみましょう。

  1. 新バージョンのLiferayをインストールする(起動はしない)
  2. 旧Liferayを停止する
  3. 文書ライブラリストアを必要に応じて新Liferayにコピーする
    • ローカルファイルシステム上で管理していれば、<liferay_dir>/data/document_library を旧Liferayから新Liferayにコピーする
    • DBやNAS上で管理していれば、ファイルのコピーは必要ない(portal-ext.propertiesの確認・見直しは必要)
  4. 旧Liferayのportal-ext.propertiesを新Liferayにコピーし、設定の見直しを行う
    • バージョンの違いによる設定項目の追加/廃止などを反映する
    • DBの接続設定、文書ライブラリのストア設定(dl.store.impl)まわりを確認する
    • その他、アップグレード時のバージョンの違いを吸収するための設定を行う(後述)
  5. 新Liferayを起動する
    • catalina.outをtailし、アップグレード時に問題が発生しないか監視しておく
  6. 新Liferayに追加のプラグインやカスタムモジュールをデプロイする
  7. [データベースもアップグレードや移行が必要な場合] 他のDBにデータをエクスポートする
    • Control Panel -> Configuration -> Server Administration -> Data Migrationで他のDBにデータをexportする
    • その後portal-ext.propertiesのDB接続設定を変更してLiferayを再起動するだけで移行完了
  8. インデックスをリビルドする
    •  Control Panel -> Configuration -> Server Administration ->Resources -> Reindex all * indexes.
    • catalina.outをtailして進捗状況を監視しておく

以上が基本的な流れです。 DBのスキーマ変更などのアップグレード処理は新Liferay初回起動時に全て自動で行われます。


注意点(主にportal-ext.propertiesの設定について)


Liferayに限りませんが、ソフトウェアはバージョンを重ねるにつれて新しい機能が実装されたり、既存機能の仕様が変更されたりします。そのため、Liferayをアップグレードする際にはそのバージョンに応じて適切な設定を行っておく必要があります。

例えば、Liferay 6.1からLiferay 6.2にアップグレードする際には、以下の設定をportal-ext.propertiesに追記する必要があります。
passwords.encryption.algorithm.legacy=SHA

これは、デフォルトのパスワード暗号化アルゴリズムが6.1と6.2で異なるためで、この設定を追加しないとアップグレード後、ユーザログインで失敗するようになってしまいます。

また、6.1系のアップグレードプロセスにはアップグレード後にコントロールパネルにアクセス出来なくなるという既知の問題があるため、以下の設定をportal-ext.propertiesに追記する必要があります(アップグレード時だけ設定し、アップグレードが完了したら削除しましょう)。
verify.frequency=-1

その他、必要な設定についてはLiferayのユーザガイドに詳細が書かれています。


まとめ


簡単に紹介させていただきましたが、Liferayアップグレードが簡単に実施できることをお分かり頂けましたでしょうか。もちろん、カスタムポートレットやテーマ、プラグインを利用している場合は、それらがアップグレード後も使えるか確認して必要に応じて修正する必要があります。しかし、Liferayはそれらのカスタムモジュールをコアと比較的疎結合な形で実装することができるので、それなりに現実的なものとしてアップグレードを検討できると思います。

今回紹介した内容はLiferayのユーザガイドにも記載されているので、詳しい情報が必要な方はこちらも見てみてください。

Thursday, May 15, 2014

Alfrescoでファイルを別のAlfrescoインスタンスに転送する(レプリケーションジョブ)

こんにちは。週末に富士芝桜まつりに行ってきたものの六分咲きで不完全燃焼なおおたにです。

芝桜は見ごろでは無かったのですが、当日は天気がよく富士山がとても綺麗でした。下の写真は新倉山浅間公園の忠霊塔で撮ってきたものです。周囲の木々は桜なので、春にはもっと綺麗な景色を眺めることができるようです。約400段の階段を登る必要がありますが、おすすめスポットです。



さて、今回は、あるAlfrescoに保存されているファイルを別のAlfrescoリポジトリに転送する(一方通行で同期する)レプリケーションジョブという機能を説明したいと思います。以下では、Alfresco Community 4.2.f に基づいて説明します。


レプリケーションジョブとは


レプリケーションジョブとは、あるAlfresco上の特定のフォルダを、別のAlfrescoリポジトリに転送する機能です。特定のフォルダ以下のファイルだけを、別のAlfresco上で公開したい、という要件を実現することができます。この機能の主な特徴は以下のとおりです。

  • 転送は一方通行で、転送先のフォルダは転送元のフォルダと同期されます。つまり、転送元でファイルが削除されると、転送先でもファイルが削除されます。
  •  転送先のフォルダパスを選べません。必ず転送元のフォルダパスと同じ場所に転送されます。
  •  転送先のファイルをロックすることができます(リードオンリーモード)。リードオンリーモードの場合、転送先のAlfrescoでは転送されたファイルを削除することができません。


レプリケーションを有効にする


デフォルトの状態ではレプリケーションが無効になっているため、設定を変更してレプリケーションを有効にする必要があります。

まずは、alfresco-global.propertiesでレプリケーションを有効にする設定を行います。なお、replication.transfer.readonlyをtrueに設定すると、前述のリードオンリーモードとなります。

<tomcat_dir>/shared/classes/alfresco-global.properties
replication.transfer.readonly=true
replication.enabled=true


続いて、share-config-custom.xmlでレプリケーション先のAlfrescoを設定します。ファイルが無い場合は以下の内容のファイルを新規作成し、既に存在する場合はconfigセクションを既存のalfresco-configセクションに追加します。なお、repositoryIdは、http://<転送先AlfrescoサーバIP>:<ポート番号>/alfresco/service/cmis/index.html にブラウザでアクセスし、CMIS Repository Informationを展開すると確認できますので、そのリポジトリIDを入力します。その後のShare URLも転送先Alfrescoサーバのものを入力してください。

<tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml
<alfresco-config>
   <config evaluator="string-compare" condition="Replication">
      <share-urls>
         <share-url repositoryId="7519130f-0305-46f5-b27a-ffe51f3084f6">http://127.0.0.1:7080/share/</share-url>
      </share-urls>
   </config>
</alfresco-config>



上記2ファイルの設定が終わったら、Alfrescoを再起動しましょう。


転送先サーバへの接続を設定する


続いて、転送先Alfrescoへの接続設定を行います。adminユーザでAlfrescoにログインし、「リポジトリ」→「Data Dictionary」→「Transfers」→「Transfer Target Groups」→「Default Group」に移動し、フォルダtestを作成します。フォルダtestの「プロパティを編集」をクリックし、転送先サーバIP(ホスト名)、ポート番号、パス(このままでOK)、プロトコル、認証情報を入力し、「有効」にチェックを付けて「保存」をクリックします。



レプリケーションジョブを設定する


以上で、レプリケーションジョブの準備が完了しました。あとはレプリケーションジョブを設定するたけです。adminユーザでAlfrescoにログインし、適当に転送対象フォルダを作成してファイルを追加しておきます。続いて、「管理者ツール」→「レプリケーションジョブ」を開き、ジョブの作成」をクリックします。



ソースアイテムに転送対象フォルダを選択し、転送ターゲットに転送先サーバ接続設定を指定します。スケジュール実行が必要な場合はその開始日時と間隔を指定します。最後に「有効」にチェックを付けて「ジョブの作成」をクリックします。





テストしてみよう


では、早速テストしてみましょう。ジョブを作成すると「レプリケーションジョブ」画面に戻るので、先ほど作成したジョブの「ジョブの実行」をクリックしてみましょう。ジョブ実行後、しばらくしてから画面をリロードしてみて「最後のジョブは成功しました。」と表示されたらテスト成功です。



転送先のAlfrescoにログインし、転送対象フォルダが同期されていることが確認できると思います。なお、転送先のファイルには転送されてきたことを示すアイコンが表示されます。さらに、リードオンリーモードの場合は削除やプロパティの編集ができないようになります。




今回の内容は以上になります。詳しい設定方法はAlfrescoのオンラインヘルプに載っていますので参考にしてください。