1
#ccc_c3
オープンソースになった
WebSphere Liberty
2
#ccc_c3
⾃⼰紹介
⽥中 孝清
• 1998年より⽇本IBM
(WebSphere Version 1.0が出た年)
• WebSphereのTechnical Sales
(会社⼈⽣ = WebSphereの歴史)
• JJUGの幹事をやっています
• 家族:妻・⼦供⼆⼈, 趣味:登⼭
3
#ccc_c3
3
OSSになったWebSphere
Open Liberty:An IBM Open Source Project
4
#ccc_c3
WebSphereのイメージ?
•重い
•導⼊とか構成とかが⼤変
•お値段が⾼い
•そもそも使ったことがない
5
#ccc_c3
Demo
1 Minute
install &
deploy
Get started fast
• サーバーの導⼊
• サーバー構成の作成
• サーバーの起動
• アプリケーションの導⼊
の⼀連の作業が,1分で可能
7
#ccc_c3
無料でダウンロード
https://openliberty.io
8
#ccc_c3
ソースコードもCloneできます
https://github.com/OpenLiberty/open-liberty
$ git clone https://github.com/OpenLiberty/open-liberty
Cloning into 'open-liberty'...
remote: Counting objects: 58072, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 58072 (delta 0), reused 1 (delta 0), pack-reused 58068
Receiving objects: 100% (58072/58072), 63.65 MiB | 531.00 KiB/s, done.
Resolving deltas: 100% (25951/25951), done.
Checking out files: 100% (33424/33424), done.
9
#ccc_c3
もちろんビルドもできます
$ cd open-liberty/dev
$ ./gradlew cnf:initialize
(中略)
$ ./gradlew assemble
(中略)
com.ibm.websphere.org.osgi.service.component, jsse, com.ibm.webspher
e.org.osgi.service.cm, jmock-2.5.1, management-agent, plugin, jfr, c
om.ibm.ws.logging.core, com.ibm.wsspi.thirdparty.equinox, charsets,
com.ibm.ws.runtime.update, commons-compress-1.10]
> Task :wlp.lib.extract_fat:autoFVT
This FAT tests the following features: [servlet-3.0]
BUILD SUCCESSFUL in 21m 22s
3350 actionable tasks: 3348 executed, 2 up-to-date
$
10
#ccc_c3
Pull Req.もバンバンきてます
https://github.com/OpenLiberty/open-liberty/pulls
11
#ccc_c3
本当にWebSphereが
オープンソースになっています
https://developer.ibm.com/wasdev/blog/2017/09/19/liberty-open-source/
12
#ccc_c3
しかも Eclipse Public License
• 商⽤利⽤もしやすいEPL 1.0で公開
o いわゆる「Permissiveなライセンス」
o 派⽣物をOSSにする義務がない
o Open Libertyを同梱した製品
Open Libertyを拡張した製品の販売も⾃由
13
#ccc_c3
製品版とOSS版
• Open Liberty
o OSS版 / コミュニティ・ベースのサポート
o Java EE / MicroProfile などのコア機能は製品と同じものを提供
• WebSphere Liberty
o 製品版 / IBMによるサポート
o Open Libertyに加えて
• Swaggerや,MongoDB・CouchDB等の追加API
• OpenID/OAuthなどのセキュリティ機能
• 耐障害性機能・問題判別機能
• GUI管理画⾯・Java Batch管理画⾯など
o Liberty Repositoryへのアクセス
(個別Featureやサンプルの導⼊)
Liberty	ND
Liberty	Base
Liberty	Core
MicroProfile
Full	Profile
Java	EE	7
Web	Profile
Java	EE	7
14
#ccc_c3
14
Libertyとは
IBMの新しいJava EEランタイム
15
#ccc_c3
20年ちかく続いてきた
WebSphereの歴史
1999
2000
2001
2002
2008
1998
2003
WAS V2.0
WAS V3.0
WAS V3.5
WAS V4.0
WAS V5.0
WAS V5.1
WAS V6.1
2004
2005
WAS V6.0
2006
WAS V6.1
Feature Pack
2007
J2EE 1.2
J2EE 1.3
J2EE 1.4
WAS V7
2009
2010
WAS V7 FP
WAS V8.0
Java EE 6
2011
WAS V8.5
WAS V8.5.5
2012
WAS V1.1
WAS V1.0
Java EE 5
2013
2014
2015
2016WAS V8.5.5.6
WAS V9
Java EE 7
10年以上前の基本設計
• モノリシックなSWアーキテクチャー
• 専⽤インストーラーでの導⼊必須
• ⾃⾝の機能で統合管理も負荷分散も
• 外部ツールでの構成・管理は不可
16
#ccc_c3
WebSphere Application Server
(WAS)の⼆つのランタイム
バージョン 提供されるWASランタイム
2011年7⽉
WAS V8.0
WAS
Java EE6 完全対応
WAS Libertyプロファイル
Servlet/JSPなど基本機能
WAS Fullプロファイル
Java EE6 完全対応
WAS Libertyプロファイル
Java EE6 Web Profile対応
WAS Fullプロファイル
Java EE6 完全対応
WAS Libertyプロファイル
Java EE7 完全対応
WAS Fullプロファイル
Java EE6 完全対応
WebSphere Liberty
Java EE7 完全対応
WAS traditional
Java EE7 完全対応
2012年7⽉
WAS V8.5
2013年6⽉
WAS V8.5.5
2015年6⽉
WAS V8.5.5.6
2016年6⽉
WAS V9.0
17
#ccc_c3
WebSphere Application Server
(WAS)の⼆つのランタイム
バージョン 提供されるWASランタイム
2011年7⽉
WAS V8.0
WAS
Java EE6 完全対応
WAS Libertyプロファイル
Servlet/JSPなど基本機能
WAS Fullプロファイル
Java EE6 完全対応
WAS Libertyプロファイル
Java EE6 Web Profile対応
WAS Fullプロファイル
Java EE6 完全対応
WAS Libertyプロファイル
Java EE7 完全対応
WAS Fullプロファイル
Java EE6 完全対応
WebSphere Liberty
Java EE7 完全対応
WAS traditional
Java EE7 完全対応
2012年7⽉
WAS V8.5
2013年6⽉
WAS V8.5.5
2015年6⽉
WAS V8.5.5.6
2016年6⽉
WAS V9.0
サーバー・カーネルを
新規に作成
既存機能を
新カーネルに移植
新機能を
次々と開発・実装
すでに多くのお客様の
商⽤環境で稼働
18
#ccc_c3
WebSphere/Open Libertyの特徴
• 徹底的にモジュール化されており
軽量かつ⾼速に動作する
• 構成ファイルが簡潔で可搬性があるため
運⽤の⾃動化やツールの使⽤が容易
• 新しい機能が迅速に提供される
19
#ccc_c3
特徴1:
Libertyは徹底的にモジュール化されている
Servlet JSP JSF SSL
JAX-RS JSON JPA
JAX-WS JAX-B JDBC JTA
JMS CDI JNDI
EJB lite EJB MDB AutoScale MongoDB
20
#ccc_c3
構成された機能だけが有効に
• 機能は「Feature」という
独⽴したモジュールで提供
• 構成したFeatureだけが
メモリに読まれて初期化
• 使うFeatureだけのJARが
ディスク上にあればOK
(製品版はLibertyカーネルだけ⼊れて
個別のFeature単位の導⼊も可能)
<featureManager>
<feature>jsp-2.3</feature>
<feature>jdbc-4.1</feature>
<feature>jaxrs-2.0</feature>
<feature>sessionDatabase-1.0</feature>
<feature>ssl-1.0</feature>
</featureManager>
構成ファイル server.xml
依存関係も
⾃動的に解決
ServletJSPJDBCSSL
JAX-RS
sessionDatabase
JSON
21
#ccc_c3
Libertyで利⽤できるFeature
WebSphere
z/OS
WebSphere
ND
WebSphere
Liberty Core
WebSphere
Base
zosConnect-1.2
zosLocalAdapters-1.0zosSecurity-1.0 zosTransaction-1.0 zosWlm-1.0
Java EE 6
subset
couchdb-1.0
mongodb-2.0
wsSecurity-1.1
javaee-7.0
batchManagement-1.0
rtcomm-1.0 rtcommGateway-1.0
sipServlet-1.0
apiDiscovery-1.0
mediaServerControl-1.0
wsSecuritySaml-1.1 wsAtomicTransaction-1.2
scalingController-1.0
scalingMember-1.0 dynamicRouting-1.0
collectiveController-1.0 clusterMember-1.0
healthManager-1.0healthAnalyzer-1.0
webProfile-6.0
distributedMap-1.0
openid-2.0
openidConnectServer-1.0
openidConnectClient-1.0
osgiAppIntegration-1.0
spnego-1.0
collectiveMember-1.0
restConnector-1.0
sessionDatabase-1.0
ldapRegistry-3.0
webCache-1.0
javaMail-1.5
osgiConsole-1.0
json-1.0
timedOperations-1.0monitor-1.0
oauth-2.0
serverStatus-1.0
wab-1.0
blueprint-1.0
webProfile-7.0
eventLogging-1.0
requestTiming-1.0
adminCenter-1.0concurrent-1.0
bells-1.0
samlWeb-2.0
scim-1.0
federatedRegistry-1.0
constrainedDelegation-1.0
httpWhiteboard-1.0
osgiBundle-1.0
passwordUtilities-1.0
bluemixUtility-1.0
logstashCollector-1.0
batch-1.0
concurrent-1.0
appClientSupport-1.0
ejbPersistentTimer-1.0
ejbHome-3.2
ejbRemote-3.2
ejb-3.2
mdb-3.2
j2eeManagement-1.1jacc-1.5
jaspic-1.1
jca-1.7
jms-2.0 wmqJmsClient-2.0
wasJmsClient-2.0
jaxws-2.2
jaxb-2.2appSecurity-2.0
managedBeans-1.0
beanValidation-1.1
websocket-1.1
websocket-1.0
jaxrsClient-2.0
cdi-1.2
jpa-2.1
el-3.0
javaMail-1.5
servlet-3.1
jsp-2.3
jsf-2.2 ejbLite-3.2
jndi-1.0
jdbc-4.1
jsonp-1.0
jaxrs-2.0
ssl-1.0
microProfile-1.2
Open	Libertyで
提供されているFeature
22
#ccc_c3
継続的デリバリー
• 製品版のWebSphere Libertyは,四半期ごとに新機能を提供
wsSecuritySaml rtcommGateway
8.5.5.8 8.5.5.9 16.0.0.2 16.0.0.3 16.0.0.4 17.0.0.1
WebSphere Application Server V9.0
WebSphere Application Server V8.5.5
・・・ 8.5.5.7
apiDiscoverysamlWeb rtcomm
bluemixUtility
logstashCollector wsAtomicTransaction
scim
23
#ccc_c3
頻繁に機能更新があるということは
しょっちゅうVersion Up対応するの?
「ゼロマイグレーション・ポリシー」があるので
Version Up対応は不要です
24
#ccc_c3
ゼロマイグレーション・ポリシー
q新しい仕様のバージョンに対応するフィーチャーが追加されても,
従来のフィーチャーも継続して提供
¦例)現在はServlet 3.1 Featureが提供されていますが,
Servlet 3.0 Featureも引き続き利⽤できます
qアプリケーションで新仕様が必要なければ
従来のフィーチャーをそのまま利⽤可能
qデフォルトが変わるなど,構成変更が必要な修正は加えない
新バージョン
新バージョン
⼀般的なアプリケーションサーバー WebSphere Liberty
servlet-3.0
servlet-3.1
servlet-3.0 servlet-3.1
25
#ccc_c3
特徴2:
Libertyの構成ファイルは可搬性がある
<server description="new server">
<featureManager>
<feature>jsp-2.3</feature>
<feature>jndi-1.0</feature>
<feature>jdbc-4.1</feature>
<feature>localConnector-1.0</feature>
</featureManager>
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint" />
<webApplication id="SupportTools" location="SupportTools.war" name="SupportTools" />
<applicationManager autoExpand="true" />
<include location="${shared.config.dir}/persistense.xml" optional="true" />
<library id="db2driver">
<fileset dir="${shared.resource.dir}/db2driver" includes="*.jar"></fileset>
</library>
<dataSource id="employDS" jndiName="jdbc/employDS">
<jdbcDriver libraryRef="db2driver" />
<properties.db2.jcc serverName="db2server.example.com" />
</dataSource>
</server>
26
#ccc_c3
デフォルトベースの簡潔な記述
• server.xmlという⼀つのファイルで構成可能
• 全ての設定項⽬がデフォルトの値を持ち,
デフォルトから変更するものだけを記述する
構成ファイルに書かれている内容は全てその環境固有の設定内容です
• 相対パスの利⽤や変数の定義や参照が可能で,
環境(OS,導⼊ディレクトリ,仮想環境)に
依存しない構成が可能
外部ツールでの更新や
履歴管理もOK
27
#ccc_c3
どんな設定項⽬があるのかは
マニュアルを⾒ないとわからないの?
Knowledge Centerで調べてもいいけど
開発者ツールで開くとすぐ分かりますよ
28
#ccc_c3
Eclipse⽤のLiberty開発者ツール
• 開発者ツールで構成ファイルをひらくと,
構成可能な項⽬やそのデフォルト値が⼀⽬でわかる
<applicationMonitor
updateTrigger="mbean"/>
<applicationMonitor
updateTrigger="mbean" dropinsEnabled="false"/>
デフォルトで⼊っている
チェックを外すと
属性が追加
29
#ccc_c3
構成の編集に開発者ツールが必要なら
本番環境にもEclipseを⼊れないといけないの?
⼿で編集してもいいけど
Immutable Infrastructureの
考え⽅を採⽤しましょう
30
#ccc_c3
従来のWebSphereの管理は
• 構成情報がコピーできないので・・・
管理コンソール(GUI)
wsadmin(スクリプト)
• パラメーター設計書
• 運⽤⼿順書
• 変更管理台帳 .....
各サーバー環境を
直接修正
31
#ccc_c3
Libertyの管理は
• マスターの構成ファイルを各環境にコピーすることが可能
設定
ファイル
変更・履歴管理
⾃動配布
Jenkins
Liberty
Collective
32
#ccc_c3
Libertyのパッケージ機能
• WAS Liberty実⾏環境+構成+アプリを
単⼀ファイルにパッケージ
(使うFeatureだけを選択してパッケージすることも)
• 展開するだけで,同じWAS Liberty環境を構築
テスト・本番環境
テスト・本番環境
Java SDK
Liberty Profile
サーバー構成
アプリ
①インストール
②サーバー構成
③アプリ開発
テスト・本番環境
Java SDK
Liberty Profile
サーバー構成
アプリ
ZIP/JARファイル
④パッケージ ⑤展開
ビルド環境
33
#ccc_c3
パッケージで
アプリ・設定・Libertyを配布
変更・履歴管理
設定
ファイル
アプリ
ケーション
⾃動配布
Jenkins
Liberty
Collective
34
#ccc_c3
Immutable Infrastructure
• サーバー環境の構成に問題が⾒つかったとき
o 稼働している実環境を修正するのではなく
o マスター構成や構築に使⽤したレシピや
スクリプトを修正して再デプロイ
⼿作業による
再現性のない作業
(の繰り返し)
コード実⾏による
均質な作業と実⾏結果
• ⼤量のドキュメント
• 作業⼿順書の整備
• 短時間で
確実なアウトプット
• ⾃動化された履歴管理
35
#ccc_c3
特徴3:
Libertyでは新機能が迅速に提供される
36
#ccc_c3
マイクロサービス実装のためのAPIを
Java標準として策定
http://microprofile.io/
37
#ccc_c3
MicroProfileプロジェクト
コミュニティによるエンタープライズJava Microserviceの標準化
Fault Tolerance Config Healthcheck Metrics Tracing
予期しない障害に
対処するための
堅牢な動作を実現
ポータビリティを
向上させる
構成の外部化
サービスの
稼働確認と
SLAの達成
実⾏中のサービス
間の相互作⽤を管
理
複雑な
分散システムでの
問題解決
2017年3Q
WebSphere Liberty 17.0.0.3
MicroProfile 1.1対応
2017年4Q
WebSphere Liberty 17.0.0.4
MicroProfile 1.2対応予定
MicroProfile	1.0
JAX-RS
CDI
JSON-P
Eclipse	MicroProfile
Move	to	Foundation MicroProfile	1.1 MicroProfile	1.2
Config	API
Fault	Tolerance
OpenIDConnect/JWT	
Healthcheck	/health
Monitoring	/metrics Community	driven	priorities
38
#ccc_c3
Java EE 8
9⽉の時点で
Beta版を公開
https://developer.ibm.com/wasdev/blog/2017/09/29/microprofile-metrics-sept-2017-beta/
39
#ccc_c3
39
IBMのOSS戦略
公開と利⽤
40
#ccc_c3
2016年 IBM JavaのOSS化発表
http://www.publickey1.jp/blog/16/ibmjavavmcobolplijavavmjava_9javaone_2016.html
41
#ccc_c3
https://adoptopenjdk.net/?variant=openjdk9-openj9
42
#ccc_c3
Open JDK
Java Class Library
HotSpot VM
Oracle JDK
Java Class Library
HotSpot VM
IBM SDK for Java
Java Class Library
IBM J9
OMR
Eclipse
OMR
OSS
OSS
Open JDK
Java Class Library
OpenJ9
OMR
+ IBM Java Class Library
OSS
Java 9以降のIBM Java
43
#ccc_c3
Istio:マイクロサービスの接続と管理
• トラフィックに対する
⾃動的なロードバランス
• 豊富なルーティングルール
に
よる適切な粒度の
トラフィックコントロール
• トラフィックの暗号化、
サービス同⼠の認証
および強⼒な⾝分確認
• 対象全体のポリシー適⽤
• 細部にわたる
測定とレポーティング
https://istio.io/
44
#ccc_c3
IBMの取り組み
• オープンスタンダード、
オープンイノベーション、
オープンソースに対するコミットメントの実践
45
#ccc_c3
パブリック
クラウド
企業システム
開発⾃動化
IBM Cloud Private
IBM	Z Terraform
IBM Cloud Private
IBM製品とOSSを組み合わせ,
オープンスタンダードなハイブリッドクラウドの構築と管理を⾏う環境を
IBMのサポートつきで提供
46
#ccc_c3
なんでOpen Libertyの
ロゴはUFOなの?
IBMっぽくないでしょ?
LibertyをIBMだけのものに
したくないからです
47
#ccc_c3
Eclipseの成功体験
• 2001年にIBMの開発製品をOSSとして公開
• プラグインによる⾃由な拡張が可能
• 多くの開発者による拡張・更新がおこなわれ
Java開発環境のなかでも⼀定の地位を保持し続けている
• IBMでもEclipseの技術を⽤いた多くの商⽤製品を販売
48
#ccc_c3
Open Libertyの開発と拡張
• 外部からのコントリビュートも⼤歓迎です
o ただし,ゼロマイグレーション・ポリシーなどを守るため
現在はIBMによるレビュープロセスがあります
• Featureを⾃作することも簡単です
o Feature開発者向けの
多くのSPI(Service Provider Interface)があります
o WebアプリケーションをFeatureとして組むこともできます
o server.xmlや開発者ツールで構成もできます
49
#ccc_c3
まとめ
• 重い
• 導⼊とか構成とかが⼤変
• お値段が⾼い
• そもそも使ったことがない
ぜひ使ってみてください!!!
50
#ccc_c3
リンク集
• Open Liberty Project
https://openliberty.io/
• Open Liberty Groups(ML)
https://groups.io/g/openliberty
• Stack Overflow Open Liberty tag
https://stackoverflow.com/questions/tagged/open-liberty
• WebSphere Liberty ⽇本語技術⽂章
https://www.ibm.com/developerworks/jp/websphere/category/liberty/
51
#ccc_c3
51
Thank You!
52
#ccc_c3
Open Libertyで提供されているFeature
MicroProfile WebProfile 7 Java EE	7 Java	EE	8	(WIP) non-API
cdi-1.2 servlet-3.0 jaxws-2.2 servlet-4.0 restConnector-2.0
jsonp-1.0 beanValidation-1.1 jms-2.0 jaxrs-2.1 passwordUtilities-1.0
jaxrs-2.0 cdi-1.2 jca-1.7 jsonb-1.0 federatedRepository-1.0
mpConfig-1.0 jpa-2.1 jaspic-1.1 jsonp-1.1 ldapRegistry-3.0
mpFaultTolerance-1.0 el-3.0 jacc-1.5 javaMail-1.6 monitor-1.0
mpHealth-1.0 jaxrs-2.0 concurrent-1.0 jsf-2.3 bells-1.0
mpMetrics-1.0 managedBeans-1.0 ejb-3.2 appSecurity-2.0
mpJwt-1.0 websocket-1.1 batch-1.0 transportSecurity-1.0
jsonp-1.0 j2eeManagement-1.1
servlet-3.1 javaMail-1.5
jsp-2.3
jsf-2.2
ejbLite-3.2

Open Liberty: オープンソースになったWebSphere Liberty