いくつものJava

「わかりやすいJava・わかりやすいJavaEE」シリーズの中に書いていないこと

わかりやすいJPA

『わかりやすいJPA』という記事を新しいブログ "JavaIndex" に書きました。

JavaIndexでは、『わかりやすいJavaEE』でページ数の制約のために詳細を書けなかったさまざまな解説を掲載していく予定です。本と併せて購読すると一層理解が進むと思います。「読者になるボタン」もありますので、気に入ったらクリックしてください。新しい記事が掲載される度に、継続的にお知らせがとどきます。

 さて、今回の「わかりやすいJPA」もそのひとつです。ちょうど「Java塾」で解説する予定と重なったので、今回は、12本の記事を掲載しました。


・わかりやすいJPA(1)SELECT文とPath式
・わかりやすいJPA(2)DISTINCTオペレータとコンストラクタ
・わかりやすいJPA(3)INNER JOIN
・わかりやすいJPA(4)LEFT (OUTER) JOIN
・わかりやすいJPA(5)JOIN FETCH
・わかりやすいJPA(6)Where句で使える演算子
・わかりやすいJPA(7)関数と集計クエリ
・わかりやすいJPA(8)エンティティグラフの書き方
・わかりやすいJPA(9)エンティティグラフの使い方
・わかりやすいJPA(10)エンティティグラフの効果的な使い方
・わかりやすいJPA(11)データベースの特質とロック
・わかりやすいJPA(12)楽観的ロックと悲観的ロック

解説の要点

JPQLの解説では、書籍『Pro JPA2(Expert’s Voice in Java) 』(Mike Keith , Merrick Schincariol, Apress社, 2013)のサポートウェブで配布されているJPQLの実行ツールを使って、JPQLを動かしながら、機能を学べる構成になっています。

エンティティグラフは、N+1問題を解決する魅力的な技術です。その書き方について詳しく解説しました。また、残念ながらエンティティグラフはEclipseLinkではなくHibernateを使わないと力を発揮できません。解説ではEclipseLinkとHibernateの結果を比較した上で、NetBeans+GlassFishの環境でHibernateを使うプロジェクトを例題として配布しています。

また、ロック機構は、とかく難しい解説になりがちです。JavaIndexではできるだけ具体的にわかりやすく解説しています。

続編など

JPAについては、まだいくつか解説したい内容があるので、年明けにはさらに数本を追加する予定です。
 









「わかりやすいJavaEE」は改訂版を計画中ですが、初版がかなり売れたようなので、2版は少し熱くなっても大丈夫かなと思っています。JavaIndexの多くの記事を追加して、わかりやすく十分実用的な本にしたいと考えています。

「新わかりやすいJava 入門編」の裏話

 「わかりやすいJava」の刊行から5年経ったので、新シリーズを刊行することになりました。その最初が「新わかりやすいJava 入門編」です。3月下旬には書店に並びます。本当は、あとの本も同時に並ぶ予定だったのですが・・・。

f:id:tkxlab:20150310072000j:plain

OCJPを参考に

 わかりやすいJava入門編は、数年間、AmazonランキングJava言語部門の1位を続けて、Javaの教科書のベストセラーでした。ただ、欠点は分厚いことと、オブジェクト指向がほとんど含まれていないことです。そこで、今回の改訂では、オブジェクト指向まで取り込むことが大きな目玉でした。

 オブジェクト指向をどこまで取り込むかは、自然に決まりました。本は読みやすさを考えて、当初500ページという目標をたてましたが(最終的に530ページ)、基本文法の解説も、前作の水準を落とさないようにしなくてなならず、悩ましいところです。

 そもそも、前作が入門編とオブジェクト指向編になっていたのは、サンマイクロSJC-P(Sun Certified Programmer for the Java Platform)試験に対応するためでした。Javaの世界では最も信頼できる認定試験でしたが、膨大なJava言語の文法をまとめて試験するので、全体を解説するには2分冊以外に方法がなかったのです。

 SJC-Pを引き継いだ、オラクルの認定試験がOCJP(Oracle Certified Java Programmer)試験です。OCJPは、内容を、Bronze、Silver、Goldの3段階に分けました。これは、とても賢明な変更だったと思います。学習者が段階的に目標を持てるようになったからです。特に、Bronzeは、Javaプログラマのファーストステップとして、オブジェクト指向の理解を目指す範囲になっています。

 Bronzeには、クラス、カプセル化、継承、抽象クラス、インタフェース、ポリモーフィズムまで、オブジェクト指向の中心課題が全て含まれます。ここまで学習すれば、Javaプログラマとして独り立ちできるはずです。オブジェクト指向を乗り切れば、後は、「単なる」文法だけですからね。ですから、自然な成り行きで「Bronze」に対応する範囲にしようと決めたのでした。

基本文法のスリム化はどうやって

 それにしても、前作は基本文法だけで500ページもあったのですが、これをどこまでスリム化できるのか。内容を詰めるだけなら簡単ですが、わかりやすさや学習のしやすさといった「質」の部分を維持しなければなりません。これが難しいところです。

 まず、80ページもあった練習問題の解答を、すべてウェブに移すことにしました(リンクをブックマークしておけば、スマホでも見れるので便利ですよ)。次に、ビット演算はほとんど使わない上、OCJPでも出題されないので割愛しました。また、配列はオブジェクトですから、newで作成するタイプの詳しい解説は、オブジェクト指向の解説に移しました。

 この他、準備編や冗長な解説をまとめたりすることで、こまごまと圧縮し、さすがに半分は無理でしたが、300ページ弱になりました。練習問題が少し減ったかもしれません。しかし、ご安心ください。必要な量は確保しました。また、サポートウェブで補充問題も無償配布することにしています。

オブジェクト指向を正面からわかりやすく

 オブジェクト指向は、Java学習の難所です。
 最初にオブジェクトとは何か、何がいいのか、これをうまく解説しなくてはいけません。特に、オブジェクト指向設計の考え方をまず理解する必要があるのですが、これをうまく教えてくれる本は希少です。

 ようやくオブジェクトの意味がわかり、コンストラクタを作ってカプセル化もできるようになっった時、次の難所がまっています。継承ですね。特に、スーパークラスにサブクラスのオブジェクトを代入する効果と、オーバーライドメソッドの関連をわかりやすく伝えることが、かなり難しい。また、ポリモーフィズムが働くと何がいいのか、「具体的に」教えるのはさらに難しいと思います。

 おまけに、インタフェースときたら、「インタフェース」という名前に込められた「考え方」をどう説明したものか、常に迷うところですし、なぜインタフェースでなければならないのか、どういう目的で使うのかなど、わかりやすい説明とうまい適用例を示すことがまた難しいのです。
 これらは、自分が理解しているだけではダメで、何らかの解説テクニックが必要な部分です。

 前作「オブジェクト指向<入門編>」は、これらの課題の解決のために、わかりやすい図を使うという点ではうまくいったのですが、例題やストリー展開に、改良の余地がありました。

f:id:tkxlab:20150310070629j:plain

オブジェクト指向を解説するのも、これで3回目です。ここらで「総決算的な決定版を書きたいなぁ」と考えました。


出来上がった内容は、読者の評価を待つしかありませんが、書店で手に取られる方は、ぜひ、13章「オブジェクトとは」を見てください。そこから、本書のめざすものがわかると思います。
 それから例題等のプロジェクトファイルを最初から配布する形式にしています。これを動かしながら、具体的にオブジェクト指向を学ぶことができます。どの例題も、意味のある具体的なものになるよう工夫しています(バナナ、Dog、勇者の類は出てこない)。

後に続くのは

 シリーズですから、冒頭に書いたように続刊を予定しています。
 それは、Java言語の残りの文法を解説する「マスター編」(仮題)(Sliver、Goldに対応)です。これができると、JavaSEとJavaEEをつなぐミッシングリングが埋まり、一応完成です。少し休んで、今夏あたりから、制作を再開しようと思っています。さすがに、一年以上続く仙人生活に疲れ果てたので。

 昨年から「Java塾」の開講に向けても準備を進めています。大学や専門学校でJavaを教えていますが、そのインターネット版です。対面指導の「塾」ですから有料になりますが、真剣にJavaプログラマを目指す人たちの役に立てればと思います。最初の開講は6月頃になる見込みです。

Webアプリケーションを公開する方法

Webアプリケーションを公開する方法

 最近、2人の方から同じような質問がありました。ウェブアプリケーションやウェブサービスを公開するには、サーバーが必要ですがどうしたらよいか、というものです。もちろん会社ではなく個人でやりたいという質問です。

筆者の経験

 現在、筆者は、仕事用に3台、プライベート用に2台のサーバーを運用しています。仕事用の1台はサポートウェブのためのレンタルサーバー、もう一台は自分で開発したeラーニングシステムを運用する教育用サーバー、3番目は講義や出版社とのやり取りに利用する多目的サーバーです。


 また、これらとは別に、自宅にはXenサーバを立てて、その中に2台の仮想サーバーを動かしています。その1台は家中のパソコンを自動バックアップするためのMSホームサーバー、もう一台は実験用のWindows2008サーバーです。
 また、2003年から2007年にかけて、ASPとして公開するeラーニングサーバーを自宅に置いていたこともあります。全国の研究者向けに教育システムのデモとして公開していました。これだけがLinuxで、後はすべてWindowsサーバーです。

アプリケーションサーバーはどうしたら

 ASPの経験から、自宅サーバーでサービスを公開するのが大変な負担になることがわかりました。OSとネットワークに関する知識が必要なのはもちろんですが、それ以外に次のような点が、特に大変なところでした。


①セキュリティ対策
②停電・雷対策
③常時の監視(気配り、目配り)
④定期的なバックアップとメンテナンス
⑤緊急の事故対応


 これに懲りたので、今は、サポートウェブにはレンタルサーバーを使っています。少なくともハードの故障を心配しなくてもよく、データが消えてしまう心配もありません。運用がかなりラクになるので、ウェブサーバーであればレンタルが一番です。


 ただ、Glassfishのようなアプリケーションサーバーをレンタルで運用すると、相応に費用がかかります。いわゆる「レンタルサーバー」はウェブサーバーなので、Javaのアプリケーションを動かすことはできません。
 IAASとかPAASというタイプのクラウドサーバーが必要です。
 詳しくは、下記のURLからいろいろ調べてみてください。


クラウドサーバーサービス(IaaS)比較まとめ】
http://matome.naver.jp/odai/2141128309524837601

自宅サーバーへ回帰する

 デモシステムの「雑貨屋さん.com」は、研究室に置いてある多目的サーバーで公開しています。研究室といっても、用途から学内回線は使えないので別にNTTのフレッツ光を引いています(プロバイダはOCN)。サーバーは、Windows2008です。


 実は、最近また、自宅サーバーを見直しつつあります。以前と違って、運用がかなりラクにできるようになったからです。特にChromeブラウザから利用できる Chrome Desktopというアプリは、ウェブを通じて遠隔のサーバーを操作でき、監視やメンテナンスが格段にラクになりました。


 また、Windowsサーバーが成熟してきて、Linuxにこだわる理由もなくなりました。Linuxは無償ですが、管理・運用にかかるコストはWindowsの比ではありません。仕事でならともかく、個人で簡単に済ますならWindowsがよいと思います。有償品にはそれなりの利点があるということですね。
 だた、Xenサーバーを使うと1つのマシンでWindowsサーバーとLinuxサーバーを複数立てられるので、どちらかに限る必要もありません。Core i7のCPUと16GBのメモリ、2TBのディスクを積むPCは7~8万円程度で作れます。これだと3台くらいの仮想サーバーを運用できると思います。


 それで、今、WEBS(個人事業主としての屋号)で運用する新しいサーバーを構築する計画で作業を進めています。JavaEEのウェブアプリをいろいろ動かして、サポートウェブを充実させる計画です。

自宅サーバーの立て方

 この手の解説は、ネット上にいくつもあることは承知しているので、ここでは、筆者の経験から要点をお話しましょう。


【手順】
ドメイン
 サーバーを公開するには、www.domain.jpのような名前が必要です。このうち、wwwの部分がコンピュータの名前で、domain.jpの部分をドメイン名といいます。ドメイン名は同じものが2つあるといけないので、レジストラからレンタルします。


日本のレジストラ一覧
http://home.interlink.or.jp/~t-ikeda/nihonregistrar.htm


 ドメイン名をレンタルすると、使用するDNSサーバー(次項)をレジストラが提供してくれます。


②ダイナミックDNS
 インターネットでは、ドメイン名によって自分のサーバーがアクセスされますが、実際には、ドメイン名をIPアドレスに変換して、そのIPアドレスによりサーバーを特定する作業が行われます。この変換サービスをやってくれるのがDNSサーバーで、ブラウザはDNSサーバーを通じて、アクセスしたいサーバーのIPアドレスを取得しています。


 ただ、自宅サーバーでは、IPアドレスが時々変わります。それはプロバイダの事情によるのですが、変更に合わせてDNSサーバー上のIPアドレスも書き換える必要があります。しかし、レジストラDNSサーバーはこれをやってくれません。そこで、書き換えをてくれる別のDNSサーバーが必要です。これがダイナミックDNSサービスです。


 ダイナミックDNSサービスを提供するところは、いくつもあります。筆者は長年に渡ってDDO.JP(無償、有償あり)を使っていますが、最近ではプロバイダが無償(ぷらら など)あるいは廉価(Biglobeなど)で提供するケースもあります。


 ただし、無償の場合は、自分が取得したドメイン名は使えず、提供先のドメイン名に、サーバー名だけを変えたものになります。ちょっと残念。筆者が利用しているのはDDO.jpの有償版で年額6000円です。ちょっと高いです。


DDO.jpのように、ダイナミックDNSだけを提供するサービスでは、利用するために通信ソフトが必要です。それは、IPアドレスが変更されたタイミングで、ダイナミックDNSサーバーにそれを通知するソフトです。筆者は長らくDiceというソフトを使っています。無償ですし、枯れているので不具合は全くありません。使い方も簡単です。


DICE
http://www.hi-ho.ne.jp/yoshihiro_e/dice/

まとめ

 以上が自宅サーバーを公開するのに必要な作業です。
 個々の詳しい内容は解説しません。自分でサーバーを運用するのですから、上の情報から自分で知識を集めてください。安心してください、それほど難しいことではありませんよ。

GlassFishサーバーが使用するポートを8080から変更する手順

ポート80番を使うようにする

質問がありましたので、下記にまとめておきます。

ドメイン管理コンソールを開く
②Configrationsを選択
③(右側のメインウィンドウで)
 server-config → Network Listners を選ぶ
④http-listener-1 をクリックする
⑤Port 欄の値を8080 から 80に書き換える
⑥[save]ボタンを押す
GlassFish serverを再起動
NetBeans
 [サービスタブ]→サーバー→GlassFish→アプリケーション
 と選択し、デプロイ済みのアプリケーションを右ボタンでクリックしてすべてアンデプロイする

でOKです。

 XMLを編集して行う方法もあります。

Glassfishインストールディレクトリを開いて
 domains → domain1 → config と選択する
② domain.xmlファイルをエディタで開く
③ 330行目あたりにある<network-listeners>タグに書かれているポート番号を書き換える
④保存する
⑤上記⑦、⑧の手順を実行する 

でOKです。


ただ、ウェブサーバーを動かしている状態でこの操作を行うと、ポート番号がダブってしまい、起動できません。
ウェブサーバーを停止するか、使用するポートを80番以外に変更する必要があります。

わかりやすいJavaEEの裏話

 22時には寝て4時頃起き出し、昼過ぎまで部屋にこもって原稿を書き、昼から本業の仕事に行って夜まで。テレビも見ず、新聞も読まず、酒も飲まず・・・。4月以降、最近まで仙人のような生活をしていました。なんとか終わったのでようやくブログも再開できます。
 Wildflyの記事もこれからアップする予定ですが、まずは、出来上がった「わかりやすいJavaEE」について裏話的なことを書きたくなりました。

始まりはYOUTUBE

 今はRedHatに移ったグプタさんの解説ビデオをyouTubeで見たのが始まりでした。
https://www.youtube.com/watch?v=9Kf5m7bMu74
さすがグプタさん、まとめ方がうまいです。「な、な、なんとこれは便利だ」というのが初めての感想でした。それまでJEFというServletベースのフレームワーク(自作です)を使っていたので、あまりの落差に驚きました。

日本語の本はない(も同じ)

 それでさっそく本を探すと、JavaEEについて日本語の本がほとんどなかったので、驚きかつ呆れてしまったのでした。実際、「Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava」が唯一それらしい本です。これは「Beginning Java EE 6」を何十人もで訳した本ですが、わたしでも初めて読んだときは??でした。翻訳はすばらしく正確ですが、日本国でJavaEEを学ぶ人のスタートがこの本というのは、あまりにも厳しい現実です。

ネットを探すとOracleに「The Java EE 6 Tutorial」というのがあったので、じゃこれでと、読み始めたら、さすがに1000頁以上あって閉口しました。なんでも書いてあるけどとても読み辛い、どこがtutorialなんだか・・・。ただ、これを読んだ後(見た後)で「Beginning Java EE 6 GlassFish 3で始めるエンタープライズJava」を読むとスッキリわかりました。この本、なんだかtutorialのダイジェスト版のような気がします。
 結局、amazon.comを見て「日本でお買い物をしましょう」などと言われながら、あちらの本を買って勉強することに。

専門学校のテキストを書く

 その頃、東京の大手の専門学校からJavaのテキストの依頼があり、断ろうかとも思ったのですが、JavaEEを紹介するいい機会かもしれないと思い引き受け、今年の1月に引き渡しました。このテキストはJava入門、オブジェクト指向に加えて後半がJavaEE7です。全部で250頁という驚異的なダイジェストでした。版型が特殊なので、普通の書籍だと400頁分くらいでしょうね。これを書いてようやくJavaEEがはっきりと整理できました。

 「わかりやすいJavaEE」の企画は昨年の暮れ頃でしたが、出版社でも「JavaEE」と付くと難しい、売れない、などという意見が噴出し、「なぜ目次にサーブレットJSPがないのか」という「クレーム」まであったそうで、編集の方は理解を得るのにとても苦労したようです。ちなみに、既存の「わかりやすいJava」シリーズの3冊も一挙にまとめて改訂する、という話になってしまい、来春にはは完全リニューアルの予定です(また仙人生活かなぁ)。

ほんとうはわかりやすいJavaEE

 JavaEE7ですが、難しい本しかないくせに、中身は案外易しいのです。なぜやさしいことをああも難しく解説するのか、不思議ですね。最初に考えた人たちが小難しい用語を使い始めたことが原因かもしれません。抽象度の高い用語は理解すると便利ですが、ハードルが高いのです。本では、このあたりをわかりやすく解説することに力をそそぎました。
 
 JavaEEではなく、旧来のServletベースのプログラミングに心惹かれる叩き上げの人たちも、日本ではまだ大勢いるようです。確かに、あんなものをJavaEEに置き換えるとなると、完全に作り変えになるので、移行には困難がともないます。
 それでも、これから作るものはぜひJavaEEベースになるといいなぁと思います。JavaEEなら大量のウェブプログラマを一挙に育成できそうです。Java標準で、わかりやすく、生産性が高い、それがJavaEEの特徴ですから。


 

JDK8をインストールしよう

JDK8のインストール手順

 インストール方法は時々変わってしまうのでウェブに掲載しておきます。
 ここでは、やり方をわかりやすく解説しながら「ここが大事」というポイントもお知らせしたいと思います。

JDKをダウンロード

JDKは次のURLでオラクル社からダウンロードします。
http://www.oracle.com/technetwork/java/javase/downloads/index.html

最初にhttp://www.oracle.comを開いて、[downloads]→[Java]→[Java SE]と選択してきても同じページにたどり着くことができます。

(1)ダウンロードするタイプを選択する

 NetBeansは別にダウンロードしてください。ここはJavaSE単独を選びます。「一緒に」というのはたいていの場合、選択の幅をせばめてしまいます。それからJavaEEのためのJDKもJavaSEでいいのです。JavaEEというJDKがあるわけではありません。JavaEEJavaEEライブラリのことでGlassFishWildFlyをダウンロードすると利用できます。

f:id:tkxlab:20140408113450j:plain

(2)ファイルを選択する

 最初にライセンス認証をチェックしてください。これを押さないとダウンロードできません。

f:id:tkxlab:20140408113446j:plain

 次に、ファイルを選んでダウンロードしますが、Winodws OSには32ビット版と64ビット版があります。X86と書いてあるのが32ビット用、x64と書いてあるのが64ビット用です。「X86」が値は大きいのですが、これはハード(CPU)の型番を昔8086などといった名残りです。

f:id:tkxlab:20140408113431j:plain

(3)ファイルをダウンロードする

 上の画面でファイルのリンクをクリックするとダウンロード用のダイアログが開きます。ファイルのダウンロード場所はダイアログを見てしっかり覚えておいてください。もちろん、このダイアログで好きな場所に変更することもできます。

f:id:tkxlab:20140408113442j:plain

(4)JDKをインストールする

 ダウンロードしたファイルをダブルクリックしてインストールします。インストールされるのは、JDKJREの2つです。この2つが続けてインストールされるので、画面に注意して操作してください。
 なお、JREコンパイラなどの開発ツールを含まないセットで、Javaプログラムの実行に必要です。NetBeansEclipseJava言語で作成されているので、起動するにはJREが必要になります。
f:id:tkxlab:20140331120309j:plain


 インストーラーが起動するので[次>]を押します。
f:id:tkxlab:20140721105313j:plain


 ここでは、JDKのインストール先を指定します。
c:¥Program Files¥Javajdk・・・が既定の場所ですが、変更することをお勧めします。「c:¥Program Files¥Java¥」のように途中に空白があると、なにかとトラブルの原因になります。
 [変更]ボタンを押してください。

f:id:tkxlab:20140721105342j:plain


例ではc:¥Javaのようにフォルダを指定しています。このように指定して、[OK]を押します。
f:id:tkxlab:20140721105431j:plain


元の画面に戻るので、[インストール先]がc:¥Javaとなっていること確認して[次>]を押します。
f:id:tkxlab:20140721105458j:plain


JDKのインストールがはじまります。
しばらく待つとJREのインストール画面になります。
f:id:tkxlab:20140331120719j:plain

(5)JREをインストールする

 これがJREのインストール画面です。JREはインストール先はこのままでも構いませんが、変更ボタンを押して、c:¥jreのように別のフォルダを指定しても問題ありません。
[次>]ボタンを押すとインストールが始まります。
f:id:tkxlab:20140721105527j:plain

インストール中の画面です。このまましばらく待ちます。
f:id:tkxlab:20140331120829j:plain


終了画面です。[閉じる]を押して終了してください。
f:id:tkxlab:20140721105547j:plain

NetBeansとWildFlyを使ってJavaEE7(2)

NetBeans8.0 nighty (+ WildFlyプラグイン)+ WildFly8.0.0 Final

なぜEclipseじゃなのかという疑問を持つ方もいるかもしれません。わたしもずっとEclipseのユーザーでしたが、JavaEEの世界に限ってはNetBeansの方がうんと多くのことをやってくれます。特にコード補完はよくできています。設定ファイルの自動生成もツボにはまった働きをしてくれます。さらにMavenを使うのでもNetBeansの方が簡単でした。あまりにもあっけないので「Mavenを使っている気がしないくらい」です。

簡単なウェブシステムの作成

さて、 前回、WildFlyを正常に起動できるところまでやりました。
今回はプロジェクトを作ってプログラムを書きます。

手順1 WildFlyUTF-8を使うように設定ファイルに書いておく

これは情報を探せず困っていたのですが、lbtc_xxxさんにjboss-web.xmlファイルに書けばよいと教えていただきました。

①sample01プロジェクトをマウスの右ボタンでクリックする
②[新規]→[その他]と選択して[新規ファイル]ダイアログを開く
③[カテゴリ]欄で[XML]、[ファイル・タイプ]欄で[XMLドキュメント]を選び[次>]を押す
f:id:tkxlab:20140227225714j:plain
④[New XMLドキュメント]ダイアログが開くので[ファイル名]にjboss-webと入力する
⑤[フォルダ]欄にweb¥WEB-INFと入力する(参照ボタンを押してWEB-INFを選択してもよい)
⑥[次>]を押す
f:id:tkxlab:20140227225734j:plain
⑦[ドキュメントタイプを選択]が表示されるので、[正しい形式のドキュメント]を選択して
 [終了]を押す
f:id:tkxlab:20140227225807j:plain
jboss-web.xmlファイルができるので次のように内容を編集して保存する

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
   <default-encoding>UTF-8</default-encoding>
</jboss-web>
手順2 webプロジェクトを作る

プロジェクトはウェブプロジェクトを選択して、フレームワークJSFを指定します。

①[プロジェクト]タブをクリックして、プロジェクト表示に切り替える
②メニューから、[ファイル]→[新規プロジェクト]と選択する
③[新規プロジェクト]ダイアログが開く(下図)
④左側の[カテゴリ]欄で[Java web]を選択する
⑤右側の[プロジェクト]で[Webアプリケーション]を選択する
⑥最後に[次>]をクリックする
f:id:tkxlab:20140224133625j:plain
⑦プロジェクト名(ここではsample01)を入れて[次>]ボタンを押す
f:id:tkxlab:20140224134017j:plain
⑧確認して[次>]を押す
f:id:tkxlab:20140224134017j:plain
⑨[JavaServer Faces] にチェックを入れて[終了]を押す
f:id:tkxlab:20140224134044j:plain
以上でsample01プロジェクトが作成され、仮のindex.xhtmlも作成されています。

手順3 バッキングビーンを作る

バッキングビーンはJSFページと連携するJavaプログラムです。管理ビーンということもありますが、それはいろいろなJavaEEのサブシステムが管理するJavaオブジェクト一般を指すのでバッキングビーンと言う方がいいようですね。

①手順1で作成したプロジェクト[sample01]をマウスの右ボタンでクリックする
②[新規]→[Javaクラス]と選択して[New Java クラス]ダイアログを表示する
f:id:tkxlab:20140227215350j:plain
③クラス名にMeiboBean、パッケージ名にbeansと入力して[終了]ボタンを押す
f:id:tkxlab:20140227215358j:plain
④以下のコードを入力する
番号と氏名を入力するJSFページ(index.xhtml)に対応するバッキングビーンです。フィールド変数にnumberとnameがあります。またnextメソッドはページナビゲーションを行うメソッドでoutput.xhtmlを表示します。あとはゲッターとセッターです。

package beans;
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named
@RequestScoped
public class MeiboBean implements Serializable {
    private Integer number;
    private String  name;
    public  String    next(){
         System.out.println("★number="+this.number+"/ name="+this.name);
         return "output.xhtml";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }
}
手順4 1枚目のJSFページを作る

    自動作成されたindex.xhtmlを次のように書き換えます。
    番号と氏名を入力する画面です。次のような画面になります。
f:id:tkxlab:20140227215415j:plain

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Sample02</title>
    </h:head>
    <h:body>
        <h2>名簿データの作成</h2>
        <h:form>
            番号:<h:inputText value="#{meiboBean.number}" /><br/>
            氏名:<h:inputText value="#{meiboBean.name}" /><br/>
            <h:commandButton value="送信"  action="#{meiboBean.next()}"/>
        </h:form>
    </h:body>
</html>
手順5 2枚目のJSFページを作成する

    入力結果の確認画面としてoutput.xhtmlを作成します。
    次のような画面です。
f:id:tkxlab:20140227215437j:plain
①sample01プロジェクトをマウスの右ボタンでクリックする
②[新規]→[その他]と選択して[新規ファイル]ダイアログを開く
③[カテゴリ]欄で[web]、[ファイル・タイプ]欄で[JSFページ]を選ぶ
f:id:tkxlab:20140227220535j:plain
④[New JSF]ダイアログが開くので[ファイル名]にoutputと入力する
⑤[終了]を押す
f:id:tkxlab:20140227220549j:plain
⑥output.xhtmlができるので、以下のように編集する 

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Sample02</title>
    </h:head>
    <h:body>
        <h2>名簿データの確認</h2>
        <h:form>
            番号:<h:outputText value="#{meiboBean.number}"/><br/>
            氏名:<h:outputText value="#{meiboBean.name}"/><br/>
            <h:link value="[戻る]" outcome="index"/>
        </h:form>
    </h:body>
</html>

動作確認

動かしてみるだけですから、簡単に手順を書いておきます。

①sample01プロジェクトをマウスの右ボタンでクリックし、[実行]を選ぶ
②ブラウザが起動してindex.xhtmlが表示される
③番号(整数)と氏名(漢字)を入力して[送信]を押す
④output.xhtmlが表示されて、入力したデータが正しく表示されることを確認する
⑤サーバーログを見て、そこにも番号と氏名が表示されていることを確認する
⑥[戻る]を押す
⑦空欄になったindex.xhtmlが表示されることを確認する

その他のこと

JPAを使ったブログラムも動くはずです。
mysqlをインストールして、WildFlyJDBCドライバを登録し、データソースを作成するところまではうまくいきました。次回はそのサンプルを報告します。