2009年7月16日木曜日

JavaFXでデータベースアプリ -3

今日は定時に退社できたので、いつもよりゆっくりすごすことができました。
といっても、早い時間はバッティングセンターへ行ったり(私が打つわけじゃないですよ)、子供たちとアイスクリームを食べたりと家族サービスにつとめていたので、NetBeansを開いたのは10時くらい。
本日も1時間強悪戦苦闘して、少し前へ進みました :-)


JavaFXの話をする前に、「ライブラリの追加」でJavaDBのライブラリファイルが出なかった件。
原因は今も分かりませんが、対応策が見つかりました。NetBeansのメニューから「ツール」「ライブラリ」とクリックすると「ライブラリマネージャ」というウィンドウが表示されるので、ここで新規ライブラリを作成し、必要なjarファイルを追加すればOK・・・のようです(断言はしかねますが)。






JavaDBがどこにあるかでパスは変わってくるかと思いますが、私の場合はglassfishv3の中にいたので、そこからjarファイルをとってきています。JDK1.6.0の中にもjavadbフォルダはあるのですが、なぜかlibフォルダがからっぽ。だからリストに出なかったのでしょうか・・・。
ナゾは深まるばかりですが、まぁ、追加の仕方が分かったので、ひとまずヨシとしておきましょう。同じ現象で悩んでいる方(いないかな)の参考になれば幸いです :-)




で、せっかく追加してみたものの、今回はMySQLを使うことにしたので、ひとまずJavaDBのライブラリは削除して先へ進みます。

毎度お世話になりっぱなしのKenji Tachibanaさんのブログ、今回はJavaFX でデータベースに簡単にアクセスできるという事実 - その2を参考にさせて頂いて、JavaFXのGUIを作りました。

Tachibanaさんの記事で紹介されているサンプルはテキストボックスとボタン、ラベルを使ってGUIを構成し、テキストボックスに入力した値に応じてDBからデータを取ってくる」というカッコイイ仕様になっているのですが、なにしろ私はJavaFXのど素人ですから、はじめからそこまで欲張るつもりはありません。
"Simple is best" のポリシーにのっとって、固定SQLの結果が機械的にラベルに表示される、というところからスタートしたいと思います。

こんな感じ。




ひょっとしてこの記事を読まれるかもしれない、私と同じレベルの初心者の方のために、GUIのコードも載せておきます。載せるほどのコードか、という話もありますが。
-------------------------
package javafxdb;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingLabel;

Stage {
  title: "JavaFX meets MySQL !"
  width: 250
  height: 80
  scene: Scene {
   content: [
    SwingLabel {
     text: "ここにデータが出る予定"
    }
   ]
 }
}
-------------------------

コードを書いたら、こちらの記事のインストラクション従って、必要なライブラリを追加。


これで準備は整いましたので、いよいよ「JavaFX meets MySQL」に挑戦です。
Tachibanaさんのブログでは、この部分の説明がJavaFX でデータベースに簡単にアクセスできるという事実 - その3というエントリに書かれているのですが、ここで先ほどGUIの作り込みをサボったのが裏目に出てしまいました。

書いてあるコードをそのまま使えない・・・


曲がりなりにもプログラマの端くれなので、何を書けばいいのかくらいはおおむね見当が付くのですが、問題はそれを「どこに書くか」という点です。

Stageの直下?Sceneの下?それともContentの中?
しかし、迷っていても仕方がないので、とりあえずStageの直下に2行書き足し、import文を編集して、こんな感じにしてみました。

-------------------------
package javafxdb;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingLabel;
import dbconnect.FriendsJpaController;

Stage {
  var DB = new FriendsJpaController()
  var name = DB.findFriends(1).getName()

  title: "JavaFX meets MySQL !"
  width: 250
  height: 80

  scene: Scene {
    content: [
      SwingLabel {
        text: name
      }
    ]
  }
}
-------------------------

さぁ、これでアプリケーションは完成(のつもり)です。
鬼が出るか蛇が出るか、とりあえず試してみようじゃないの、ということで実行ボタンをクリック。

まつことしばし・・・出たっ。
やったー、おもわくどおりfriendsテーブルのid=1の値がラベルに表示されました!




・・・ということで、ともあれJavaFXからデータベースに繋げるところまではこぎつけました。
これもひとえにTachibanaさんと桜庭さんのおかげです。ありがとうございました!


さて、ラベルに自分の名前だけ出して喜んでいるのも切ない話なので、次回はTachibanaさんのところにあったような、検索機能盛り込みバージョンに挑戦してみたいと思います :-)

JavaFXでデータベースアプリ -2

前回は「あらやだ、JavaDBドライバライブラリがないわ・・・」であきらめて作業を中断し、Ugry Bettyの第7話を見て寝てしまった私でしたが、ないわ、であきらめていては先に進めないので、今日は小1時間ほどあがいてみました。

IDEのリストにJavaDBドライバライブラリが出てこない理由など、100年考えていたって私ごときには分かるはずがありませんので、まずは手っ取り早く「NetBeans6.5.1の再インストール」という荒業を発動。ちょうど日本語版に入替えたいと思っていた所だったのです。

…が、期待はむなしく裏切られ、やっぱりライブラリはありません。




こんなことで思い悩むのもいい加減めんどくさくなってきたので(こういうところが「なんちゃってエンジニア」なんだなぁ…)、
「あるやつを使おう」
ということで、急遽、接続先データベースをMySQLに変更。
ちょうど書籍のサンプル用に作ったデータベースがあったので、それを指定してエンティティクラスを作ろうとしたら、ここで第二の試練に遭遇(またか!)


「新規データベースからのエンティティクラスクラス」のダイアログに対象のテーブル名は表示されるのですが、どういうわけか文字がグレイアウトして選択できないようになっているのです。


うーん、わけわからん…。
しばし首をひねった後、意味ありげに(主キーなし)と書かれているところに目を留めて、ダメモトで主キーを設定したテーブルを新規作成。
その上でウィザードを実行したら、おお、今度はめでたくテーブルが追加できました!

1. データベースに接続
2. エンティティクラスを作成
3. JPAコントローラクラスを作成

・・・とKenji Tachibanaさんのブログ・エントリの通りに作業して、最後にMainクラスのmainメソッドに接続テスト用のコードを記述。

-------------------------
public static void main(String[] args) {
FriendsJpaController test = new FriendsJpaController();
Friends idOne = test.findFriends(3);
System.out.println(idOne.getName());
}
-------------------------

その上で「主プロジェクトを実行」コマンドを実行すると・・・おー、出ました!


(※"findFriends"で出てきたのが自分の名前ってどうなのよ…)

…ということで、まだJavaFXには全く手が届かない状況ではありますが、今日の作業はこれにて終了。

2009年7月14日火曜日

JavaFXでデータベースアプリ -1

さて、「鉄は熱いうちに打て」という言葉もありますので、やる気が湧き上がっているこのチャンスにとりあえず着手してみました。

Kenji Tachibanaさんのブログ・エントリを参考に、NetBeans 6.5からDerby(JavaDB)のデータベースにつなぐ所からスタートです。


・・・で、意気揚々と始めてはみたものの、Javaのエンティティクラスを作成し、JPA コントローラクラスを作成して、プロジェクトにJava DB ドライバライブラリを追加しようとしたところで一回目の試練。


あらやだ、JavaDBドライバライブラリがないわ・・・




Serviceタブのところに出てるんだからないこたぁないだろうとは思うのですが、今の時点ではどこをどうしたらいいのかサッパリです。

「今日はあきらめて仕事に戻れ」という神のお告げでしょうか…

ということで、とりあえず今日はここまで(´・ω・`)
 

JavaFX でデータベースアプリ!

先日のJavaEdgeイベント懇親会で、
「JavaFXでデータベースアプリが作れたらもっと面白いのに~」
とつぶやいたら、桜庭さんから、
「できますよ、ただしJavaを絡めないといけないけど・・・」
というお言葉を頂きました。

私は基本的に数字に弱く、座標計算の必要なプログラムは滅多な事がなければ作り(れ)ません。
そんなわけで、JavaFXの勉強もマルだけ書いたところで頓挫していたわけですが、DBがつなげるとなったら俄然やる気が出てきました。

Webを検索してみたところ、Kenji Tachibanaさんのブログこのエントリを発見!



まずはこちらを参考にさせていただいて「NetBeansでJavaFX + DB」に挑戦してみたいと思います :-)
 

2009年7月11日土曜日

納涼!JavaOne報告会 2009 in Nagoya

うっかり事前告知を忘れていましたが、本日7月10日(金)、JavaEdge主催にて『納涼!JavaOne報告会 in Nagoya』というイベントが開催されました。

スピーカーにはSUNの下道さん横河電機の桜庭さんをお招きし、6月に開催されたCommunityOne、そしてJavaOneの様子をご紹介いただきました。コミュニティ活動、クラウド、そしてJavaFXからJava7まで、多彩なトピックに彩られたとても楽しい会になりましたよ :-)
下道さん、桜庭さん、遠い所を本当にありがとうございました!


桜庭さんのお話を聞くのはこれが二度目?三度目かな?
いつもにこにこと楽しそうに話して下さるので、聞いている方もなんだか嬉しくなってきます。JavaFXで作られたというオリジナルのプレゼンツールも素敵でした♪

残念ながら報告会の様子を写した写真はありません。
曲がりなりにも運営委員の端くれだというのに、写真一つ撮らないとはなんたることか、という声が聞こえてきそうですが、でもないのです。私が撮ると、なぜだか必ずピントがぼけるから(アル中で手が震えているから…ではありませんよ、決して)。
きっとそのうち関係者の誰かがどこかに写真を上げてくれると思うので、心静かにその日を待つ事に致しましょう。


報告会の後は、会場付近の居酒屋さんに場所を移して「懇親会という名の飲み会」に突入。
「一眼レフのヒミツ」「生まれ変わったら医者になりたい話」「フォトショップで顔のシワを消す法」・・・などといった、およそJavaとは何の関係もない話題で盛り上がり、あっという間に帰宅時間に。
JavaEdgeのイベントは前回のDB対決以来でちょっと久しぶりだったのですが、同業のお仲間と交流できる場を持てるのはやっぱり楽しいですね。こういう気軽な飲み会を、もっと頻繁にやりたいものです。


そうそう、今回は桜庭さんがJavaOneのお土産をたくさん持ってきて下さったんですよ!
Tシャツ、USBメモリ、GlassFishのステッカーetc...
「一人に一個ずつあげます」という太っ腹なお言葉に甘え、私が頂いたのはゴールデンブリッジの下でGlassFishが泳いでいるトランプ(笑)


GlassFishのステッカーもすごく可愛くて10秒くらい迷ったのですが、圧倒的な枚数の差によりトランプに軍配 が上がりました。このトランプでは、もったいなくてババ抜きなど決してできませんね。

頂いたトランプを見ていたら、しばらくサボ・・・いえあの、お休みしていた翻訳をまたやりたくなってきました。来週あたりから少しずつ作業を再開しようかな。