JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay...

34
株式会社イージフ 戸谷 2013 © JJUGナイトセミナー オープンソースポータルLiferayの紹介と Liferay IDEを使った簡単ポートレット開発 2013年03月27日 2013329日金曜日

description

2013/3/27に行われた日本Javaユーザーグループのナイトセミナーで発表した資料です。

Transcript of JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay...

Page 1: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

株式会社イージフ 戸谷

2013©

JJUGナイトセミナーオープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013年03月27日

2013年3月29日金曜日

Page 2: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

自己紹介

2

戸谷 剛(とたに たけし)

•株式会社イージフでオープンソースプロダクトのコンサルティングをやっています•主にAlfrescoとLiferayの導入支援に従事

•趣味•自転車 ... レース観戦•ボードゲーム ... 少しだけ

•Javaとの出会い•大学のころJDK1.2

2013年3月29日金曜日

Page 3: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayとは

32013年3月29日金曜日

Page 4: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポータルの定義

Liferay is “Portal"

4

ポータル製品の特長

•インターネット利用の出発点となるサイト•さまざまな情報を集約して表示

•1つのポータルソフトウェアで複数のポータルサイトを管理できる。

•アクセス権管理を含む各種管理をサイトごとに移譲できる。

•ページ上に情報を表示/操作を行うためのコンポーネント(ポートレット)を追加/編集する仕組みを持っている。

2013年3月29日金曜日

Page 5: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayポータルの歩み

5

2000年

非営利団体向けのポータルとして開発される

2012年

Liferay社として法人化

Version 4リリース

Version 5リリース

Version 6リリース

Version 6.1リリース

2013年3月29日金曜日

Page 6: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayポータルの現在のポジション

6

Gartner社のポータル製品の評価において、高い評価を獲得

“Liferayポータルは比較的軽量でありながら、セキュリティ・管理のしやすさ・プラットフォーム非依存などJavaの長所を製品の強みに生かしている。Liferayの相互運用性やさまざななアプリケーションサーバ上での動作性により、他社のJava資産を簡単に活用することができる。顧客からのレポートによると、Liferayは簡単にインストールし使うことができ、他のJavaベースのポータル製品の購入/保守と比べて、低コストである。”

2013年3月29日金曜日

Page 7: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Community Edition

Liferayポータルのエディション

7

Enterprise Edition

•無償で利用可能•Enterpriseに先行してリリースされ、試験的に機能が追加される

•サブスクリプションを購入することで利用可能•深刻なバグに対するホットフィックスの提供•スケーラブルなシステム構成を実現するための追加機能あり

2013年3月29日金曜日

Page 8: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayアーキテクチャ

82013年3月29日金曜日

Page 9: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

アーキテクチャ: ユースケース

9

Webコンテンツ管理 コラボレーション パーソナライゼーション

文書管理 ユーザ管理 ポータル管理

ドキュメントライブラリ Wiki 掲示板

Webコンテンツ ステージング サイトテンプレート

イントラサイト カスタマーポータル パートナーポータル

コラボレーションサイト ビジネスアアプリケーションポータル

2013年3月29日金曜日

Page 10: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

アーキテクチャ: ドメイン

10

サイト

ユーザ

グループ

サイトサイト

ロールWebページ(s)

ページページページページ

ポートレット

2013年3月29日金曜日

Page 11: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

アーキテクチャ: コンポーネント

11

Spring Hibernate Lucene

StrutsVelocity Freemarker

JackRabbit JCRApache ChemistryAxis

JSP/Servlet

alloy UI

JavaMail JNDi

jDBC jTS ...

2013年3月29日金曜日

Page 12: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

アーキテクチャ: サービスレイヤ(パッケージ)

12

portal-web

portal-service

portal-impl

JSP

ServiceUtil Service(I/F)

javascript

ServiceImplポータル本体 Embedded Portlet

2013年3月29日金曜日

Page 13: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

アーキテクチャ: 配置

13

Webサーバ(Proxy)

RDBMS

NAS Storage

Appサーバ

2013年3月29日金曜日

Page 14: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポートレット標準と動作モデル

142013年3月29日金曜日

Page 15: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポートレット標準

15

JSR-168: Java Portlet Specification

•ポータル、ポートレットの定義•ポートレットのライフサイクル•ポートレットのリクエスト処理 → later!•ポートレットAPI

JSR-286: Java Portlet Specification Version 2.0•ポートレットのイベント処理•複数のポートレット間で協調した動作を実現できる•リソース供給(Resource Serving)•etc

2013年3月29日金曜日

Page 16: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポートレットのリクエスト処理

16

Portletコンテナ ポートレットA ポートレットB ポートレットC

processAction(...)

render(...)

render(...)

render(...)

2013年3月29日金曜日

Page 17: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayのカスタマイズパターン

172013年3月29日金曜日

Page 18: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayのカスタマイズ方法

18

カスタマイズ手段と目的

ソースコード修正

モジュール差し替え

モジュール追加

設定(ファイル)変更

“機能”差し替え

“機能”追加

UI変更

カスタマイズ手段 カスタマイズ目的

2013年3月29日金曜日

Page 19: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayのカスタマイズ方法

19

Liferayのカスタマイズ手段

“機能”差し替え

“機能”追加

UI変更

カスタマイズ手段 カスタマイズ目的

ソースコード修正

モジュール差し替え

モジュール追加

設定(ファイル)変更

2013年3月29日金曜日

Page 20: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayのカスタマイズ方法

20

Liferayプラグインの種類

フック

ポートレット

テーマ

レイアウト

Ext

JSP差し替え, アクションイベントの追加, サービスの差し替え

WebページのLook&Feel (Velocity, freemarkerで記述)

ページ内のレイアウト

特殊なプラグインクラス定義の差し替え

2013年3月29日金曜日

Page 21: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

デモ: ポートレットを作ってみよう

212013年3月29日金曜日

Page 22: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferay SDKとLiferay IDE

22

•antによるビルド環境の提供•antコマンドにより自動的にプロジェクトのひな形を生成

Liferay SDK

Liferay IDE•Eclipseベース•最新版は1.6.2•Liferay IDEをGUIから利用できるようにしたもの

2013年3月29日金曜日

Page 23: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

serveResourceを使ったAjax読み込み

23

serveResourceの動作•JSR-286で追加•ポートレットごとにリクエストを処理可能

Portletコンテナ ポートレットA ポートレットB

serveResource(...)

2013年3月29日金曜日

Page 24: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポートレット完成への道筋

24

•VIEW以外のモード(EDITなど)の実装

•日本語ロケールのメッセージバンドル化

•Porletカテゴリの設定

•Alloy UI読み込みの最適化 ( Liferay.provideの使用)

•完成!

2013年3月29日金曜日

Page 25: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

Liferayプラグイン動作の内側

252013年3月29日金曜日

Page 26: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

プラグインポートレットはなぜ動く?①

26

•プラグインはwebアプリケーションとしてwebapps以下に展開されるプラグインポートレットのデプロイ

<LIFERAY_HOME>

tomcat

deploy

webapps

プラグインポートレット.war

プラグインポートレット

ROOT

2013年3月29日金曜日

Page 27: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

プラグインポートレットはなぜ動く?②

27

プラグインはポータル本体とは別のアプリケーションとしてデプロイされるが、ポータル本体の一部として動作するのはなぜか?

Portletコンテナ ポートレットA

render(...)

ROOTコンテキスト

ポートレットAアプリのコンテキスト

2013年3月29日金曜日

Page 28: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

プラグインポートレットはなぜ動く?③

28

Portletコンテナ ポートレットA

render(...)

ROOTコンテキスト

ポートレットAアプリのコンテキスト

Portletコンテナ

ポートレットAサーブレット

ポートレットA.include()

ポートレットA

render(...)

2013年3月29日金曜日

Page 29: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

liferay-serviceパッケージの存在理由

29

逆に、プラグイン(ポートレット)からLiferay本体のサービスを呼び出せるのはなぜか?

プラグイン

portal-service

portal-impl

Porlet

①アプリケーションサーバ全体で参照可能 ②ポータル本体のクラスローダを使用

ServiceUtil Service(I/F)

ServiceImplポータル本体 Embedded Portlet

2013年3月29日金曜日

Page 30: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

まとめ

302013年3月29日金曜日

Page 31: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポートレット標準の理想と現実

31

ポートレットの互換性

理想 現実

実際には、ポータル固有のサービスを呼び出す必要があるため、結局はポータル固有のポートレットとなってしまう。

ポートレットクラスの互換性は定義されているので、どのポータルへもデプロイできるはず

2013年3月29日金曜日

Page 32: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポータル採用の判断基準

32

採用のチェックポイント•複数のサイトを提供•管理の移譲•サイトごとの管理者設定•GUIからのサイト/ページ設定•パブリックサイト + ユーザ限定サイト•操作権限のコントロール•パーソナライズ•共通のUI部品の利用

失うかもしれないもの•ページレイアウトやLook&Feelの自由度•フロントエンドのjavascriptライブラリの選択:分離の限界•LiferayだとAlloy UIを基本使う

2013年3月29日金曜日

Page 33: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013.3.27 2013©

ポータルを使う理由

33

僕にはそれが楽しかったから•アプリケーションパッケージは敷居が高いと思われて敬遠されがちだが...•どのようにカスタマイズすべきかの見定め(コアのコード修正、プラグイン、設定ファイル変更?)自体が結構楽しい

•オープンソースなら最後はソースコードまで追いかけられる•Liferayそのものの進化: よりクリーンにより拡張性高く

(not ステ)マ•Liferayの導入で困っておられるならお気軽に相談下さい!

2013年3月29日金曜日

Page 34: JJUGナイトセミナー オープンソースポータルLiferayの紹介とLiferay IDEを使った簡単ポートレット開発

2013年3月29日金曜日