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のオンラインヘルプに載っていますので参考にしてください。