IBM Connect 2016 XPAGES 最新動向 Part 3 - XPAGESトラブルシューティング
前回2回に渡りIBM Championがスピーカーを務めるセッションにフォーカスを当てたレポートブログを紹介してきました。
今回はPaul Withers氏の「"Marty, You're Just Not Thinking Fourth Dimensionally": Troubleshooting XPages」のセッションに参加した内容を振り返りたいと思います。
このセッションではStackoverflowで寄せられた質問などをもとにXPAGESでの間違ったアプローチの紹介やトラブルシューティングの方法などノウハウ情報を満載の内容となっていました。
また、このセッションではXPAGESの基礎知識を持っていることが前提になっており「XPAGESを既に使っている人は挙手してください」と質問すると会場のほぼすべての人が手を挙げていたのも印象的でした。 そして前列に座ったIBM Champion達が突っ込みを入れながらさらに話がディープに進んで行くのもIBM Connectのセッションならではの光景です。
documentidプロパティでは常に式言語(EL)を使うこと
このセッション内の数あるトピックの中でも全てのXPAGES開発者が知っておくべきノウハウであり、知らずにやってしまいがちな落とし穴であると思ったのがこの「documentidプロパティなどでは常に式言語(EL)を使う」ということでしたので、私自身でテストしたサンプルコードを交えてこのトピックを掘り下げて紹介したいと思います。
※ちなみに式言語(EL)とは${...}もしくは#{...}で始まるコードの事で#{javascript:...}ではないことと区別しています。
Stackoverflowのこちらのリンク「Why does this code write out TWO documents?」でPaul氏が自ら回答している内容にも絡んでいるのですが、Paul氏が指摘するには、式言語(EL)を使わなければページロード時にdocumentidのプロパティ計算ロジックが4回も呼ばれてしまうと指摘しています。
まずはこちらに用意したサンプルコードを見てください。
Domino文書データソースを定義する箇所でdocumentIdプロパティに対して値の計算をしています。
UNIDを引っ張ってきたいのでViewを取得して文書を取得してそのUNIDを返すというロジックになります。
如何でしょうか? 皆さんもこれに似たロジックを書いた経験はないでしょうか?
このサンプルには1つの致命的な問題と2つの推奨されないコードが含まれています。
1つ目の致命的な問題とはbeforePageLoadにてviewScopeの変数をセットしデータソース内でそのviewScope変数を利用しているという箇所です。
これはデータソースのほうが先にプロセスが走りその後にbeforePageLoadのプロセスが走るため5行目のviewScope.selectedPageが意図したとおりに設定されずサーバーエラーを起こしてしまいます。
そこでひとまず問題を解決するために以下のようにコードを書き換えます。
beforePageLoadでのviewScopeの利用をやめ、8行目にビューの値をハードコードで渡してやりました。これでとりあえずサーバーエラーは回避され、見かけ上は意図したとおりにブラウザでこのコードを表示されるでしょう。
推奨されないコード その1
しかし、このコードにはまだ推奨されないコードが含まれており、試しにブラウザでこのコードを表示してみるとAdministratorのコンソールに以下のような出力があることが確認できます。
HTTP JVM: doc found HTTP JVM: doc found HTTP JVM: doc found HTTP JVM: doc found
このように、documentIdの値の計算の処理が4回も呼び出されています。これこそが今回Paul氏が指摘する問題の箇所になります。
Paul氏によると4回も呼び出される理由は以下のようになります。
式言語(EL) 【${...}もしくは#{...}】を使わなかった場合、documentIdのようなプロパティを
- Panel内に追加した場合、beforePageLoadの後に2回呼び出される
- XPage内に追加した場合、beforePageLoadの前に2回呼び出される。(このときbeforePageLoadで追加したscope変数は使えない)
- 常にrender response時に2回呼び出される
ということで、上記サンプルの場合4回呼び出されるということになります。
そこで回避策として式言語(EL)を利用することでこの問題は回避されます。
以下に1回のみ呼び出される式言語(EL)を利用したサンプルコードを追加します。
このコードをadministratorコンソールで確認すると
HTTP JVM: doc found
のように1回しか呼び出されていないことが確認できます。
また、式言語(EL)で「動的に計算」を利用しているため、beforePageLoadで設定されたscope変数が利用できていることにも注目してください。
documentId="#{viewScope.docId}"
の箇所が
documentId="#{javascript:viewScope.docId}"
では意図した動作になりません。
推奨されないコード その2
Domino文書のデータソースを定義する際にignoreRequestParams="true"を明示的に定義してやらないとURLパラメータのdocumentIdで指定された値が常に優先されるため、このようなロジックを書くときはignoreRequestParams="true"を明示的に定義してやるべきです。
こんな事例が沢山
今回はこのブログを書くにあたってPaul氏の指摘を深堀して実証実験を行ってみましたが、実際にPaul氏のセッションではこれに似た内容がいくつもスライドとデモで紹介され、どれもがものすごいスピードで紹介されるためはっきり言ってついていくのがやっとな状態のかなりレベルの高い内容となっていました。
1年を通してStackoverflowでいくつもの質問に対して回答をしているPaul氏ならではのノウハウの詰まったセッションであっただけに、今回のセッションに参加できただけでもIBM Connectに来た甲斐があったと思える、そんなセッションでした。
なお、こちらのセッションのスライドは既に公開されており、こちらより確認できます。
http://www.idonotes.com/IdoNotes/IdoConnect2013.nsf/dx/1279a-marty-youre-just-not-thinking-fourth-dimensionally-troubleshooting-xpages-2016.htm
Chris Millerさんのサイトでその他のセッションを含めLotusphere 2013からのセッションがタイトル別にまとめられています。既に2016年のセッションもいくつか登録されているようなので確認してみてください。
IBM Connect 2016 XPAGES 最新動向 Part 2 - 外部連携
前回のIBM Connect 2016レポートブログでIBM Championがスピーカーを務めるセッションが熱いと題し、Single Page ApplicationをXPAGESで作るセッションやモダンなXPAGESアプリケーションを作るためのライブラリ群などの紹介をしました。
XPages,Javaを使って外部システムと連携
今回はIBM ChampionであるJulian Robichaux氏とKathy Brown氏による「AD-1387 Outside The Box: Integrating with Non-Domino Apps using XPages and Java」のセッションに参加した内容を振り返ってみたいと思います。
XPAGESとJavaを使ったDomino以外のアプリケーション連携ということでCSV、XML、JSONのデータを様々な手法で連携する方法を紹介していました。また後半ではIBM Social SDKやOAuthやQUICKBASEを使った連携、RDB連携にも触れまさに外部連携を網羅する内容になっていました。
CSV操作 - OpenCSV
手始めにCSVの扱い方から説明が始まりました。今更CSVの話なんて聞きたところでなにも面白くないだろうと思い、このセッションに参加したことを少し不安に思っていたところ、そこはやっぱりIBM Champion達。XPAGESでCSVに限らずメタデータを扱うときはJava Bean(Modelクラス of MVC)を作りましょう、とCSVは単なる滑り出しのためのトピックであり、実際はどんどんとディープな内容で進んで行きました。
Java Beanのサンプルは以下のようになります。
そして、CSVの読み込み自体はOpenCSVというライブラリを使うという内容でした。ここで注意点は最新版のVersion 3.6はJava 7+となっており、依存関係の問題からJava 6を使っているDomino 9.0.2 FP4ではVersion 2.3を使うことになります。
こちらにOpenCSVを使ったサンプルコードを載せておきます。
XMLをパースするためのJAXB
こちらのソリューションは既にJava 6+に含まれているためインストールの必要はありません。利用の仕方はJava Beanの記述にアノテーションを利用しどのフィールドがXMLのどのエレメントにマッピングされるかを明示してやります。
サンプルコードは以下のようになります。
JSONのパース
JSONのパースにはXPAGESライブラリにあるcom.ibm.commons.util.io.json.JsonParserを使うことが出来ます。この時点でJavaカスタムオブジェクト(=上記で紹介したようなJava Bean)ではなくJava Maps、ListにJSONデータがパースされるためJava Beanを生成するには別途アンマーシャル(JSONからJava Beanを生成するプロセス)が必要ですが、ここではGSONやFlexJSONなどに触れつつDominoで利用する場合にセキュリティの問題が起こることになるため独自でアンマーシャルを記述する方法を紹介していました。
アンマーシャルのロジック自体はありませんが、JSONをパースする呼び出し部分は以下のようになります。
JAXBを使ったJSONのアンマーシャルもネットではいくつもサンプルコードが公開されていますので、それと合わせてXPAGES用の独自アンマーシャルコードを作ってみるのがいいと思います。
XAGENT, REST, SocialSDKと内容がてんこ盛り
CSV、XML、JSONのパースとJava Beanによるデータ格納を説明し終えた後は、実際のデータ取得方法としてXAGENTでInputStreamを使い外部システムへのアクセスの説明があり、取得後のObjectをXPAGESへ出力する説明があり、次にRESTでのアクセス方法からSocialSDKを使った連携ではOAuthに触れ、最後にQuickbaseと呼ばれるサービスを使った連携方法まで、まさにこれさえ聞けばXPAGESのシステム連携は基礎はしっかりと抑えられる内容になっていました。
このセッションの内容を全てブログに書き起こすとものすごいボリュームになってしまうため後半の説明は割愛しますが、もし興味があれば「AD-1387 Outside The Box: Integrating with Non-Domino Apps using XPages and Java」のセッション資料がいずれ公開されると思いますので時間をおいて確認してみてください。
IBM Connect 2016 XPages最新動向
IBM Championのセッションがとにかく熱い!
日本からIBM Connect 2016に参加してい我々やIBM Championのチームスタジオ 加藤さんなどからIBM Connect 2016の最新情報などが少しずつ発表されていますが、Notes/Dominoに関するホットな最新情報は残念ながらほとんどありません。
そのため例年では当たり前のようにある、新しい機能を説明するセッションやDeep Diveと題して新しい機能を掘り下げて説明するセッションなどがさほど見当たらず、その代わりにIBM Championがスピーカーを務めるテクニカルセッションが多く用意されているように感じています。
XPAGESは進化を続ける!
Notes/Dominoの新機能がさほどないとしても、それはXPAGESの停滞を意味するものではない、ということをIBM Championのセッションを受けるとヒシヒシと感じることが出来ます。
すでにXPAGESはWEB技術と共に進化を続けることができ、XPages Extension Libraryに代表されるように、その進化は既にIBM Champion達を始めとしたコミュニティの力に委ねられていると言っても言い過ぎではないはずです。
IBM Championがスピーカーを務めるセッションでデモされるXPAGESアプリはDomino標準のXPAGES機能では実現することが出来ないようなモダンな作りになっており、どのセッションも観客の食いつき度合いが全く違います。
今回は、XPAGESのセッションに参加して得ることが出来た最新動向をザックリとですかお伝えしたいと思います。
The XPages of Things: Integrate Bluemix with Your XPages Applications for a World of Possibilities - 1075A
1月31日BP Summitのセッションです。 IBM ChampionのJohn Jardinさんによるセッションでした。
このセッションではBluemix、Node-RED、XPages、Websocketの技術を使いTwitterのつぶやきをつぶさに取得しXPAGESで作られたページに表示するというデモが行われました。
実はこのアプリの中にもモダンなWEB技術が多数盛り込まれていましたが、その技術の説明を次にあるセッションで詳しく解説してくれました。
Optimus XPages: An Explosion of Techniques and Best Practices - 1074A
2月1日のセッションで、このセッションもまたIBM ChampionのJohn Jardinさんによるセッションでした。
このセッションでは「Single Page Application」をXPagesで作成するという開発手法を説明していました。
「Single Page Application」というものはブラウザでページを一度読み込んだあとは、全て部分更新(AJAX)によりビュー表示、文書参照画面、編集画面、そしてその画面遷移をさせてしまう手法で彼のデモアプリにXPAGESは1つしかなく、全てインタラクティブに機能が構成されていました。
その技術を支える主な機能として、OpenNTF Domino API の利用を紹介していました。
OpenNTF Domino APIには以下の特徴があります。
- Domino Object Classesの拡張
- クイックインストールと設定
- JavaでDomino Objectのリサイクルが不要
- マルチスレッドプロセス
- XOTS (これについては別の機会に説明したいと思います)
そして、「Single Page Application」を実装するためにJavaによるMVCモデルを採用しており、全てのドキュメントをModel Java Classで機能させるところから始まります。
個人的な意見としては、このアプローチは決して簡単な開発手法ではなく、フォームという考えようによってはそれ自体がModelと位置付けることが出来るものをわざわざJavaで格納しなおすためにModel Classを用意しています。
これにはなによりSingle Page Applicationの実現に必要であることと、MVCモデルによる開発は慣れるとModel Class1つ作るぐらいはささっと出来てしまえるので、その点でデメリットよりメリットが大きく上回るという判断であると思います。
ViewはXPagesを使いControllerをJavaとSSJSで実装していくというイメージです。
ただ、これだけではモダンなSingle Page Applicationを作ることは出来ないはずで、その肉付けとしてUX部分に様々なWEB技術を取り入れていましたので、以下にその機能の一覧を羅列します。
- Twitter Bootstrap : いまやレスポンシブ対応の定番中の定番になってきていますね。
- Animate.css : モダンなアプリにあるさりげなく表示されたりするアニメーションの実装に一役かっています。
- Toastr : アラートダイアログのようにユーザーの処理をブロックすることのない通知機能
- Font Awesome : Vectorアイコンの集合体で利用がとても簡単ですね。
- Sweet Alert : アニメーションのある綺麗なアラートを実装することが出来ます。
ほかにもホットなセッションが目白押し・・・
BPセッションを含め3日間で5つ以上のIBM Championのセッションを受けましたが、John Jardinさん1人のセッションを紹介した段階で結構なボリュームになってしまいましたので、ほかのIBM Championの濃いセッションはまた別のブログ投稿でお伝えしたいと思います。
明日はクロージングセッションを含むIBM Connnectイベント最後の日です。
最終日はUserBRASTやGURUpalooza、Ask the Developerのようなお祭りのようなセッションが多数用意されているので最終日を楽しみたいと思います。
IBM Connect会場内の雰囲気
会場はエスカレーターを使って2フロアにわかれており、基調講演や展示会場などは
下のフロアになります。
左が基調講演になった会場の入り口、右が展示会場です。
今年のホテルは例年のDolphin Swanホテルと比べ、展示会場へのアクセスがかなり
よくなっており、セッションが終わると沢山の人が展示会場に足を運んでいました。
展示会場ではセッションの休憩にコーヒーやジュースが振る舞われたり、2日間に渡ってセッション終了後に
アルコールが振る舞われたりと、沢山の人が足を運んでいたので、出展している会社にとっては
例年より好印象に思っているんじゃないでしょうか。
下の階のセッションルームに通じる通路です。右側は大きな中庭になっており、たくさんの人が
パラソルの下で休憩をしていました。
セッションルーム前のデジタルサイネージです。
セッションルーム内の風景
Business Partner Summit 基調講演 - 2016/01/31
BP Summit 基調講演 (OGS)
IBM Connect 2016が始まる1日前はビジネスパートナー向けに1日用意されたBP Summitと呼ばれるセッションが一日用意されています。
まず、基調講演では各分野、エリアにてIBMへの貢献が優れていたビジネスパートナーが発表される表彰式があります。
日本エリアからはリコージャパンさんが表彰されました。おめでとうございます。
その後、「X: THE EXPERIENCE WHEN BUSINESS MEETS DESIGN」の著者であるBRIAN SOLISというゲストスピーカーによる講演がありました。
自分はBRIAN SOLISという方を知らなかったのですが、我々がアプリケーションを作るうえでデザインがいかに重要であるかを沢山のジョークを交えて講演してくれました。
デザインといってもWEBデザインなどに留まる話ではなく、新しい製品を作るとき、新しいテクノロジーを形にするときなどにどのように人々の心に訴えかけることが出来るか、というデザインの本質に迫る話でした。
ディズニーの新しいテクノロジーに対するアプローチを例に出し、子供の手首に巻いたリストバンドによりテーマパークの入場やアトラクションのパスだけでなく、ホテルのキーやショップでの支払いにもなるというアプローチを紹介していました。 子供がミッキーマウスのデザインがなされた半球体のセンサーにリストバンスをかざすだけで今までには出来なかった上記の沢山のことが出来るようになります。
「人は言われたこと、書いたことは忘れるが、感じたことは忘れない」
BRIAN SOLISさんが説明していたのが印象的でした。
参加者の普段見落としがちな視点を沢山のユーモアを交えて紹介していてとてもいい基調講演だったとおもいます。
IBM Connect 2016 - Day1 基調講演
基調講演 (Open General Session)
今年の基調講演はなぜかPart1とPart2に分かれて行われました。
8時AMからの基調講演が始まる前のスクリーンにはIBM Championの紹介が行われており、日本からもチャンピオンの顔写真とともにでかでかとスクリーンに紹介がされていました。
基調講演 Part 1ではゲストスピーカーのHost of National Geographic’s Brain GamesのJason Silvaさんがテクノロジーの進化を人類の進化になぞって独自の視点で語っていました。
IBM Connectの基調講演はそれ自体が映画のような見ごたえのあるエンターテイメントになっていて、参加するといつも、なにか新しいことにチャレンジする精神を呼び起こされます。
Part2ではIBMプロダクトのデモが全般にわたって行われ、IBM Verseの新機能がまず紹介されました。
例年通り、General ManagerのJeff氏による紹介で始まりました。
IBM Connect 2015から断片的に紹介されていたカードスタイルのUIがより具体的に紹介されました。
IBM Verseの進化としてメール本文にもAnalyticsの技術が使わるデモが紹介されました。
IBM Verseのカレンダーも一新されてます。今まではiNotesのWebカレンダーと変わらない見た目で間に合わせで作ったようなUIになっていましたがようやくIBM Verseっぽい進化を遂げてくれたみたいです。
目玉になる新機能の部分がハイライトで強調されています
Extensibility: 開発者によってIBM Verseに手を加えることが出来るようになります。
Homepage; カードスタイルで一新されます。
Calendar; Verse用UIが大幅に強化されるようです。
Verse Offline: アクションメニューからオフライン設定に切り替えて使用するデモが紹介されました。
モバイルアプリの機能が強化され、Connections CloudやMeetingとの連携がよりシームレスに行われるようになっていました。
モバイルアプリにもAnalyticsの機能が組み込まれるデモがありました。
Personal Assistant: Analyticsの機能によりまるで個人のアシスタントがそばにいるような感覚でツールを使えるようになる、という意味であると理解しました。
IBM Connections Cloud とSalesforceの連携を行っているデモがありました。前日のBP SummitでAppFusionsの開発者によるデモが行われましたが、おそらくこのデモではAppFusionsのAPI連携の機能が裏で動いていると考えて間違いないと思います。 その時のデモでは、Connections Cloud 上にSalesforceのIssue 一覧を表示させ、Salesforceに遷移後にFieldを変更するとその変更内容がConnections CloudのアクティビティーストリームにEmbedded Experienceと共に更新される、というデモでした。
カードタイプUIによるConnections Cloudのコンテンツを表示する一例がデモされました。例えばこの画面右側に表示されているものがConnections Cloudのアクティビティーストリームに相当するようです。
その他、コンテンツマネージメントシステムとConnections Cloudのファイル共有、アクティビティーストリームがシームレスに行われるデモなどが行われました。
TOSCANA Projecと呼ばれる新しいプロジェクト
デモの後半ではToscana Projectと呼ばれる新しいプロジェクトの紹介がありました。 以前にもIBMではProject Vulcanというコードネームで進められるプロジェクトがIBM Connect(Lotusphere)で紹介されたことがありました。その後、Project VulcanはIBM Verseへと製品名を変えProject Vulcanのコンセプトや機能はIBM Verseへと引き継がれた、という流れになりました。
Toscana Projectというコードネームの製品はメッセージングのソリューションであるようです。(LINEのような?) 今回のデモではアウトドアアイテムを製造、販売する会社を例にとって紹介が行われました。
メッセージをやり取りするなかでConnections Cloud Fileを使ったり、Docsを使ったりして業務を進めていくデモが行われました。
ケートリック 関東オフィスが移転致しました。
2016年2月2日(火)より、弊社関東オフィスが以下の住所に移転致しました。
〒141-0021 東京都品川区上大崎2-15-19 MG目黒駅前 512
ビジネスの拡大にむけて
XPAGES開発パートナーである(株)ライブネスと同じオフィスになり、よりビジネスの連携と開発スピードを強化していくことになると期待しています。
最寄り駅は目黒駅になります。お近くにお越しの際は是非お立ち寄りください。