Quantcast
Channel: aegif Labo Blog
Viewing all 244 articles
Browse latest View live

Bye Google Reader, hello Feedindicator!

$
0
0
In one month, Google Reader will shut down.
Luckily, Ubuntu users can use Feedindicator:

Features

  • Click a news and it will appear in your browser.
  • Icon turns grey when there are no more news.
  • Easily mark all as read.
  • Option to show each feed in its own sub-menu.

Adding a feed

To add a feed, just click "Add feed" and enter the RSS/Atom URL:


Migrating from Google Reader to Feedindicator

From Google Reader, click the gear, select Reader Settings> Import/Export> Export your subscriptions.This will download subscriptions.xml

Download google-reader-to-feedindicator.sh, make it executable, and execute it in the same directory as subscriptions.xml ...Feedindicator should now show your feeds!

Details

Feedindicator stores all feeds as a simple text file at ~/.config/feedindicator/feeds.cfg
One line per feed, for instance:

http://www.w3.org/News/atom.xml
http://www.tradecommissioner.gc.ca/rss/ForeignEvents_RSS.xml


Feedindicator is Open Source, I maintain it, waiting for your feedback!
Nicolas Raoul

Alfresco Shareのコンテキストパスを変えたい

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

最近、子育て支援みたいな話で育休3年とか在宅勤務しやすいように制度を見直すみたいなことが言われてると思うんですが、なんかちょっと違和感あるんですよね。本当に働く女性を支援する効果があるのかな、と。
 3年もブランクが空くとその間の変化に対するキャッチアップも大変だろうし、そういう社員を抱える会社側にも大きなリスクになると思うわけで、正直なところ現実的じゃないような気がしています。在宅勤務についても、子供と大人一人という状態だと確実に子供の相手だけで手いっぱいになるわけで、在宅であろうと仕事するのって厳しいと思います。
 そもそもこれらの話って、女性が子供の面倒を見るってことが前提に置かれてるように思えてなりません。なんで、男性も、もっというと二人で面倒を見れるようにする、という方向にならないのかと思うと、とても残念な気持ちになります。。。

 例えば、育休3年取れるようにするよりも男性の育休取得率を高めようとか、在宅勤務については間口をもっと広げて両親ともに取りやすい環境を作るとか、そういうことの方がより重要なんじゃないかと思っています。子供の世話を二人に分散しつつ、両者とも仕事をできるような環境が整えばよいなと思っています(3年間は家で育てる、ということの是非については各論あるようなのでここではスルーします。個人的には必ずしも必要とは思わないですが…)。
 こんなことを考えていると、この会社は比較的融通利くので、そういうところを最大限活用していこう、と改めて思います。男性でも育休取れるし、業務内容によっては在宅勤務もできるし(1日単位で)。多分こういうのって社会制度的なものもあるけど、会社の風土みたいなのがより重要だと思うんですよね。会社が許容してくれれば良いわけなので。少しでもそういう方向に社会が変わっていくといいなと思う今日この頃です。


 さて、前置きが長くなってしまいましたが、今回はAlfresco Shareのコンテキストパスを変更する方法について紹介したいと思います。複数のAlfresco Shareが稼働しているときに、フロントのWebサーバやロードバランサ等でコンテキストパスを見てリクエストの振り先を変えたい等の要件があったりします。その場合には、Alfresco Shareのコンテキストパスを変更する必要があります。以下では現時点で最新のAlfresco Community 4.2.cを使って具体的な説明をしていきます。


そもそもコンテキストパスって何?


 まずは、この手のWebアプリケーションにアクセスするためのURLについておさらいします。Alfresco Shareでは、/shareにアクセスすると、/share/pageにリダイレクトされ、ログイン画面が表示されます(正確には/share/page/type/loginにアクセスしていますが、その詳細については割愛します)。
 このURLのうち、"/share"をコンテキストパス、"/page"をサーブレットパスと呼びます。コンテキストパスは、デプロイしたWebアプリケーションを識別するためのもので、サーブレットパスは、実際に処理を行うサーブレットを指定するためのものです。



コンテキストパスを変更しよう


 Alfresco Shareのコンテキストパスはデフォルトでは/shareとなっているので、これを変更することになります。Alfresco Shareはwar形式のファイルで提供されているため、コンテキストパスを変更する方法は以下のとおり、とても簡単です。
  1. 既存の Alfresco Shareをアンデプロイ(配備解除)する
  2. コンテキストパスを指定してAlfresco Shareをデプロイする
1. はTomcatであれば、Tomcat Web Application Managerから"Alfresco Project Slingshot"(Shareアプリケーション)を配備解除するか、Tomcat停止状態で/tomcat/webapps/shareを削除すればOKです。
 2. はTomcatであれば、Tomcat Web Application Managerからコンテキストパスを指定して(例えば"share2"など)、Alfresco Shareのwarファイルshare.warをデプロイします。もしくは、share.warをshare2.warなどにリネームしてから/tomcat/webapps/にコピーし、Tomcatを起動してオートデプロイを行います。

 以上でAlfresco Shareのコンテキストパスが変更されます。



コンテキストパスを変更したら…


 以上の変更を行ってからブラウザで/share2にアクセスすると、見事にコンテキストパスが変更されていることが確認できます。ただ、1点だけ注意が必要です。
/tomcat/shared/classes/alfresco-global.propertiesのパラメータのうち、share.context=shareとなっているものをshare.context=share2などのように、新しいコンテキストパスに変更する必要があります。
 これを変えないと、サイト招待のメールや、アクティビティフィードなどで問題が発生する可能性があります(具体的には、メールやフィードのリンクが適切に生成されないという問題です)。なので、Alfresco Shareのコンテキストパスを変更した際には必ずalfresco-global.propertiesの設定も変更しましょう。

Alfresco勉強会#16 振り返り

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

6/6(木)に第16回Alfresco勉強会が開催されました。前回はHanare(ハナレ。オフィスからちょっと離れた場所にある個室なのでそう呼んでいます。)という会議室で実施したところ死ぬほど暑かったとのことなので、オフィス内の会議スペースで実施しました。19時以降はエアコンが切れてしまうという条件はどちらも同じなのですが、Hanareは窓がない上にあまり広くないのでプロジェクタを使っていると1時間もするとかなり暑くなってしまうんですよね・・・。前回参加された方には申し訳なかったです。

さて、そんな前回の教訓を生かして比較的快適な環境で実施した今回の勉強会ですが、テーマは以下の2つです。それぞれ簡単に紹介します。

1. Alfrescoのカスタムテーブルの使い方(寺下)

資料はこちら

Alfrescoが標準で用意しているテーブルとは別にカスタムテーブルを用意して、AlfrescoからデータをINSERTしたりSELECTしたりする方法について紹介しました。iBATISでSQLマッピングする方法さえわかってしまえばそれほど難しいことではないと思います。
ちなみに、サーバサイドのJavaScriptをちょっと試したい時に便利なJavaScript Consoleというツールを動作確認のデモの時に使ったのですが、これが本編の内容よりも反応が良かったような気がします。。。WebScriptsを開発する時なんかに非常に便利なツールなのでオススメです。

2. AlfrescoのAuditing(戸谷氏)

資料はこちら

次はAlfrescoが標準で用意しているAuditing(監査証跡)の使い方についての説明でした。AlfrescoのAuditingはけっこう癖があるのでとっつきにくいのですが、仕組みさえわかってしまえばいろいろ応用できるのではないかと思います。使ってみようかなという方はリンク先の資料を見るだけでもかなり参考になると思います。

次回の第17回勉強会は2013年8月1日(木)19時〜を予定しています。場所は引き続き弊社オフィスの予定です。
こういうことやりたいんだけどどうすればできる?とか、こんな機能を実装しようとしてるんだけどうまくいかないから相談したい、といった要望があればPartakeのイベントのコメント欄に書いていただければと思います。なるべくその要望に沿うような内容にしたいと思います(準備が間に合えば・・・)。もちろん発表も大歓迎です。

Activiti BPM Platformことはじめ(インストール方法とか)

$
0
0
こんにちは。最近自動車を買い替えたのですが、買い替え後10日で娘に車内で吐かれて意気消沈気味のおおたにです。

今回は低テンションのままActiviti BPM Platformの事始め的なお話をしようかと思います。


Activitiとは


Activitiワークフロー:チュートリアル(パート1)という記事にもあるとおり、Activiti BPM PlatformとはオープンソースのBPMエンジン(ワークフローエンジン)です。Alfresco社がスポンサーとなっていますが、プロジェクトとしては独立しています。特徴は以下のとおりです。
  • オープンソース(Apache License, Version 2.0)
  • 無償利用可能
  • BPMN2.0ネイティブ対応
  • 軽量(パッケージではなく、バックエンドで組込み的な形で利用されるもの)

例えば、AlfrescoはBPMエンジンとしてActivitiを利用しています。まさに組込みでコアのライブラリを利用しているだけですので、Alfrescoを利用していてActivitiを意識することはまずありません(ユーザは、です。開発者は意識します)。

とはいえ、まず簡単にActivitiを試してみようと思った場合には、スタンドアロンで実行可能な一式のツールが提供されているので、これらを利用してみるとActivitiの機能について理解を深めることができると思います。
  • Activiti Explorer : ActivitiのWebフロントエンド。Activitiの機能を一通り触ることができる。
  • Activiti Modeler : Webベースのプロセス定義管理ツール。プロセス定義の作成・編集・インポート・エクスポート・デプロイなどを行うことができる。現バージョンではActiviti Explorerに統合されている。
  • Eclipse Designer : プロセス定義を作成するためのEclipseのプラグイン(こちらは実際のプロジェクトでも利用可能な開発ツール)。

そこで、本稿ではActivitiのインストール・アクセス方法について説明しようと思います。重要なことなのでもう一度言いますが、Activiti ExplorerはActivitiのBPMエンジンを利用するための必須アプリケーションではなく、あくまでもBPMエンジンを試用してみるためにActivitiが提供している標準的なUIの1つ、ということになります(Activitiの機能を一通り触れるので便利といえば便利なんですけどね)。


Activitiのセットアップに必要なソフトウェアのダウンロードとインストール


Activitiのセットアップには以下のソフトウェアが必要になります。
  • JDK6以降
  • Web Application Server(Tomcat等)
  • Activiti(現在の最新版は5.13)
  • RDBMS(H2以外を利用する場合。MySQL, PostgreSQL, Oracle, DB2など)

JDK6以降

Java SE DownloadsからJDKをダウンロードし、インストールします。筆者はJDK7を利用しています。

Web Application Server

ここではTomcatを使います。Apache Tomcat - Apache Tomcat 7 DownloadsからTomcat7をダウンロードし、適当なディレクトリに展開します。Tomcatを展開したディレクトリを<tomcat_home>と表記します。

Activiti

ここではTomcatを使ここからダウンロードし、適当なディレクトリに展開しておきます。

RDBMS (optional)

デフォルトではH2 Databaseをインメモリモードで利用しますが、その他のデータベースを利用する場合は別途RDBMSをインストールし、Activitiの設定を変更する必要があります(Activiti database setupを参照のこと)。また、H2 Database以外を利用する場合は、対応するJDBCコネクタを入手してクラスパス上にコピーする必要もありますのでお忘れなく。


Activitiのセットアップ


これでActivitiのセットアップの準備ができました。残るはActivitiアプリケーションをTomcatにデプロイするだけです。Activitiモジュールを展開したディレクトリのactiviti-5.13/wars/activiti-explorer.warを<tomcat_home>/webappsにコピーし、Tomcatを起動するだけです。

Tomcatの起動は<tomcat_home>/bin/startup.bat (or startup.sh)をキックするだけです。正常にTomcatが起動したらセットアップは完了です。ちなみに、停止する場合は先ほどのディレクトリのshutdown.bat (or shutdown.sh)をキックします。


動作確認してみよう


セットアップが完了したら、ブラウザでアクセスして確認してみましょう。URLは http://localhost:8080/activiti-explorer/ になります。ユーザはデフォルトでkermit, gonzo, fozzieの3ユーザがデモ用として登録されています(パスワードはユーザ名と同じです)。


ユーザID、パスワードを入力し、以下の画面が表示されたら動作確認完了です。




今回はここまで、実際の使い方などについてはまたの機会にとさせていただきます。
なお、ActivitiのドキュメントはUser Guideに一通りの情報がまとまっています。例えば、Activiti Explorerの説明はこちらに載っていますので、興味がある方は是非Activitiをセットアップし、触ってみてください。

(2013/07/23追記) 「Activiti BPM Platformことはじめ2(Activiti Explorerの使い方とか) 」を公開しました。
 (2013/07/25追記) 「Activiti BPM Platformことはじめ3(Activiti Modelerの使い方)」を公開しました。

明日Hills Breakfastを司会します

$
0
0
明日6月25日、Hills Breakfastを司会します。
スライド20枚、1スライド20秒、というTEDよりダイナミックな形式の毎月行わるプレゼンテーションイベントです。
私は2010年に発表者として出てから、毎月スライドとPCを操作する役をやってますが、今回は初めての司会。是非観に来てください!

明日も非常に面白そうなプレゼンターが出ます:
  • 中島佳織さんはフェアトレード・ラベル・ジャパンの事務局長としての活動を発表して、
  • トライフ代表取締役手島大輔さんは日本の高齢者の毎日の課題について興味深い話をして、
  • ディジティ・ミニミ代表取締役竹中直純さんはウェブ会社の戦略を明らかにします。
  • 最後に、プロバスケチーム“東京エクセレンス”GM辻秀一さんが皆にスポーツのやる気を入れる予定です!
ニコラ・ラウル

I will perform as the host for Hills Breakfast tomorrow (June 25).
Hills Breakfast is a monthly presentations event, based on the PechaKucha format, 20 slides x 20 seconds, which is faster and more lively than TED's 18 minutes.
I started as a presenter in 2010 and since then I usually operate the PC/projection, but tomorrow will be my first time as MC. Looking forward to see you there!

Tomorrow promises to be very entertaining with:
  • Kaori Nakajima talking about her work at the head of Fairtrade Japan.
  • Paris-based Swedish artist Per Hüttner will bring us in the universe of the OuUnPo project.
  • Daisuke Teshima will enlighten us about the daily problems of the Japanese senior citizens.
  • Naosumi Takenaka will detail his strategies as the founder of a web agency.
  • Finally,  Shuichi Tsuji is sure to passionate the crowd with his speech as the manager of the pro basketball team Tokyo Excellence.
Nicolas Raoul

Windows 8.1 PreviewをVirtualBoxのVMに入れてみたお話し

$
0
0
こんにちは。仕事で使っているノートPCの2nd HDDもSSDに換装したいと日々妄想している大谷です。VMぽんぽん作るので500GBくらいは欲しいですが、3万円もするんじゃちょっと現実的ではないですね、はい。

早速ですが、Windows8.1 Previewが公開されました。色々試してみたいことがあったのでひとまず手元のVirtualBox上のVMにインストールしてみました。1箇所だけインストール失敗ポイントがあったので、備忘代わりに手順をメモしておきます。ちなみに、Oracle VM VirtualBoxはこちらからダウンロードできます。

1. ISOイメージをダウンロードします。こちらからダウンロードできます。

2. VirtualBoxを起動し、「新規」ボタンをクリックして新規VMを作成します。各自の環境に合わせて設定を行ってください。


 

 




 3. (64bit版のみ) VMの作成が終わったら、コマンドプロンプトでVirtualBoxインストールディレクトリに移動し、以下のコマンドを実行します。<VMイメージ名>は、上記スナップショットの例では"Windows 8.1 Preview"となります。イメージ名にスペースが入る場合は""で囲ってあげてください。

  VBoxManage setextradata <VMイメージ名> VBoxInternal/CPUM/CMPXCHG16B 1

このコマンドは、CMPXCHG16Bサポートを有効にするためのコマンドです。Windows 8.1 Previewのシステム要件に64bit版ではCMPXCHG16Bサポートが必要である旨の記述があります。ちなみに、このステップを省略してVMを起動すると、以下のエラーが出てインストールが開始されません。こうなったら潔くVMをシャットダウンしてください。マウスカーソル消えちゃったよ、という人は右ctrlキー押してみてくださいね。

  Your PC needs to restart.
  Please hold down the power button.
  Error Code: 0x000000C4
  Parameters:
  .....


4. 「起動」ボタンをクリックしてVMを起動します。初回起動時にはマウントするISOイメージを聞いてくるので最初にダウンロードしたISOイメージファイルを指定します。うまく読み込めると金魚(!)が出てきます。


5. あとは指示に従ってWindowsのインストールを行うだけです。途中でプロダクトキーを聞かれますので、ダウンロードページに記載されているプロダクトキーを入力してください。何回か再起動したり、アカウント作成したりで、めでたくWindows 8.1 Previewインストールの完了です。


噂通り、スタートボタン復活してますね。ただし、ボタンのみ。メニューは復活してません。まあ、コンテキストメニューから色々できるようになってるみたいですけど。

Just released: Ready-to-use Kerberos server VM

$
0
0
Kerberos: A wonder for network security, but a pain to install.

Manyapplications wish they had Kerberos support, but have not taken the time to implement it, mostly by lack of a Kerberos server to perform the tests.

So I created a ready-to-use Kerberos server VM!
Feel free to use it: Download the VM, start it in VirtualBox, and you have a working Kerberos server to test your applications!

The VM is 450MB, based on Turnkey Linux Domain Controller and Kerberos installed via this excellent guide. Accounts are described on the Kerberos VM SourceForge page.

AlfrescoとLDAP(Active Directory)を連携させた時に、特定のユーザに管理者権限を与える

$
0
0
こんにちは。大谷です。 お盆休みは祖母の実家のある山梨に帰省しました。今年は涼を求めて富岳風穴というところに行ってみましたが、さすがは気温0度だけあって終始肌寒いくらいでした。娘がもう少し大きくなったら、西湖コウモリ穴とかにも行ってみたいなと考えています。こっちの方がアドベンチャー感があってよいかなと。

さて、今回は認証連携についてのお話です。AlfrescoをLDAPActive Directoryと連携させる際、特定のユーザにAlfrescoの管理者権限を付与したいという話がよくあります。その場合は、alfresco-global.propertiesに以下のプロパティを追記し、管理者権限を与えるユーザのIDをカンマ区切りで列挙します(Alfresco Community 4.2.cで確認)。

ldap.authentication.defaultAdministratorUserNames=Administrator,adtest1

Alfrescoを再起動してユーザadtest1でログインするとこんな感じで管理者コンソールにアクセスできるようになっていることが確認できると思います。



クライアントOSのログイン情報を利用したSSOなどでpassthru認証を利用する場合は、 passthru.authentication.defaultAdministratorUserNamesを上記同様に指定する必要があります。詳しくはAlfresco Authentication Subsystems - alfrescowikiを参照してください。

Removing the middle man: WebCMIS runs in your browser and connects directly to CMIS

$
0
0
Tired of the unflexible Web interface you use all day to work on your documents repository?

Then try WebCMIS! (login:admin password:admin)

WebCMIS does not require any additional server: it runs in your Web browser, and communicates directly with any CMIS document management server (Alfresco, Nuxeo, SharePoint, Documentum, FileNet, Nemakiware, etc).

Bypassing the Web UI app server means better security (one less attack vector), faster access, and reduced hosting costs.

I created WebCMIS as an showcase for the new Browser Binding feature of CMIS 1.1, and have made it Open Source. It is rudimentary right now, but I hope it will grow into a very useful tool.



Liferay Social Networkingアプリケーションの紹介

$
0
0
はじめまして。こんにちは。かわべと申します。
先日aegifに新規メンバとして参加し、この度めでたく初ブログ記事を書くことになりました。何卒よろしくお願いします。

さて、この記事ではLiferayのSocial Networkingというアプリケーションを紹介します。このアプリケーションを追加することによって、LiferayでもFacebookライクなソーシャル機能をポートレットで実現することができるようになります。ソーシャル機能、とだけ聞いてもピンとこないかもしれませんが、最後まで読むとイメージを掴んでいただけると思います。ではアプリケーションのインストールから始めましょう。

Social Networkingアプリケーションの追加


Social NetworkingにもCommunity Edition(CE), Enterprise Edition(EE)がありますが、ここではEEを利用して説明していきます。(CEでも同様の手順でインストールが可能です)

まず、管理者でログインし、コントロールパネルからマーケットプレイスへと移動します。そこから"Social Networking EE"というアプリケーションを選択、ダウンロードします。以上でアプリケーションの追加は完了です。

一見何も変化はありませんが、ひとまずサイトのトップページにでも移動してみます。そこで、ページ上部の「追加」から「詳細」を選択し、追加ポートレット選択画面を表示します。デフォルトの設定では「Wiki」「コミュニティ」などのカテゴリが上から並んでいるはずですが、その中で「ソーシャル」のカテゴリをクリックして開くと…ここにSocial Networkingアプリケーションのダウンロードによって追加可能となったポートレットが並んでいます。



追加前・追加後の比較画像がないので、変化が…わからないですね!(すいませんスクリーンショットを取り忘れました)

さて気を取り直して追加可能となったポートレットについて。Social Networkingのポートレットはその機能によって
  • サイトページに追加するもの
  • ユーザの公開ページに追加するもの
の2種類に大別されます。それぞれ見ていきましょう。


サイトページに追加するもの

Map, Meetups, Members, Members' Activities


・Map
Mapはユーザの現在位置を表示することができます。
ただし、実際にMapポートレットを追加してみるとわかりますが、Mapを利用するためにはマーケットプレイスから更にポートレットを追加する必要があります。今回は割愛しますが、設定方法はこちらに解説されています。

・Meetups
日時、参加者数の上限、参加費などを指定してイベント(Meetup)を作成することができます。現状ではイベントを作成可能なのは管理者のみとなっています。イベントに対してはユーザそれぞれが参加・不参加の意思表示をすることができ、管理者は参加者を把握できます。



・Members
サイトメンバの一覧を表示します。メンバ名をクリックすると、そのメンバの公開ページへと移動します。



・Members' Activities
サイトメンバの直近のアクティビティを表示します。


ユーザの公開ページに追加するもの

Summary, Friends, Friends' Activities, Wall


ユーザの公開ページに追加するポートレットはFriends機能に関連するものです。Facebookを利用したことがある方には馴染みのあるものだと思いますが、Friends機能はユーザ間で密なコミュニケーションを取ることを容易にしてくれます。

・Summary
ユーザがポータルに登録している情報の一部を、簡単な自己紹介として表示します。他のユーザと友人になりたい場合は、友人になりたいメンバの公開ページにアクセスし、Summaryから友人申請をすることができます。



友人申請を受けた場合、その通知はリクエストというポートレット(「ソーシャル」カテゴリに最初から存在しています)に表示されます。友人機能を利用するためにはこちらのポートレットも追加しておきます。



・Friends
Friendsポートレットには、友人になったユーザがリスト表示されます。

・Friends' Activities
友人の直近のアクティビティを表示します。

・Wall
友人であるユーザ同士は、互いのWallにコメントを記入することができます。気軽なコミュニケーションツールとして利用できます。


おわりに


Social Networkingのポートレットを設置することで、使い勝手のよいソーシャルなページを作成することができるでしょう。もちろん他のポートレットと同様、表示権限の設定などを行うこともできるので、要件に合わせて設定してみてください。

Alfresco 4.2.dがリリースされたので早速インストールしてみた

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

週末(と言っても先々週)に青森旅行に行き、十和田湖や奥入瀬あたりを散策してきたのですが、見事に暴風&土砂降りで思い描いた自然とはいまいち触れ合えませんでした。ただ、八戸で食べた寿司はとてもおいしかったので、旅行としてはそれなりに満足したものとなりました。


ついにリリースされたAlfresco Community 4.2.d


さて、そんな奥入瀬に宿泊しているタイミングでついにリリースされましたAlfresco Community 4.2.d! 現実世界に戻ってきて仕事がひと段落ついてからインストールしてみたところ、あれ、なんかおかしい?(インストールはこちらあたりを参照してください)


Shareのヘッダが表示されない?文字化けしてる?


まずは手元のWindowsにインストールしてアクセスしてみたところ、見事にShareのヘッダが表示されませんでした。



テストのために、CentOSにもインストールしてアクセスしてみたところ、Shareのヘッダは表示されたものの、文字化けしたりしなかったりでした(自分の環境では正常だったのですが、他のメンバの環境では文字化けしました…)。サービス起動か起動スクリプト直叩きかによって結果が異なったりする模様です。こうなると俄然環境変数周りが怪しくなってくるのですが、詳しい話はそのうち誰かがしてくれるはずです。ちなみに一応つたない(怪しい)英語でJIRAに報告済です…。


ちなみに、正常に表示されるとこんな感じです。マイナーバージョンアップなのにヘッダが劇的にかっこよくなってます!(まあそのためにこんな問題が発生してるんですが…)



ワークアラウンドはJAVA_OPTSでのデフォルトエンコーディング指定


ちょっと調べてみると、ヘッダのhtmlを生成するJavaScriptコードに文字化けしたリソースが入っていることが確認できました(ちなみに文字化けしないものは全て\uxxxxエスケープされてます)。なので、ワークアラウンドとしてJavaの起動オプションJAVA_OPTSでデフォルトエンコーディングをUTF-8に指定してみます。

LinuxやMacOSのインストーラを利用した場合は <tomcat_dir>/scripts/ctl.sh のJAVA_OPTSに"-Dfile.encoding=UTF-8"を追加し、Windowsインストーラを利用した場合は、以下のコマンドを実行して起動オプションに"-Dfile.encoding=UTF-8"を追加します。

<tomcat_dir>/bin/tomcat7w.exe //ES//AlfrescoTomcat 



Alfrescoを再起動すると、ヘッダが正しく表示されるようになるはずです。


さいごに


今回はヘッダ表示がうまくいかない場合のワークアラウンドの紹介だけになってしまいましたが、次はAlfresco Community 4.2.dの新機能を見ていく予定です。既に英語圏のblogでは色々紹介されているのですが、実際に触ってみた感じなどを日本語で紹介できればと思います。

Alfresco 4.2.dから追加されたCSRF Policyをひとまず無効にする

$
0
0
こんにちは、かわべです。
今回はAlfresco4.2.dから新規追加されたCSRF filterについて紹介します。内容はこちらの記事(英語)を参考にしています。

CSRFとは?


CSRF(クロスサイトリクエストフォージェリ)とは、悪意ある人間の細工によって、サイトの閲覧者が意図しない操作を本人も気づかないまま実行させるものです。CSRF対策のひとつにサイト内で発行するトークンを利用する方法があり、Alfresco Shareでもこの方法でCSRF対策を行うようになりました。

ユーザがShareでログインし、ページが遷移するごとに新規トークンが生成されます。Share上からHTTPリクエストを行う場合、そのページで生成されたトークンをリクエストへ埋め込みます。このトークンをチェックすることで、外部から送り込まれた不正なリクエストでないことを判断することができるという仕組みです。org.alfresco.web.site.servlet.CSRFFilterが実際の処理を行うクラスです。

さて、参考記事には「CSRF filterがカスタムコードに影響を与えることはそれほど多くありません」とあるのですが、4.2.dで動作確認中、CSRF filterが原因でカスタムモジュールが正常に動作しないということがありました。出力されたエラーログと、CSRF filterを簡単に無効にする方法を見てみましょう。

CSRF filterによるCSRF攻撃検知


正常に動作しなかったのは、認証のために連携したLDAPサーバのパスワードをShare上から変更するためのダッシュレットです。これは過去にaegifで作成したものです。




フォームで入力したパスワードをLDAPサーバへ送信して更新する…というものなのですが、パスワードを変更しようと送信ボタンをクリックしたところ、失敗してしまいました。




share.logを確認してみると…エラーが出ています。

(抜粋)
17:44:16,125 INFO  [org.alfresco.web.site.servlet.CSRFFilter] Possible CSRF attack noted when comparing token in session and request header. Request: POST /share/page/components/dashlets/ldaputil
17:44:16,166 ERROR [org.alfresco.web.site] javax.servlet.ServletException: Possible CSRF attack noted when comparing token in session and request header. Request: POST /share/page/components/dashlets/ldaputil


ダッシュレットからのPOSTリクエストがCSRFだと疑われてしまい、処理が実行されなかったようです。

CSRF Policyをとりあえず無効化する


せっかく追加された新機能、最大限に活用したいところですが、とりあえずコードには手を入れずにモジュールを動かしたい場合もあるかと思います。今回は定義ファイルを変更することでfilterを無効化する方法を紹介します。変更する定義ファイルはshare-config-custom.xmlです。

<tomcat_dir>/shared/classes/alfresco/web-extension/share-config-custom.xml

ここに、以下の定義を追加します。

<config evaluator="string-compare" condition="CSRFPolicy" replace="true">
<filter>
<rule>
<request>
<method>POST|PUT|DELETE</method>
<session>
<attribute name="_alf_USER_ID">.*</attribute>
</session>
</request>
<action name="assertReferer">
<param name="always">false</param>
</action>
<action name="assertOrigin">
<param name="always">false</param>
</action>
</rule>
</filter>
</config>

replace=trueとなっているため、元のCSRF Policy定義はすべて上書きされます。
(ちなみに、元のCSRF Policy定義は 
<tomcat_dir>/webapps/share/WEB-INF/classes/alfresco/share-security-config.xml
にあります。)

新しい定義に置き換えることで、リクエストに伴うトークンの比較は行われなくなります。ただし、RefererとOriginがリクエストヘッダに存在する場合、そのチェックは引き続き行います。

share-config-custom.xmlを変更したら、Alfrescoを再起動して、同じダッシュレットからもう一度LDAPパスワードの変更を試してみます。

今度はCSRF filterに引っかかることなく、無事にパスワードが変更できました。




注意!


今回ご紹介した方法ではデフォルトのCSRF Policyを弱めることになります。本来は発行されたトークンを正しく利用するよう、カスタムモジュールを変更することが推奨されているという点にご注意ください。具体的な変更方法は、最初にリンクした記事を参考にしてみてください。

Alfresco勉強会#18 振り返り

$
0
0
こんにちは。自動車保険の更新時期が近づいてきて不眠気味の大谷です。

生命保険とか医療保険みたいに乗り換えるとペナルティがある(契約時期が若いほど安い)ものだと基本継続で良いのですが、自動車保険は見直すたびに他社が安いので毎回それなりの労力をかけて5社~10社程度オンライン見積もりで比較して最安値のところを見つけています。これまで一度も継続したことないんですが、自動車保険って乗り換えのお客さんに裏で値引きした金額を提示してたりするんでしょうか?自動車保険に安寧の地はあるのだろうか…

さて、少し遅くなってしまいましたが、さる9/25(水)に第18回Alfresco勉強会が開催されました。今回は2つの発表がありましたので、それぞれ簡単に紹介したいと思います。


1. Alfrescoのバックアップとリストア

資料はこちらです。

はい、自分の発表です。Alfresco4でのバックアップとリストアの方法について簡単に(というかエッセンシャルな部分を)紹介しました。

バックアップの対象となるデータがDBとファイルシステム(コンテンツのファイル実体)、全文検索インデックスの3つで、コールドバックアップとホットバックアップでそれぞれどのようにバックアップ/リストアを行うのかという内容です。ホットバックアップ時の3データのバックアップ順序がとても重要です。


2. パフォーマンスチューニングのさわり

資料はこちらです。

続いて弊社戸谷からの発表で、Alfrescoについての(一部はもっと一般的なJavaアプリケーションにも共通する)パフォーマンスチューニングの概論が紹介されました。

この手の話はなかなかまとまった情報として存在しないので、とても重宝する内容じゃないかと思います。パフォーマンスに影響を及ぼす要素とAlfresco上での具体的なイベント、それらへの対処方法が説明され、一部はAlfrescoでの実際の設定項目が紹介されました。話の中で一番意外だったのは、搭載メモリを出来るだけたくさんJVMのヒープ領域に充てるのではなく、必要量を実践的に決定し、残りをディスクキャッシュとして有効活用できるようにする、という点でした。


次回、第19回Alfresco勉強会は11/27(水)19時を予定しています。Alfrescoについて発表をしたいよ、という方を含め、たくさんのご参加をお待ちしております。

Alfresco 4.2.dの新機能というか改善点

$
0
0
こんにちは。旅行のスケジュールがなかなか決まらないおおたにです。

来る10/18(金)~10/20(日)に弊社社員旅行で北海道の富良野~美瑛~白金あたりに行くのですが、まだ全然計画を立てていません。娘(2歳)を連れて行くので、トイレ的な何かとか、そもそも子供も喜びそうなところを探すとか、ある程度は予定を組んでおくべきなのですが…。

さて、今回は8月末にリリースされたAlfresco Community 4.2.dの新機能や改善点などを紹介しようと思います。なお、当エントリはこちらの記事を参考にしています(一部補足もあり)。では、早速見てみましょう。


Shareヘッダがかっこよくなった!


いきなり見栄えの話で恐縮ですが、Shareのヘッダがかっこよくなりました。モノトーンですっきりしました。「マイファイル」「共有ファイル」というメニューも新しく登場しましたが、これらについては後述します。


また、注意点としては、これまではshare-config-custom.xmlでヘッダ表示内容をカスタマイズできたのですが(デフォルト設定はshare-config.xmlに記載されている<config><header>セクション)、当バージョンではこの設定ではカスタマイズできません。webapps\share\WEB-INF\classes\alfresco\site-webscripts\org\alfresco\share\imports\share-header.lib.jsでハードコードされているので、これを変更することになります(将来的には設定ファイルで変更できるようになりそうですが…)

ちなみに、インストールしてみたもののヘッダ表示が文字化けもしくは崩れちゃいますよという方はこちらの記事「Alfresco 4.2.dがリリースされたので早速インストールしてみた」を参照してみてください。


ドキュメントライブラリがかっこよくなった!


はい。かっこよくなったシリーズ第2弾です。 ドキュメントライブラリに限りませんが、アイコンが一新されたりして流行のフラットデザイン風になっています(ヘッダの変更もその一環のように思われます)。もちろんデザインの変更だけでなく、いくつかの機能追加がなされています。


1. スライド表示

これまで、「詳細表示」「シンプル表示」「ギャラリービュー」の3種類の表示がありましたが、新たにスライド表示」が加わりました。画面右上の「オプション」から「スライドの表示」をクリックすると以下のような画面になります。新たに「全ウィンドウ表示」や「全画面表示」機能も追加されているので、それと合わせると、簡易スライドショー的な使い方ができます(ESCキーで元のサイズの表示に戻ります)。


2. テーブル表示

ついにコンテンツのテーブル表示ができるようになりました!これたくさん要望いただいていて、実際にカスタム実装されていた方もいるような機能なのですが、やっと標準機能で対応されたようです。「オプション」から「表の表示」「オーディオの表示」「メディアの表示」を選択するとテーブル表示に切り替わります。


3種類のオプションがあるところから容易に察することができますが、表示列のカスタマイズや表示形式の追加が簡単に行えます。具体的にはshare-config-custom.xmlで設定することになります(デフォルト設定はshare-documentlibrary-config.xmlの<config evaluator="string-compare" condition="DocumentLibrary"><doclist><view-renderers>セクションで定義されています)。"table"というidのview-rendererがデフォルト表示に対応するようですので、これを参考にしてカスタムプロパティの表示を追加するなどすればよいと思います。

3. 表示形式の保存

これ地味に便利な機能なんですが、ユーザごと、フォルダごとに好きな表示形式を保存することができるようになりました。これまでは一度詳細表示に切り替えると全てのフォルダが詳細表示になってしまいましたが、画像フォルダはギャラリービューにしたいなど、特定のフォルダのみ特定の表示形式に固定することができます。「オプション」の「このフォルダのデフォルトとして○○を設定する」から表示形式を固定することができます。


マイファイルと共有ファイル


かっこよくなったシリーズはこれくらいにしておいて、便利になったシリーズに移ろうと思います。第1弾はマイファイルと共有ファイルです。それぞれShareのヘッダから直接アクセスすることができます。

Alfrescoには2つの使い方、サイトとリポジトリというものがあります(くわしくは「Alfresco 4.0の使い方 - 準備編(2) - リポジトリとサイトの準備をしよう」を参照) 。サイトを利用していると、チーム単位での情報共有はできるのですが、個人毎のチームに属さないコンテンツの管理、チームをまたいだ情報共有などを行うために一工夫必要でした。そのためにリポジトリを使うという手段もあるのですが、リポジトリのルートフォルダには各種システムフォルダが見えてしまうため(もちろん一般ユーザはリードオンリーですが)、実運用的にはイマイチ、という状況でした。

マイファイルは、自分だけが参照・管理できるコンテンツを格納することができます。この実体は何かというと、既存のAlfrescoにも存在するユーザホームフォルダになります。これまではリポジトリ経由でないとアクセスできませんでしたが、そのフォルダにShareヘッダから直接アクセスできるようになりました。これでリポジトリを一般ユーザに晒さなくてもユーザホームフォルダを活用できるようになります(ユーザホームフォルダの実体はCompany Home/User Homes/以下に生成されるユーザID名のフォルダ)。

共有ファイルは、全員がアクセスできる全ユーザ共有のフォルダスペースになります。このフォルダを使うことでサイトに囚われないコンテンツ共有を実現することができます。ただ、デフォルトでは全ユーザ書込み可能なので、管理者がフォルダを作成して各フォルダに権限設定するなどして、通常のファイルサーバと同様のアクセス権管理を行う必要があります。この機能も、リポジトリを一般ユーザに晒さずに実施することができます(共有ファイルの実体はCompany Home/Sharedフォルダ)。

ちなみに、Shareヘッダの「リポジトリ」リンクは、share-config-custom.xmlに以下の内容を追記すると隠ぺいすることができます(管理者は設定に関わらず表示されます)。
<config evaluator="string-compare" condition="RepositoryLibrary">
<visible>false</visible>
</config>



ユーザ毎のごみ箱機能


地味に便利になったシリーズ第2弾はごみ箱機能です。これまでは管理者権限を持つユーザだけが、ファイルを1つずつ復旧もしくは削除するだけの簡易的なごみ箱機能しか提供されていませんでしたが、当バージョンからはユーザ毎のごみ箱機能が追加されました。しかも複数ファイル選択してまとめて復旧/削除したりできます!画面右上のユーザ名のプルダウンから「マイプロファイル」をクリックし、「ごみ箱」タブをクリックしてください。




さいごに


上記以外にも設定ファイルでカスタマイズできる項目が増えていたり、便利なREST APIが追加されていたり、細かいところでパフォーマンス改善がはかられていたりと、様々なエンハンスメントが行われているようです。あとは、エントリ「Alfresco 4.2.dから追加されたCSRF Policyをひとまず無効にする 」にあるようなセキュリティ対策も4.2.dで新規実装されています(記事では盛大に無効っちゃってますが…)。これを機会に是非皆様もAlfresco Community 4.2.dを試してみてはいかがでしょうか。

海外へソフトウェアを売る:海外のお客さんにとって便利かつ、手数料が少ない支払い方法?

$
0
0
イージフはCmisSyncという120USドルのソフトウェアを海外に売って初めたら、支払いの選択を検討しました。完璧な方法がないので、選択肢を下記に説明します。



銀行振込

銀行振込は海外のお客様にとって一番不便な選択肢です。

ヨーロッパ人はヨーロッパ内へ振込をするとき、IBAN("国際講座番号")という便利なシステムに慣れていて、金額と相手の番号だけ入れたら終了です。米国だとRTNという似てるシステムがあります。IBANは最近アジア、アフリカと中米に普及していますが、残念ながらまだ全世界ではありません。
特に、日本ではSWIFTコードという古い仕組みしかなく、IBANはまだ使用できません。

海外のお客様にとっての不便ポイント:
1.カザフスタンへ振込は30秒で終わりますが、銀行員は日本への振込経験がなく、振込をするのは難しいです。私が銀行で手続きした際は、銀行員が混乱してしまい、色々な資料を書かされました。
2.外国人は、日本の名前と住所を書くのは苦手です。文字を書き間違えることが多く、振込がうまく行きません。8つの情報も必要です:受取人取引銀行名、受取人取引支店名、受取人口座名義、会社住所など、銀行支店住所まで必要とします。一般の米人にとっては、これはありえません。

逆に、弊社にとっては一番楽な方法です:銀行口座を持ってるだけでできます。ただし、書き間違いの際に、サポートの手間が掛かります。

銀行振り込みの手数料は、固定の部分が大きいので、120USドルの場合は不利です。
送金手数料、海外電信手数料、為替取扱手数料など掛かります。お客様側の手数料もあり、弊社側の手数料もあります。

結論:
金額が大きい場合、もしくは一回のみの場合には、便利です。
120USドルの商品を大量に売りたい場合は、お勧めしません。手間が掛かり、買わないお客様もいます。

VisaやMastercardクレジットカード

海外のお客様にとって一番便利な方法です。
ソフトウェアをインターネットで買うと、クレジットカードの番号を聞かれます。

VisaとMastercardだけで、世界中で対応できます。
しかし、この2社と契約を結ぶ必要もあり、支払いの為のウェブページを作る必要もあり、手間が掛かります。手数料も掛かります。

クレジットカード会社の上に、まとめてサービスを提供してる会社もあります。もちろん、手数料が更に掛かります。
例えば、イプシロンという会社がVisa、Mastercard、Diners、American Express、JCBを扱っていていますが、手数料は約8%掛かります。

結論:
手数料は高いですが、たくさん売る場合は必要な方法になります。

ペイパル

会社にとっても、お客様にとっても、比較的に簡単な方法です。

振込やクレジットカードと違って、手数料は弊社が払います。
手数料が銀行振込より低いです:基本は3.9% + $0.30 USDです。

例:
・取引手数料:ドル取引の場合3.9%+0.3USD
・換算レート:本日のTTM96.94円に対して94.8円
・出金手数料:5万円未満の場合250円
なので、一回ずつなら6%+0.3USDぐらいになります。

ペイパル法人アカウントを作るのは難しいくありませんが、
・ 色々な資料を送る必要があります。
・手続きは、取締役か代理人がを行えます。
・テスト振込と郵便で確認されます。
・およそ一週間ほど掛かります。

Bitcoin

大幅に、手数料が低い方法です:0.06% (銀行振り込みはその100倍ぐらい)

bitcoinをもらったら、そのまま保存するか、簡単に日本円に変換もできます。
MT.GOXという世界一大きいBitcoin取引所は東京の渋谷にあります。

しかし、 Bitcoinを使うお客様が少ないです。特に、企業ではほとんど使用されていません。
弊社にとっては、設定はクレジットカードより簡単です。

結論

銀行振り込みとペイパルでめて、売上が上がりそうの場合はクレジットカード、という戦略をお勧めします。
他の方法やアイディアがあれば、ぜひ nicolas.raoul@aegif.jp へご連絡ください!(日本語の対応も可能です)
Nicolas Raoul

NTLM SSO with Alfresco 4.2 and Active Directory

$
0
0
Do you have an Active Directory server, and want to set up Single-Sign-On (SSO), so that everyone in the domain can log into Alfresco without providing their credentials? Then this article is for you!

What you will need

Obviously, you need to download Alfresco, if you don't have it already. The newer the better, but I guess the instructions below would work for any Alfresco above 3.2.

While downloading, find and take note of the information below, you will need it:
  1. Name of the Active Directory server (let's say it is kate)
  2. Name of the domain (let's say it is aegif.local)
  3. Name of the domain administrator (let's say it is Administrator)
  4. Password of the domain administrator (let's say it is thepassword)
  5. For tests, you will also need a machine that belongs to the domain, different from the domain server itself.
Now let's get started!

Set up Alfresco

Install Alfresco on the Active Directory server, and run it once to check that it works.
If you have not specified any particular port, then Alfresco is running on port 8080. If you have chosen a different port, just adapt the occurrences of 8080 in the following.

Add the following lines at the top of file tomcat\shared\classes\alfresco-global.properties :

authentication.chain=passthru1:passthru,ldap-ad1:ldap-ad,alfrescoNtlm1:alfrescoNtlm
ldap.authentication.active=false
ldap.authentication.userNameFormat=%s@aegif
ldap.authentication.java.naming.provider.url=ldap://kate:389
ldap.synchronization.java.naming.security.principal=Administrator@aegif
ldap.synchronization.java.naming.security.credentials=thepassword
ldap.synchronization.groupSearchBase=cn\=Users,dc\=aegif,dc\=local
ldap.synchronization.userSearchBase=cn\=Users,dc\=aegif,dc\=local
synchronization.import.cron=0 0 5 * * ?
ntlm.authentication.sso.enabled=true
passthru.authentication.defaultAdministratorUserNames=Administrator
passthru.authentication.useLocalServer=true
passthru.authentication.domain=
passthru.authentication.servers=
  1. Replace aegif with your domain name minus the .local part
  2. Replace kate with your the name of your Active Directory server.
Note: The above supposes that Alfresco is on the same server as Active Directory. If not, just replace the last 3 lines with these ones:

passthru.authentication.domain=aegif
passthru.authentication.servers=aegif\\nameoftheactivedirectoryserver
passthru.authentication.defaultAdministratorUserNames=Administrato

Set up Alfresco Share

Open tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml

Find the block that says <config evaluator="string-compare" condition="Remote"> (it is towards the end)
Delete this entire block, and also delete the <!-- and --> commenting around it.
Instead, paste this:




alfrescoCookie
Alfresco Connector
Connects to an Alfresco instance using cookie-based authentication
org.alfresco.web.site.servlet.SlingshotAlfrescoConnector


alfresco
Alfresco - user access
Access to Alfresco Repository WebScripts that require user authentication
alfrescoCookie
http://kate:8080/alfresco/wcs
user
true




Configure the domain server

Logged as the administrator of the domain, press Win+R and execute gpedit.msc .
Gpedit is the group policy editor, with which you can modify policies for the whole domain. With this tool, we will just need to modify a single parameter.

In the tree in the left pane, select Local Computer Policy> Windows Settings> Security Settings> Local Policies> Security Options.
A long list of items with similar names will appear in the  right pane. Select Network Security: LAN Manager authentication level.











A dialog will appear.
In the dropdown box, set the value to Send LM & NTLM - use NTLMv2 session security if negotiated, as highlighted below:



Press OK and quit the policy editor.

Configure each client

Yes, you will need to perform the following on ALL client machines :-/

Open Internet Explorer (you know, that tool you use to download Firefox)
Click Tools> Internet options> Security> Local intranet> Sites> Advanced.



You will get the dialog below:



If you want to access your Alfresco server via HTTP (not HTTPS), then you might need to first uncheck Require server verification (https:) for all sites in this zone.

Type in the protocol and machine name of your Alfresco server, as seen above, then press Add and close.

Other browsers like Firefox and Chrome also have settings for this.

Test

That's all, time to test!
Open http://kate:8080/alfresco in Internet Explorer.
It should show your documents immediately, without asking for for any username/password.

Troubleshooting

If things don't go as well as expected:

1) Read alfresco.log and spot any exception.

2) Run the LDAP queries (ldap.synchronization.groupSearchBase and ldap.synchronization.userSearchBase) in an LDAP browser like Apache Directory Studio.
Nicolas Raoul

CMISに準拠しているとはどういうことか

$
0
0
こんにちは、linzhixingです。現在、aegifでの仕事をお休みしてフランスに1年間の滞在中です。もう2ヶ月ほど経ちました。日本ではずっとNemakiWareの開発をしていましたが、開発の方は社内で引き継がれています。おかげで、すでにNemakiWareはバージョン1.0GA2がリリースされており、パフォーマンスの飛躍的な改善や、CMIS1.1機能などが実装されました。

私自身もこちらで日曜大工的にちょくちょくgithubにpushしているのですが(オープンソースですし)、弊社で社内コミュニケーション用に導入されているco-meetingのおかげで円滑に進められています。もともと日本でも、(プロジェクトによりますが)わりと自宅で仕事+co-meetingというスタイルだったので、場所が変わってもとくに変わらないんですが、それが新鮮といえば新鮮です。



今回のテーマ

さて 、今回のブログのテーマは、「CMISに準拠しているとこんなことができるよ」というCMIS関連でよく聞くセールスポイントではなく、「CMISに準拠しているとはどういうことか」です。少しわかりにくいタイトルですね。CMIS仕様に準拠していると一言で言うのは簡単なものの、CMIS仕様の仕様としての特殊性から、準拠といっても様々なグラデーションが考えられたり、サーバ/クライアントがそのCMISに準拠するためにどういう戦略を取り得るか、なんていう側面から、CMIS仕様に対する理解を深めてみたいと思います。そして最後に、CMIS化する(CMISに準拠させる)ためにNemakiWareを使う、というコンセプトについて紹介します。

ですので、CMISという規格について少しは馴染みのある方向けの内容となりますが、
特にCMISをご存知ない方でも、一般に既存の仕様にあわせて新しく製品を開発するときどんなことを考えればいいか、という視点で流し読みしてくだされば幸いです(CMISを知らないと分からないような例は、なるべく「たとえば」として括り出してあります)。



CMISの沿革

まずはじめに、CMIS規格が策定された経緯から。CMISはもともと2008年にIBM、EMC、MicrosoftといったECM界のビッグネームがOASISに提出した仕様で、Content Management Interoperability Service(コンテンツ管理相互運用サービス)の略です。つまり、異なるECM製品同士でも共通のプロトコルにより操作できるようにするための規格です。
 http://www.insightnow.jp/article/2074

業界全体で既にデファクトスタンダードが成立していた、というわけではなく、既にある程度確立・乱立していたECM製品同士の間に新しく共通言語としてのCMISが定められました。もちろん、いったんCMISという規格が定められた以上、ECMとして望ましい機能を今後CMISが自主的に取り込んでいく動きはあって、たとえばタグ/カテゴリの仕様策定も検討されていたようですが、いずれにせよだいぶ先の話になりそうだという印象です。 

CMISは既存ECMを抽象化したものといえますが、NemakiWareは反対に、最初からCMIS準拠を目指してスクラッチで開発されたものなので、「CMIS準拠という制約を極力守りながら、どこまでやりたいことが自由に表現できるか」についてセンシティブにならざるを得ませんでした。それが、このブログのタイトルになっています。



CMISは最大公約数 

さて、CMISはこのような経緯から、既存のいろいろなECMの機能から最大公約数を取って定義し直したようなものになりました。(追記2013/10/29: 厳密に「最大」とはいえないかもしれませんが)

ECMが持ち得る諸機能のうち、このミニマムに含まれない部分をCMIS外で提供するのは、もちろん自由です。
  •  たとえば監査(Audit)機能などはCMIS仕様では定義されていませんが、Alfrescoなどは提供しています。また、ユーザ/グループはCMISでは定義されていません。しかしCMIS仕様自身が、権限設定やコンテンツの属性としての「作成者」などでユーザの存在を前提しています。その実装は各CMISサーバに任されているわけです。 

CMIS外で提供される機能はさておき、CMIS仕様内部にも、個々のECMサーバごとに実装方針を選択していいよ、という可変な部分があります。



CMISの可変性 

CMIS内部での可変性には2種類あります。Capabilityと呼ばれる、どの実装方針を選択したのか示す情報と、もう一つは、名前はついていませんが仕様上いくつかの選択肢がゆるされている場合です。

 

Capability 

CMISサーバではリポジトリを指定してその中のファイルやフォルダを操作しますが、リポジトリ全体のメタデータであるRepositoryInfoの中にCapabilityという項目があります。これは簡単に言えばそのサーバでどの機能がON/OFFになっているかを示すものです。
  • たとえば、OrderBy CapabilityがONなら、クライアントは名前や作成日時などでソート済みのコンテンツ一覧を要求できますが、OFFなら順序が保証されません。
  • たとえば、Multifiling / Unfiling CapabilityがONならサーバは1つのファイルを複数の親フォルダに格納したり、どのフォルダにも属さないファイルの存在を許可できます。 
クラアントは、サーバがどのCapabilityを提供しているか知ることができます。様々なCMISサーバに接続する可能性がある汎用CMISクライアントは、サーバごとに必要なCapabilityが提供されているか事前にチェックして、提供されていない場合はワークアラウンドを実行する、といった戦略が必要になってきます。 
  • たとえば、コンテンツのチェンジログをクローリングするCMISクライアントは、Changes CapabilityがONならチェンジログを取得できますが、OFFの場合はワークアラウンド(そのサーバがCMIS外でチェンジログを提供していればそれを取得するなど)を取る、など。

仕様上、複数の選択肢がある場合

Capabilityのように明示的に「このサーバはこの機能を提供すると保証します」と宣言があるわけではないけれど、仕様書で「あなたのサーバがどちらの挙動をするかはお好みで」と書かれているものがあります。 
  • たとえば、ドキュメントのメタ情報を更新するsetPropertiesメソッドやドキュメントのファイル実体を更新するsetContentStreamメソッドで、これらのメソッドを実行したらドキュメントのバージョンを上げる/上げない、はサーバが任意に実装方針を選択します。どちらを選択したか告げるCapabilityは存在しません。ちなみにNemakiWareではどちらもマイナーバージョンアップ(e.g. 1.0 → 1.1)することにしています。マイナーにするかメジャーにするか、なんてこともサーバ側の自由です。 
どういう挙動になるのかクライアントからは事前に知ることができませんが、このようなケースは仕様書上それほど多くあるわけではないですし、Capabilityほど派手に挙動が変わるものでもありません。それでも、CMISが規格として公約数をとった影響か、仕様としてカッチリ固定されていない部分がままあるという印象を受けます。



デファクトスタンダードとしてのApache Chemistry

ここまで、CMISの機能セットについて論理的な特徴を説明してきましたが、CMISに準拠した製品を作る上でデファクトスタンダードとなっているApache Chemistryライブラリについても説明したいと思います。


Apache Chemistryとは

Apache ChemistryはCMIS仕様のオープンソースな実装ライブラリです。Apacheのtop levelプロジェクトになっているようです。近々CMIS and Apache Chemistry IN ACTIONという書籍(洋書)も出るようです。

なんで"Chemistry"という名前なのかというと、CMIS(シーミス)を"Content"の音でケーミス?と呼ぶこともあるから、みたいです。

Chemistryのコミッタの多くはCMIS仕様の策定メンバと重なっているようです。仕様と実装は区別しないといけませんが、CMISの挙動でよくわからないときはChemistryのJIRAにあたってみるのもいいかもしれません。

ライブラリとしては、サーバ用とクライアント用から成っています。サーバ用はJavaによるOpenCMIS一択で、クライアント用にはJAVA/Python/PHP/.Net/Objective-Cによるライブラリが存在しています。
CMISが複数のECMに共通する仕様であるように、そのデファクトスタンダードな実装ライブラリであるChemistryも多くのECMで利用されています。Wikiにあるものを挙げると、Alfresco, Nuxeo, SAP, Open Text, Liferay……


(Chemistry固有の制約)

というのはほとんどないと思いますが(CMIS仕様あっての話なので)、稀に、「仕様によればpropertyの値がnullでも許されるが、OpenCMISではエラーになる」みたいな細かい問題はあったようです。ほとんどバグのレベルと言っていいと思いますが、一番開発が進んでいるOpenCMISでも今もときどきバグfixがあります。

また、OpenCMISライブラリだけ独自に対応してくれることもあります(Atomバインディングでは普通返されないchangeTokenをOpenCMISライブラリでは特別に返してくれる、など)。 デファクトスタンダードとはいえ、アドホックな対応になるので、どこまで依存させるかの判断になります。

なんにせよ、CMISを実装していくためにCMIS仕様上の文言を解釈するとき、OpenCMISがどう実装しているのかという視点も重要になることは間違いありません。

なお余談ですが、CMIS仕様自体に「バグ」があることもあります :)
https://tools.oasis-open.org/issues/browse/CMIS-757



いっそCMISに準拠しない

さて、このブログのテーマは「CMISに準拠しているとどう嬉しいのか」ではないので、CMISに準拠しないパターンも書いてみたいと思います。

とはいっても、もちろんCMISで定義されていない機能はCMIS外で実装すればいいだけなので、ここで述べるのは「CMISの機能のうちのいくつかを単に提供しない」のと、「CMIS機能を通じて情報をやりとりするときに、CMIS外のデータを紛れ込ませる(&そのデータに基づいてCMIS外のサービスを行う)」の二つです。


「特定の機能を提供しない」

まず、CMISの機能のうちいくつかを提供しない場合ですが、ドキュメントやフォルダはCMISで提供したいがポリシーやリレーションシップなどのオブジェクトは使わない場合、その部分のメソッドを実装しない / モックに留める、ということが考えられます。CapabilityでOFFにできるのであればOFFと宣言すればよいですが、そうでない(=CMISとして必須)場合は、もうCMIS準拠していると胸を張って言うことは出来なくなります。しかし、CMISは様々なECMから機能を抽出したものなので、用途によってはポリシーなど不要で、提供しなくても他の部分への影響はほとんどないわけです。また、CMIS1.0からCMIS1.1を追加で実装するにあたって、セカンダリオブジェクトなどは実装したけれどもバルクアップデート機能はサポートするつもりがない、というケースは今後現実的にはあり得る話だと思います。


「CMIS外のデータを紛れ込ませる」

CMISは、サーバとクライアントの実際の通信にWebServicesバインディングとAtomバインディング(とCMIS1.1ではBrowserバインディング)を定めています。データはXML(かJSON)でやり取りされるので、その中にCMIS外のデータを紛れ込ませれば、なにかと便利なときがあります。
  • たとえば、Alfrescoのaspectのような情報。これはCMIS1.1でセカンダリタイプが定義されたことで、CMISの枠内に取り込まれましたが、CMIS1.0しか対応していなければCMIS外のデータになります。
  • また、コンテンツの権限設定情報であるACLが、特定の親コンテンツから特定の子コンテンツに継承されるか否かは、実はCMISでは表現できません。なんらかの意味で「継承」されているなら、親コンテンツACLへの変更を伝播する/しないはCapabilityやメソッドの引数で調整できるよ、とは書いてあるので、「継承」概念自体は前提されているのですが……。クライアントからACL継承フラグを直接設定できるようにしたい場合、サーバがフラグをCMIS外のデータとして提供できると好都合です。
CMIS外のデータは、もちろんCMISでサポートされていませんが、サーバ側のデファクトスタンダードであるOpenCMISライブラリではCmisExtensionクラスを提供しています。これはサーバ/クライアント間がCMISとしてやり取りするxmlの中に、CMIS外のデータを埋め込むためのものです。汎用性はもちろん保証されませんが、特定の(OpenCMISベースの)CMISサーバと通信するクライアントがCmisExtensionをパースしたり送信したりするケースが考えられます。

NemakiWareでも、上述のACL継承フラグをCmisExtensionで提供しています。NemakiWareの場合、クライアントはApache Chemistryではなく、RailsベースのActiveCMISライブラリを使っているので、CmisExtnsionをパースするためのコードを追加しています。(そのうち本家にpush予定)

既存のECMサーバであれば、CMISで表現できない機能は無理にCmisExtensionで押し込まず、元々のAPIや規格でのみ提供することも考えられます。しかしNemakiWareはCMIS準拠によるメリットを発揮するため、どんな機能でもできる限りCMISだけで表現しようとしています。そしてどうしてもCMISで表現できないときには、まずCmisExtensionを検討し、それでも難しい場合には独自のREST APIを実装する、という判断をしています。



CMISとデータベースのあいだ

さて、少し話は変わりますが、CMIS仕様を一言で説明したいとき、「CMISはECMのSQLだ」ということがよく言われます。SQLがさまざまなDBを統一的に操作できるように、それと平行的に、CMISはさまざまなECMサーバを統一的に操作できる共通言語だというわけですね。

とはいえ、ドメインモデルとサービスを論理的に定めるCMIS仕様と、その背後にあってデータ実体を格納するデータベース(厳密にはInMemoryサーバとかもあります)との間には大きな開きがあります。どう大きく開いているかというと、当然CMIS仕様を満たすためにいろんな実装をしないといけないのと、その実装には可変な選択肢が多くて実装方針を決めないといけないことが多いのです。
  • 前者については、デファクトスタンダードとしてのApache Chemistryがある程度までは負担を減らしてくれます。しかしそれでも、実際にNemakiWareを実装してみた感想としては、サーバではOpenCMISライブラリとDBの間に大きな開きがなお残されています。CMISで定義されたエラーを正確に返したり、フォルダツリーを辿りながらコンテンツを削除し、途中で失敗した場合は特定の出力を返すよう実装したり……。OpenCMISライブラリは、xmlによる通信部分とそのパース、および各サービスメソッドへの振り分けやデフォルト値の設定まではやってくれますが、50個近いメソッドの中身は各サーバが実装しないといけません。しかしそれらの実装は、極端にDB依存な最適化をしない限り、誰がやってもある程度似たものになるはずです。
  • また、後者については、既存ECMが自らをCMIS化するときは選択肢が多くてやりやすかったでしょうが、新しくECMサーバを作ったり、既存のCMS製品をCMIS化したい場合には、CMISのコア機能さえ実装できてCMISクライアントと通信できれば充分で面倒くさいことは考えたくない、というニーズも考えられます。
したがって、これから新しくCMISを実装する場合、特に強い拘りやパフォーマンス上の問題がない限り、DBの単純なCRUD操作さえ書けば、あとの部分はすべてライブラリとして用意されているのが便利です。そして現在、NemakiWare(+OpenCMIS)をそのようなライブラリとして整備中です。

NemakiWareはバックエンドにCouchDBがあることが特徴の一つですが、実はデータベースをほかのもの(MySQLや、ユーザ/グループ部分だけLDAPなど)に取り換えることができる設計になっています。もっとも、キャッシュ機構なども含めるとまだ少し取り換え手順は複雑なので整備が必要ですが、機能的にCouchDBに依存していたSolr連携の部分は私の開発環境では既に解決していますので、近いうちにDB取り換え可能なNemakiWareをお見せできると思います。

「DB部分」には、DB以外のものを入れてもかまいません。たとえば、既存のECMサーバでCMISをサポートしていないものでも、コンテンツのCRUD APIをNemakiWareに繋ぐことで、比較的簡単にCMIS化できるでしょう。

また、NemakiWareはCMISで提供されていない機能であってもECMとして必要最低限と思われる機能(ゴミ箱からのリカバリや、ユーザ/グループ管理など)を独自に実装しています。CRUDを一式用意するだけで、自動的にそれらの機能も使えるようになるわけです。



おわりに

NemakiWareは、AlfrescoなどのECMサーバと異なり、最初からCMIS仕様に準拠することを目指して開発されました。いろいろな製品を「CMIS化」するモデルケースと成り得るのではないでしょうか。最後の、OpenCMISとDBのあいだを埋めるという話はまだコンセプト段階ではありますが、興味を持たれた方は、ぜひgithubのNemakiWareリポジトリを覗いてみてください。ソースコードのpushやコメントなど、いつでも歓迎しています!
https://github.com/NemakiWare/NemakiWare

Liferay Webコンテンツ表示ポートレットの紹介

$
0
0
こんにちは。かわべです。
今回はLiferayのポートレット群の中でも使用頻度の高い、Webコンテンツ表示ポートレットについて紹介します。紹介にあたって使用するのはLiferay CE6.2です。何気なく進めていきますが、こちらは2013年11月にリリースされたLiferay CEの最新バージョンです。6.1と比較すると全体のUIが刷新されていることがわかります。もちろん変更されたのは外観だけでなく、新たに追加された機能もあるので、EEがリリースされたらそのあたりの話もしていきたいと思います。

概要


WebコンテンツというのはLiferayが管理するHTMLページのようなものです。Liferayには多様な機能がありますが、まず中心的な機能としてコンテンツの管理があります。だからこそWebコンテンツの扱いは直感的に可能になっています。Webコンテンツの作成、それを表示するためのポートレットの配置、どちらもHTMLの知識がなくても、簡単な操作のみで意図した画面を作成することができます。
Webコンテンツ表示ポートレットを利用すれば、1ページ内に複数のWebコンテンツを好きなレイアウトで表示させることができます。編集や権限設定はページ単位ではなくポートレットごとに行うため、Liferayを利用せずに作成するページよりも細かく、かつ簡単に設定できます。もちろん、Webコンテンツにはテキストだけでなく画像や動画なども含めて取り扱うことができます。

それでは、Webコンテンツ表示ポートレットを利用して、サイトページにWebコンテンツを表示させてみましょう。

なお、今回は以下の手順はすべてSite Ownerのロールを割り当てたユーザで行っています。(権限については記事の後ろの方で少し触れています)

Webコンテンツ表示ポートレットの追加

 

まずは、Webコンテンツを表示させたいページに移動します。そこで画面左に表示される「+」をクリックします(こちらはCE 6.2から追加されたボタンです)。左側に表示される「追加」画面から「アプリケーション」を選択すると、現在のページに追加可能なポートレットの一覧が表示されます。


「Webコンテンツの表示」ポートレットは「コンテンツ管理」ポートレット群の中にあります。

ポートレット名の先頭に表示されるアイコンによって、単一ページに複数追加することが可能か否かが判別できます。「Webコンテンツの表示」は複数追加可能なポートレットです。ポートレットの横にある「追加」をクリック、もしくはポートレット名をページへとドラッグすれば、ポートレットの追加は完了です。

 
ポートレットには「このポートレットに表示するWebコンテンツを選択するか新しくWebコンテンツを追加してください。」という文言が表示されています。

「表示させるWebコンテンツの選択」をクリックすると、既存のWebコンテンツから表示させるものを選択できます。「追加」をクリックすると、Webコンテンツを新規追加するための画面へと遷移します。

今回は「追加」をクリックし、このポートレットに表示するWebコンテンツを新規追加します。

Webコンテンツの追加

 

Webコンテンツの作成には、効率よく目的に沿ったものを作成するために「ストラクチャ」と「テンプレート」という仕組みが用意されていますが、今回は「デフォルトのストラクチャ・テンプレートなし」でいきます。

Webコンテンツはブラウザエディタから作成するため、HTMLの知識がなくても問題ありません。


手元でいい感じの写真を探したところ、先日社員旅行で訪れた北海道の写真が発見されたので、これを使いながらコンテンツを作成してみます。写真のアップロードなども画面から簡単にできます。ブログの記事を書くのと同じですね。

知識のある人向けにはHTMLタグを直接操作できるモードも備わっているので、複雑な作りにすることもできます。


後のコンテンツ管理のため、コンテンツに「カテゴリ」「タグ」を設定することもできます。
  • カテゴリは、管理者が事前に作成した項目から選択します。カテゴリが作成されていない場合は設定できません。
  • タグは、既存タグの選択だけでなく、コンテンツの作成者自身も追加することができます。
下の画像では、カテゴリに「イベント」、タグに「2013」「写真」を設定しています。




スケジュールでは「公開開始日時」「公開終了日時」「レビュー日時」を指定することで、Webコンテンツの表示期間を設定できます。指定日にのみ公開したい、という要望も簡単に叶えられます。



コンテンツを作成し、諸々の設定を終えたところで「公開」をクリックすると、


Webコンテンツを作成し、表示させることができました!ブラウザエディタの操作だけで完了です。

同じ手順を繰り返せば、Webコンテンツ表示ポートレットを複数並べることもできます(ポートレットを横に並べたい、いや縦に並べたい、というようなページレイアウトはページ設定で変更可能です)。


左側に表示される目のマークをクリックすると、マークがオレンジ色になり、編集権限のないユーザとしての表示確認モードになります(上の画面)。

再度目のマークをクリックすると下のように緑色に戻り、編集・設定モードとなります。


このモードではWebコンテンツを編集(更新)することや、ポートレット内に表示されるWebコンテンツを変更することができます。

Webコンテンツの追加(他の方法)

 

Webコンテンツの追加画面へは、別の場所から遷移することもできます。
上部の「システム管理→サイト管理→コンテンツ」でも遷移可能です。



ページ左側の「+」をクリックすると表示される追加画面からの「新規追加→Webコンテンツ」でも追加画面へ遷移します。この場合、現在いるページにWebコンテンツ表示ポートレットが自動的に追加され、その中に作成したWebコンテンツが表示されるところまで行われます。



権限(ロール)について

 

今回はSite Ownerのロールですべての作業を行いましたが、Liferayでは細やかな権限設定が可能なので、今回行った以下のような作業を分担させることができます。
  • ポートレットの追加
  • コンテンツの追加・編集
  • ポートレットに追加するコンテンツの選択
  • 表示されるコンテンツの承認(※ワークフローを連携させて実現)
たとえば、サイト全体の複雑なポートレット構成は管理者が担当し、表示させるコンテンツの作成は技術知識のない担当者に任せる、といった運用が可能です。

また、Webコンテンツポートレット自身にも適切な権限を設定すれば、ユーザによって見えるコンテンツ・見えないコンテンツを管理することができます。

このような権限管理は、Liferayのようなポータル製品を利用してサイトを管理するメリットのひとつだと言えるでしょう。

その他の機能

 

ポートレットに表示させるWebコンテンツを選択する際、様々なオプションがあることに気付かれると思います。それぞれを有効にすることで、名称通りの機能が利用できるようになります。

 
必要に応じてこれらのオプションも使用すれば、より目的に沿ったWebコンテンツの扱いが可能になると思います。

おわりに

 

例として作成したのがシンプルなWebコンテンツ(そしてページ)であるため、Liferayの魅力が伝わりきっていないのではないかという懸念はありますが、めげずに次のLiferayの記事では同じく基本的な部分である「ドキュメントとメディア」ポートレットについて紹介をしようと思います。引き続き参考にしていただければ幸いです。

Liferay Documents and Mediaポートレットの紹介

$
0
0
こんにちは、かわべです。寒くなってきましたね。電車に乗ったり人の多い場所に行ったりする機会がめっきり減ったので、この冬は風邪を引かずに越せるのではないかとちょっと期待しています。ひとりぐらしの風邪はつらいのです!

ブログを書くのも数回目になったので、導入部分もちゃんと書いてみました。さて、本日の記事ではLiferayのドキュメントとメディアポートレットについて紹介します。

はじめに

 

Liferayでは「ドキュメントとメディア」というポートレットを通じてリポジトリを利用することができます。ここでいうリポジトリとは、ローカル環境に保存するようにオンラインのファイルサーバにファイルを保存する機能です。ファイルサーバと同様に、フォルダを作成して階層的な管理ができます。ファイルはドキュメントに限らず、音楽、画像、動画などといったメディアファイルでもOKです。デフォルトの設定ではLiferayが稼働するサーバがリポジトリとなりますが、CMISに準拠した外部のリポジトリを連携させ利用することもできます。

リポジトリに保存するファイルには、社内やチームのルールに合わせて管理しやすくするための仕組みとして「タイプ」と「メタデータ」を設定することができます。Webコンテンツの説明時に出てきた「カテゴリ」と「タグ」も設定可能です。

詳細はポートレットを使った作業を通して見ていきましょう。ドキュメントとメディア管理のポートレット、表示のポートレットを順番に紹介していきます。
前回と同じくLiferay CE6.2を使用し、特に記述がない限りSite Ownerのロールを備えたユーザで作業をやっていきます。

「ドキュメントとメディア」ポートレット


これはドキュメントリポジトリへファイルを追加したり、ファイルを編集したりするための管理ポートレットです。上部のドックバーからアクセスする管理画面に表示されるものと同じで、管理画面へのショートカットとして機能します。
 
こちらのポートレットは1ページに1つしか追加できず、同一サイト内ならば別のページに追加しても表示される内容は同じです。Sample Companyサイトのページに追加したところが以下です。


ファイルの追加

リポジトリにはまだ何もないので、ファイルを追加するところからやってみます。「追加」をクリックすると、追加可能なファイルのタイプが表示されます。

 
タイプとは、ファイルに設定したいメタデータを集合的に管理するための概念です。今回はContractを選択して、契約書を追加してみます。アップロードするファイルを選択し、
メタデータを設定します。


"Effective Date", "Contract Type"などの契約書を管理するためのメタデータが設定可能となっています。

保存をクリックすると、リポジトリにファイルが保存されました。この時点でファイルは別のユーザからもアクセスできるようになります(もちろん権限次第ですが)。


ドキュメントに対するアクション

では続いて、リポジトリ内のファイルに対してどのような操作が可能かを見ていきます。一覧表示の状態でファイル右側に表示される▼をクリックすると、そのユーザが可能な操作が表示されます。



今はSite Ownerなので何でもできます。だいたい名前の通りですが、少しだけ説明を。

  • 「編集」とはファイル自身(ここまでの例だと契約書として保存したWordファイルの中身)を編集するわけではなく、ファイルのメタデータを編集します。例えばタイトルやタイプを変更したり、どのファイルを指し示すかも変更できます(別のファイルをアップロードします)。
  • 「チェックアウト」をすると、自分がファイルを編集している間に他のユーザが編集できなくなります。編集後、保存とチェックインをすると変更が反映され、バージョンが自動的に更新されます。
チェックアウトすると鍵マークが表示されます。



Contractのメタデータのひとつ、"Status"を更新して、保存とチェックインをしてみると、



こんなふうにバージョンが更新されます。
  • 「チェックアウトのキャンセル」をすると、ファイルのバージョン更新は行われず、再度他ユーザも編集可能となります。 

ドキュメントタイプとメタデータセットの管理


権限をもつユーザならばタイプ(ドキュメントタイプ)を作成することもできます。タイプを適切に作成すれば、一貫性のあるファイル管理が容易になります。
例として「職務経歴書」というタイプを作成し、メタデータを関連付けてみます。

タイプの作成は「管理」から行います。



「ドキュメントタイプ」を選び、「追加」をクリックすると、新規ドキュメントタイプの追加画面へ遷移します。名称、説明、メタデータを定義します。



  • 「メインメタデータフィールド」で作成するのは「職務経歴書」というタイプに固有のメタデータです。
  • 「追加メタデータフィールド」は他のタイプと共通メタデータを使用したい場合に設定します(今回は設定しません)。

タイプを作成すると、新規追加や表示フィルタリングの選択肢としてそのタイプが表示されます。



すでに作成済のファイルを「編集」すればタイプを変更し、そのタイプに必要なメタデータを設定できます。いったん「通常のドキュメント」として追加したファイルのタイプを今作成した「職務経歴書」へと変更してみると、こんな風に編集できます。



職務経歴書にこんなメタデータが必要なのかというところは置いておいてください・・・例なので!

「ドキュメントとメディアディスプレイ」ポートレット


もう1つのポートレットの紹介へ移ります。といってもこちらはごく簡潔に。「ドキュメントとメディアディスプレイ」ポートレットは、リポジトリ内部のファイルを表示させるために使用するポートレットです。このポートレットは1ページ内に複数配置できます。配置後は、こんな設定が可能です。




リポジトリ内のどのフォルダをルートとするかを選択して、そのフォルダ内のファイル、サブフォルダを表示させます。検索バー、アクションなどを表示させるかどうか選択できます。



こんな感じに表示できます。

プレビュー機能


両方のポートレットに共通する機能として、ファイルのプレビュー機能があります。PDFファイルの場合、特別な設定をする必要はありません。PDFファイルを保存すると、自動的にプレビューが表示されます。



PDFファイル以外もプレビューしたい場合は、少し設定をしてアプリケーション(ImageMagick, OpenOfficeなど)とLiferayを連携する必要があります。これはAdministratorとして、
コントロールパネル→編集→サーバ管理→外部サービスから設定することができます。


おわりに

 

ドキュメントとメディアポートレットについて、少しでもイメージを持っていただけたら幸いです。次のLiferayの記事では6.2の新機能を紹介しようと思います。引き続きよろしくお願いします。

Activiti BPM Platformことはじめ(インストール方法とか)

$
0
0
こんにちは。最近自動車を買い替えたのですが、買い替え後10日で娘に車内で吐かれて意気消沈気味のおおたにです。

今回は低テンションのままActiviti BPM Platformの事始め的なお話をしようかと思います。


Activitiとは


Activitiワークフロー:チュートリアル(パート1)という記事にもあるとおり、Activiti BPM PlatformとはオープンソースのBPMエンジン(ワークフローエンジン)です。Alfresco社がスポンサーとなっていますが、プロジェクトとしては独立しています。特徴は以下のとおりです。
  • オープンソース(Apache License, Version 2.0)
  • 無償利用可能
  • BPMN2.0ネイティブ対応
  • 軽量(パッケージではなく、バックエンドで組込み的な形で利用されるもの)

例えば、AlfrescoはBPMエンジンとしてActivitiを利用しています。まさに組込みでコアのライブラリを利用しているだけですので、Alfrescoを利用していてActivitiを意識することはまずありません(ユーザは、です。開発者は意識します)。

とはいえ、まず簡単にActivitiを試してみようと思った場合には、スタンドアロンで実行可能な一式のツールが提供されているので、これらを利用してみるとActivitiの機能について理解を深めることができると思います。
  • Activiti Explorer : ActivitiのWebフロントエンド。Activitiの機能を一通り触ることができる。
  • Activiti Modeler : Webベースのプロセス定義管理ツール。プロセス定義の作成・編集・インポート・エクスポート・デプロイなどを行うことができる。現バージョンではActiviti Explorerに統合されている。
  • Eclipse Designer : プロセス定義を作成するためのEclipseのプラグイン(こちらは実際のプロジェクトでも利用可能な開発ツール)。

そこで、本稿ではActivitiのインストール・アクセス方法について説明しようと思います。重要なことなのでもう一度言いますが、Activiti ExplorerはActivitiのBPMエンジンを利用するための必須アプリケーションではなく、あくまでもBPMエンジンを試用してみるためにActivitiが提供している標準的なUIの1つ、ということになります(Activitiの機能を一通り触れるので便利といえば便利なんですけどね)。


Activitiのセットアップに必要なソフトウェアのダウンロードとインストール


Activitiのセットアップには以下のソフトウェアが必要になります。
  • JDK6以降
  • Web Application Server(Tomcat等)
  • Activiti(現在の最新版は5.13)
  • RDBMS(H2以外を利用する場合。MySQL, PostgreSQL, Oracle, DB2など)

JDK6以降

Java SE DownloadsからJDKをダウンロードし、インストールします。筆者はJDK7を利用しています。

Web Application Server

ここではTomcatを使います。Apache Tomcat - Apache Tomcat 7 DownloadsからTomcat7をダウンロードし、適当なディレクトリに展開します。Tomcatを展開したディレクトリを<tomcat_home>と表記します。

Activiti

ここではTomcatを使ここからダウンロードし、適当なディレクトリに展開しておきます。

RDBMS (optional)

デフォルトではH2 Databaseをインメモリモードで利用しますが、その他のデータベースを利用する場合は別途RDBMSをインストールし、Activitiの設定を変更する必要があります(Activiti database setupを参照のこと)。また、H2 Database以外を利用する場合は、対応するJDBCコネクタを入手してクラスパス上にコピーする必要もありますのでお忘れなく。


Activitiのセットアップ


これでActivitiのセットアップの準備ができました。残るはActivitiアプリケーションをTomcatにデプロイするだけです。Activitiモジュールを展開したディレクトリのactiviti-5.13/wars/activiti-explorer.warを<tomcat_home>/webappsにコピーし、Tomcatを起動するだけです。

Tomcatの起動は<tomcat_home>/bin/startup.bat (or startup.sh)をキックするだけです。正常にTomcatが起動したらセットアップは完了です。ちなみに、停止する場合は先ほどのディレクトリのshutdown.bat (or shutdown.sh)をキックします。


動作確認してみよう


セットアップが完了したら、ブラウザでアクセスして確認してみましょう。URLは http://localhost:8080/activiti-explorer/ になります。ユーザはデフォルトでkermit, gonzo, fozzieの3ユーザがデモ用として登録されています(パスワードはユーザ名と同じです)。


ユーザID、パスワードを入力し、以下の画面が表示されたら動作確認完了です。




今回はここまで、実際の使い方などについてはまたの機会にとさせていただきます。
なお、ActivitiのドキュメントはUser Guideに一通りの情報がまとまっています。例えば、Activiti Explorerの説明はこちらに載っていますので、興味がある方は是非Activitiをセットアップし、触ってみてください。

(2013/07/23追記) 「Activiti BPM Platformことはじめ2(Activiti Explorerの使い方とか) 」を公開しました。
 (2013/07/25追記) 「Activiti BPM Platformことはじめ3(Activiti Modelerの使い方)」を公開しました。
Viewing all 244 articles
Browse latest View live