2014/04/30

Masteting XPages 第2弾

XPages 開発本第2弾、「Mastering XPages: A Step-by-Step Guild to XPages Application Development and the XSP Language (2nd Edition)」、少し前までは5月15日が amazon.co.jp では発売予定としてあがっていましたが、先行してKindle版がリリースされています。

http://www.amazon.co.jp/Mastering-XPages-Step-Step-Application/dp/0133373371/

ハードカバーは現在の価格では 8,826円、一方 Kindle版では半値以下の 3,734円で販売しています。

電子書籍と実際の紙の本ではびっくりするほどお値段が違います。

会社で回し読みするような時には、当然紙の本のほうが良いわけですが、通勤時間に読むとか、休日に自宅に持ち帰って読むとか、持ち運びするのにはちょっと分厚い感じの本です。
それに、この本は英語なので、会社でどれくらい回し読みできるか甚だ疑問ということもあります。
やっぱり値段の安い電子書籍だよねぇ!といっても、読むのに必要な Kindle 端末や iPad での Kindle アプリは、大抵個人の持ち物なのでこの電子書籍を会社所有にすることが難しいかもしれません。
会社の経費で購入する場合は、はやり紙の本になるのでしょう。領収書も必要ですし。。。
私は、過去出版された XPages 関連書籍(英語)からずっと個人の Kindle 書籍として購入してきたので、自然と今回も個人購入にします。
電子書籍選択の理由はもちろん経済的理由(安いほうを選択)が一番の要因ではありますが、この本の目次を見るとそんなに新しいことがふんだんに出ているわけではなさそうなので、それもひとつの理由でもあります。

Kindle 端末として所有している WhitePaper で読むのは、コードやスクリーンショットが掲載されている部分の表示が粗いので疑問符がつきますが、iPadのアプリでは遜色なく見ることができます。Kindle 端末で気にいっているのはやはり検索ができるということでしょうか。章立てがきちんとしているので、頻繁に検索することはあまりないのですが、ちょっとした調べ物にも検索できるメリットは欠かせません。

いま、悩んでいるのは amazon.co.jp から購入するか、amazon.com から購入するか。amazon.com のアカウントもあるので、そちらから電子書籍は購入できます。amazon.com からの購入の利点は PC や Mac 版の Kindle アプリでも見ること。(amazon.co.jp へアクセスすると今日現在拒否されます。なにかの陰謀か?)

いづれにせよ、GW中にさらっと読んでしまおうと思います。





XPages の applicationScope 変数

ふと興味が湧いて、XPages のアプリケーションスコープ(applicationScope)変数について、こんなテストをしてみました。

おさらいとして、XPagesには
requestScope
viewScope
sessionScope
applicationScope
の4つのスコープ変数があります。

それぞれのライフサイクルを簡単に言うと、
requestScope はブラウザの更新ボタンあるいはXPageの完全更新(部分更新でなく)をすると使用できなくなります。このrequestScopeはページからページへパラメータを渡す際の元になる変数を格納したりします。

viewScopeはブラウザでページが再ロードされると使用できなくなります。
要は、requestScopeとviewScopeはひとつのページの中で、そのページ内のいくつかの場所で値を計算させたい場合に使用します。

sessionScope はユーザーセッションがタイムアウト(ある一定時間ブラウザでアプリを放ったらかしにして操作しない)になるまで、またはブラウザが再起動するまで有効です。典型的な使用例は、ユーザーに関する情報を格納する場合に使用されます。

最後に、applicationScopeはドミノサーバーが再スタートするまで有効、開発局面ではDomino Designer が再スタートするまで有効というのがその定義です。
今回興味を持ったのは、このapplicationScopeにファイルパスなどの固定情報を格納し、その値を使って他DBの参照をするといったケースで、このapplicationScopeが使えるかという疑問を持ったからです。
こんなコーディングを想定してみました。

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
 <xp:this.afterPageLoad><![CDATA[#{javascript:var now = new Date();
if (!requestScope.containsKey("requestVar")){
 requestScope.put("requestVar", "リクエストスコープ変数追加:" +now);
 }
if (!viewScope.containsKey("viewVar")){
 viewScope.put("viewVar", "ビュースコープ変数追加:"+now);
 }
if (!sessionScope.containsKey("sessionVar")){
 sessionScope.put("sessionVar", "セッションスコープ変数追加:"+now);
 }
if (!applicationScope.containsKey("applicationVar")){
 applicationScope.put("applicationVar", "アプリケーションスコープ変数追加:"+now);
 }
 
}]]></xp:this.afterPageLoad>
 <xp:table>
  <xp:tr>
   <xp:td>リクエストスコープ変数</xp:td>
   <xp:td>
    <xp:text escape="true" id="computedField1" value="#{javascript:requestScope.requestVar}"></xp:text>
   </xp:td>
  </xp:tr>
  <xp:tr>
   <xp:td>ビュースコープ変数</xp:td>
   <xp:td>
    <xp:text escape="true" id="computedField2" value="#{javascript:viewScope.viewVar}"></xp:text>
   </xp:td>
  </xp:tr>
  <xp:tr>
   <xp:td>セッションスコープ変数</xp:td>
   <xp:td>
    <xp:text escape="true" id="computedField3" value="#{javascript:sessionScope.sessionVar}"></xp:text>
   </xp:td>
  </xp:tr>
  <xp:tr>
   <xp:td>アプリケーションスコープ変数</xp:td>
   <xp:td>
    <xp:text escape="true" id="computedField4" value="#{javascript:applicationScope.applicationVar}"></xp:text>
   </xp:td>
  </xp:tr>
 </xp:table>
 <xp:button value="更新" id="button1" save="false" navigate="false">
  <xp:eventHandler event="onclick" submit="true" refreshMode="complete"></xp:eventHandler>
 </xp:button>
 <xp:button value="再ロード" id="button2">
  
 <xp:eventHandler event="onclick" submit="true" refreshMode="complete">
  <xp:this.action><![CDATA[#{javascript:context.reloadPage()}]]></xp:this.action>
 </xp:eventHandler></xp:button>
</xp:view>

上記のコードの例では、applicationScopeのライフサイクルが本番環境ではドミノサーバーを再起動しないと使えないとなると、applictionScopeを使ってアプリケーションの参照パスを定義していた場合など、ドミノサーバーの変更なしでは以前のapplicationScopeの値を持ち続けるため、困ったことになりはしないかということです。

いちいち applicationScope に何を格納しているのか、コードレビューをしないといけないのはちょっと辛いです。

ドミノサーバー、またはDomino Designer を再起動する以外にapplicationScopeを一旦リセットする方法はないか、試しに設計の置換による変更を試してみました。
そうしたら、なんと予想どおり設計の置換でこのapplicationScopeをリセットすることがきました。
これで、本番稼働中にapplicationScopeの値をリセットしたい場合、設計の置換でサーバーを再起動することなくできそうです。今回はDomino Designer のみの環境で行いましたが、結局Domino Designer のHTTPを再起動するのとドミノサーバーのHTTPを再起動することは同じであろうということでサーバーでは試していません。もし、必要があればみなさんのほうでも確認してみてください。


2014/04/17

IBM Notes/Domino 専用のQ&Aサイトがオープン!

みなさん、こんにちは。

先日の出来事です。あるコミュニティの XPages 開発ワークショップで、XPages の開発でわからないことがあったらどこへ問い合わせしたらいいでしょうか?という質問があったそうです。

以前なら「ドミノ懇談室」が広く普及していたので、そこでいろいろ助けられたという方も多いのではないでしょうか?

残念ながら、数年前からこのドミノ懇談室も閉鎖になってしまい、IBM developerWorks で代替の形で行っていたりしましたが、今度新たに Q&A サイトがオープンしました。

qa.xpages.jp

サイトから一部抜粋しますが、取り扱う内容は  XPages に限らず IBM Notes/Domino の開発/運用/操作など多岐にわたってOKのようです。

IBMが提供しているグループウェア用ミドルウェア「IBM Notes/Domino(IBMノーツ/ドミノ)」専用のQ&Aサイトになります。

 【質問内容】
  ・Notesの使い方
  ・アプリ開発における実装手段(Notes アプリ/Domino web/Xpages)
  ・Dominoの設定
  ・その他トラブルシューティング等



ドミノ懇談室同様、コミュニティ間でのやりとりで何かの強制が入ったりするわけではありません。必ずしも答が得られる保証はありませんが、ブックマークして常にチェックする価値はあります。

もちろんみなさんにも、そこで質問したり、回答をしてこのQ&Aサイトを盛り上げていただきたいと思います。

まずはユーザー登録から始めてみませんか?


追伸:
このQ&Aのお披露目が次のセミナーセッションでご覧いただけます。是非、どちらかにご参加ください。

セッションは以下のサイトからお申し込みできます。
4/22(火) 13:30~ チームスタジオ様主催 Webinar「XPages コミュニティ最新情報」 http://info.teamstudio.com/jp-xpages-webinar-apr

4/25(金) 19:00~ テクてくLotus技術者夜会 コミュニティー編
http://www.ibm.com/developerworks/jp/offers/events/techtech01/