ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

オブジェクト指向で開発の最初から最後までの手順例-その27:フレームワークその7

2007-08-31 18:12:54 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、今、ここの「(3)フレームワークを決定する」をやっていて、前回「何を作るのか?」をまとめました。

で、いまのところ、こんなかんじです。
1.画面
   ・各画面		=>各画面HTMLとJavaScript(AJAX)で
   ★共通部分	         =>JavaScriptで関数提供

2.コントローラー
   ★サーブレット	=>雛形と仕様書を用意

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分	=>雛形と仕様書を用意
   ★共通部分	         =>プログラムを用意




今回は、のこりのモデル部分についてのお話です。




■モデル部分

 モデル部分は、適当にクラスをわけ、サーブレットから呼び出される分、メソッドが存在することになります。

 モデル自体は、各処理内容によってちがうのですが、その大まかな流れは、以下のようになります。

1.引数チェック
   →妥当性チェック

2.データ処理加工
   →DB検索、編集する値の設定

3.DBアクセス(ここの内容)
  3-1.コネクションの取得、生成
     →ハッシュマップから探し、なければ生成

  3-2.DB更新処理

  3-3.子がある場合の操作
     →ハッシュマップに、コネクションセット

  3-4.(コネクションを生成した場合)
       コミット(エラー時はロールバック)処理
     →生成していなければ、なにもしない

4.セッションへの値セット

5.後始末、返り値セット



 ということで、個別のものは違うけど、大まかなものは、同じなので、今回は、テンプレートみたいなものを提供することになります。




で、最終的にこうなりました。
1.画面
   ・各画面		=>各画面HTMLとJavaScript(AJAX)で
   ★共通部分	         =>JavaScriptで関数提供

2.コントローラー
   ★サーブレット	=>雛形と仕様書を用意

3.モデル部分
   ・各モデル部分     =>テンプレートを提供し、各メソッドごとに変える

4.DBアクセス部分
   ★各アクセス部分	=>雛形と仕様書を用意
   ★共通部分	         =>プログラムを用意


(赤字は今回追加分)

ということで、「(3)フレームワークを決定する」については、全部終わったので、次は、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」です。実際に上記に書いたものを作っていきます。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その84:単体テスト(9)バグ票

2007-08-31 13:40:14 | 開発ネタ

 シリーズ「開発の初めから順番に書いていってみる」の続きです。

 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 (バックナンバーは、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm)。

 現在、「バグ修正して再テスト」のお話をしていますが、今回は、そのなかのドキュメントであるバグ票とその管理台帳についてです。




■バグ票

 バグ票は、1つのバグについてたいてい1枚であり、バグの内容を書いて、担当者に渡し、担当者は、その原因と修正箇所などを書きます。

 で、バグ票に書く項目についてですが、すごーく昔になりますが、

第一種共通テキスト15 応用システム開発技術
ISBN4-89078-452-7

という、情報処理試験の基準となるテキストみたいなのが、1990年代後半にありまして(一種という名前から、その古さがわかるね)、そこの491ページにあるバグ票(「不具合管理用報告書」となっている)には、以下の項目が書かれています。

・整理番号
・発生日時
・聴取者
・連絡先
・修正・テスト日付
・結果確認
・トラブル内容・現像
・添付資料
・トラブル原因
・区分
・処置
・修正対象モジュール
・解決日
・承認者
・担当者



このうち、

・聴取者、連絡先は、報告者ないしは発見者となると思います。
・承認者は、あえて書かないかも
・「発生日時」、「修正・テスト日付」、「結果確認」、「解決日」に関しては、
 「報告日」「修正日」「確認日」になると思います。
 →ここに日付が埋まっているかどうかで、修正中・修正済(確認待ち)・修正完了
  のステータスが決まります。
・「トラブル内容・現像」は、「トラブル内容・現象」の誤植だと思います。
・「区分」は、システムの区分に関してですが、これ以外に、優先度や、
  バグ・仕様・要望といった分類などが入ることもあります。
・あと、発見バージョンと修正バージョンが必要です。


まとめると、以下の項目が必要だと思います。


・整理番号
・報告日
・報告者
・担当者
・発見バージョン
・トラブル内容
・添付資料
・区分
・トラブル原因
・処置
・修正対象モジュール
・修正バージョン
・修正日
・確認日





■バグ管理台帳

同じように、バグ管理台帳は、上記の本の492ページに不具合管理簿として、以下の項目が挙がっています。


・管理区分
・ページ
・システム名
・管理者
<<以降繰り返しレコード>>
・番号
・発生日
・解決日
・トラブルの概要
・聴取者
・連絡先
・原因


管理台帳は、ステータスと担当者、対応バージョンと、番号が分かることが大事です
(番号の採番用につかうので)それを考え、かつバグ票で変更したところを考えると、必要な項目は、こんなかんじかな・・


・ページ
・システム名
<<以降繰り返しレコード>>
・整理番号
・報告日
・報告者
・担当者
・発見バージョン
・区分
・トラブル概要(40字程度まで)
・修正バージョン
・修正日
・確認日





てなことで、バグにおけるドキュメントであるバグ票と管理台帳の話は、おしまい。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オブジェクト指向で開発の最初から最後までの手順例-その26:フレームワークその6

2007-08-30 19:12:29 | 開発ネタ

オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、今、ここの「(3)フレームワークを決定する」をやっています。

詳細は、こんなかんじ
1.画面
   ・各画面
   ★共通部分(呼び出し部分など)

2.コントローラー
   ★サーブレット	=>雛形と仕様書を用意

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分	=>雛形と仕様書を用意
   ★共通部分	         =>プログラムを用意



今日は、画面についてです。




■画面の概要

 画面は、
(あ)HTMLで記述し、これを表示する
(い)ボタンなど押され、イベントが発生したら、
    (いー1)サーブレットを呼び出す
    (いー2)返り値のXMLを受け取り必要部分を取得
(う)返り値に応じて、次の処理(次の画面に遷移や、メッセージ出力など)
   をJavaScriptで行う

ということになります。

 このうち、(あ)のHTML,(う)の次の処理のJavaScriptは、各画面ごとに異なりますので、これは、「各画面」のファイルになります(各画面ごと1ファイルになり、(あ)と(う)が記述されます)

 (い)の部分のうち、(い)の1番のサーブレット呼び出し部分は、共通化されます。
 また、(い)の2番も、今回は、処理系と検索系に大きく分かれるため、処理系用のXMLを解析して適当な変数に、値を設定するもの、検索系のXMLを解析して、適当な変数に値を設定するものを提供すれば、共通化できそうです。

 つまり、「共通部分」は、以下の3つ、Javascriptで作成します。
   ・サーブレット呼び出し部分
   ・返り値処理(処理用)
   ・返り値処理(検索用)
 で、これらを呼び出すのは、「各画面」のJSPです。




 ということで、今日の話をまとめて、初めの表にいれると、こんなかんじ。
1.画面
   ・各画面		=>各画面HTMLとJavaScript(AJAX)で
   ★共通部分	         =>JavaScriptで関数提供

2.コントローラー
   ★サーブレット	=>雛形と仕様書を用意

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分	=>雛形と仕様書を用意
   ★共通部分	         =>プログラムを用意


(赤字は、今回決まったところ)
次回は、モデル部分を、どんな処理を書くのかについて、もう一度まとめます。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

「ある会社等が、Wikipediaのどの項目を編集しているのか」を検索する

2007-08-30 13:31:32 | Weblog

最近、厚生労働省が、Wikipediaの項目中、エロゲの「ななついろ★ドロップス」を(少子化対策のため?)熱心に編集していたり、農林水産省が、ガンダム関連を(農村の高齢化を向かえ、ガンダムに農作業をさせるため?)熱心に編集しているという話が、

ここ
厚労省がWikipediaでエロゲ「ななついろ★ドロップス」の項目を編集していた事が判明、農水省は「ガンダム」を
http://blog.livedoor.jp/dqnplus/archives/1024442.html


に出ているけど、ここの例は、IPを入力して検索している。

でも、

IPじゃわかんなーい!!
もっと簡単に、会社名を入れたら、Wikipediaのどこを編集しているのか知りたーい!

というあなたのために、その方法を。。。




(1)まずは、ここ
どの組織がウィキペディアを編集しているのか
http://wikiscanner.virgil.gr/index_JA.php

を開く

(2)その組織を特定する。。。名前に”英語”(ローマ字)で入れる

例:jimin

(3)そうすると、検索結果が出てくる。例のjiminだと3件でてくる。

で、そこの1番目、

210.226.6.0-31 Liberal Democratic Party jimin.or.jp [web] Tokyo, Tokyo, Japan

の先頭にあるチェックボックスをチェックして、「ウィキペディアの編集をご参照ください」ボタンをクリック。

(4)結果が出てくる・・・

 どーして、「笑福亭鶴光」がこんなに(^^;)




(2)の会社、組織を、いろいろ変えてたのしんでね!
ただし注意。たとえばNECとすると、meshのものがいっぱい出てくる。
この場合は、Domainsをみて、nec.co.jpになっているものを選択しないと、
NECのは、みれないよ・・


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JavaFXって何?JavaFX Mobilなんてーのも、あるみたいだけど。。。

2007-08-30 00:46:47 | JavaとWeb

ここの記事

JavaFXで作るコンテンツは"Unbelievably Rich" - "Javaの父"が語るJavaFX
http://journal.mycom.co.jp/articles/2007/05/10/javaone2/index.html

によると(以下斜体は上記サイトより引用)


JavaFXはRIA(Rich Internet Application)を作成するテクノロジで、競合製品としてはAdobe Flexなどが挙げられる。Adobeは企業向けアプリケーション構築環境としてFlex、そしてこの夏に発表予定のアプリケーションサーバ"Apollo"の組み合わせを、現在、強力に推進中だ。


だそうな。。ただ、
ここ http://www.sun.com/featured-articles/2007-0508/javafx/index.jsp
をみると、JavaFX Mobileなんていう、モバイル用(ケータイ用??)もあるみたいだけど。。

ま、
ここ https://openjfx.dev.java.net/
にいくと、ダウンロードとかデモとか、できるみたいだけど。。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オブジェクト指向で開発の最初から最後までの手順例-その25:フレームワークその5

2007-08-29 18:56:41 | 開発ネタ

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、今、ここの「(3)フレームワークを決定する」をやっていて、前回「何を作るのか?」をまとめました。

こんなかんじ

1.画面
   ・各画面
   ★共通部分(呼び出し部分など)

2.コントローラー
   ★サーブレット
   ★返り値となるXMLのJSP

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分
   ★共通部分



 今回は、「2.コントローラー」について説明します。
 (今回、この「2.コントローラー」を修正します)





■コントローラー部の概要

コントローラー部の概要に関しては、ここに書いたように、

1.セッションと引数を全部、ハッシュマップに入れる

2.そのハッシュマップをもとに処理を行い、
    処理系なら、処理結果
    検索系なら、検索結果のベクタ(ハッシュマップのレコードが要素)
  をうけとる

3.以降の処理で必要な値は、ハッシュマップから取り出し
  セッションにセット

4.XMLを書き出す(WebAPIの場合)
    JSPを呼び出す



ということです。以下、それぞれの内容について考えて見ます。




■セッションと引数を全部、ハッシュマップに入れる

これは、どのサーブレットでも、全部同じように、
ここの「セッションとパラメータをすべてハッシュマップに入れる」で書いたプログラムで、できそうです。

なお、かりに、1つ1つ、必要な値やセッションをとってくる場合でも、
WebAPIの仕様書をExcelで記述して、そこから自動生成すれば、
まあ、OKです(自動生成の方法は、ここ




■そのハッシュマップをもとに処理

 まあ、自動生成するとして、そのWebAPIの仕様書に、呼び出しモデルのクラスとメソッドを書くこととします。

 返り値が、処理系と検索系で違うので、雛形を2つに分けることとします。




■以降の処理で必要な値は、ハッシュマップから取り出しセッションにセット

 ハッシュマップのキーsessionDataに、ハッシュマップに入れたいデータをすべて入れておくとして(入れるのは、モデルで入れる)、

 ここでやるのは、以下のとおりです

・ハッシュマップから、キーsessionDataの値(これもハッシュマップ)を
 取り出し、変数sessionMapにいれます
・sessionMapのキーと値を全部取り出し、セッションにセットします。





■XMLを書き出す(WebAPIの場合)

 サーブレットの返り値をつくるのですが、方法は
  フォワードしてJSPで値をつくる
  そのままgetWriterを取得し、どんどん出力を書いていく

 の2とおりあります。前者のつもりで、いままでJSPと書いていたのですが、
 どうも、処理系、検索系の雛形を用意しておけばOKそうなので、わざわざフォワードしなくても、サーブレットの雛形にそのまま書けばいいかな・・

 ということで、JSPは用意しないで、サーブレットを用意することにします。




ということで、「★返り値となるXMLのJSP」はいらないので、作るものは、こういうふうになります。

1.画面
   ・各画面
   ★共通部分(呼び出し部分など)

2.コントローラー
   ★サーブレット	=>雛形と仕様書を用意

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分	=>雛形と仕様書を用意
   ★共通部分	=>プログラムを用意



ということで、次回は画面です。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その83:単体テスト(8)バグ修正概要

2007-08-29 10:59:33 | 開発ネタ

シリーズ「開発の初めから順番に書いていってみる」の続きです。

 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 (バックナンバーは、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm)。

 前回で、ここの順番で言う「4.実際にテストする」が終わりましたので、今回は次の、「バグ修正して再テスト」です。




■バグ修正の一般的な流れ

 テストで障害が起きたり、なんらかのはずみでバグを見つけてしまった場合は、イカのような形で、バグ修正するのが、一般的だと思います。

1.バグ発生内容を特定し、エビデンスをとる(とれたら)
2.バグ票に記入
3.台帳に登録、担当者にバグ票を送付
4.担当者がバグ修正
    ・バグの原因特定
    ・修正
    ・確認テスト
5.担当者がバグ票の障害修正欄などいろいろ記入する
6.バグ発見者にバグ票が戻ってくるので、確認
    →OKなら、7へ、NGなら、4へ
7.修正確認をバグ票と台帳に記入、バグ票は保管
8.デグレードしていないかのリグレッションテスト

ということで、ここでの成果物&入出力は
・バグ票(+添付資料のエビデンスなど)
・バグ管理台帳
ということになります。




■バグ票、管理台帳と、バグトラッキングシステム(BTS)

 で、バグ票、管理台帳ですが、紙でやる場合は、こんなかんじですが(まあ、これを、特に管理台帳をExcelやAccessなどでやるという話はありますが、それもふくめて)、このようなバグ票、管理台帳を電子化したものが、バグ管理システム(=バグトラッキングシステム、BTS)となります。




■リグレッションテスト、回帰テスト

 で、バグ修正したときに、修正箇所はなおしたんだけど、今度は他のところに(今までちゃんと動いていたところに)バグを入れてしまうということがありえます。これをデグレードといい、これを防ぐため、すでに行ったテスト項目を、再度確認することをリグレッションテスト(あるいは回帰テスト)といいます。

 これは、2度手間、3度手間・・になるので、いかに自動化して、品質をおとさずテストするかというのが、鍵になります。




■横並びチェック

 あるバグがあったとき、同じモジュールを通るところは、同じようなバグがでるはずです。そして、そのモジュールを直せば、同じようなバグも修正されるはずです。
 また、同じモジュールではないけど、同じようなコーディングをしているときも、同じようなバグがでるはずです。そういうところは、そのようなコーディングしてるところ全部を直して、修正しなきゃいけません。

 このように、あるバグに対し、同じ原因によって、似たようなバグが出ている、出る可能性がある場合、修正して、その似たようなバグが出ているところも、直っているかどうか確認(チェック)する必要があります。
 これが、横並びチェックです。

 横並びチェック項目に対し、あらたにバグ票を発行するか、同じバグ票でやるか、同じバグ票に横並びチェック項目を入れるかは、プロジェクトによって違います。
 



 ということで、バグの概要は書いたので、次回からは、個別にいくつかのテーマを詳しく書いてみたいと思います。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

開発の初めから順番に書いていってみる その82:単体テスト(7)テストの実施

2007-08-28 19:03:12 | 開発ネタ

シリーズ「開発の初めから順番に書いていってみる」の続きです。

 設計手順には、要求分析、外部設計、内部詳細設計・プログラミング、単体テスト、結合テスト、総合テスト、運用テスト及び運用とあります。
 (バックナンバーは、ここ http://www.geocities.jp/xmldtp/index_kaihatsu.htm 最近更新しました)。

 前回で、ここの順番で言う「3.ドライバ、スタブ、テストデータの作成」が終わりましたので、今回は次の、「4.実際にテストする」です。




■単体テストの実施(1)デバッグモードで目視

 単体テストは、ホワイトボックステストであるとすると、プログラムの分岐あるいは命令を通ったか、をしらべることになります。
 これは、デバッグモードで実行して、デバッガで1行1行、確認しながら行えば、まあ、できます。

 しかし、テストの場合、本当に、テスト項目を実施した、今回の場合、本当にそこを通ったということを証明するもの=エビデンスが必要です。
 画面コピーをとる・・・というのも、大変です。
 どうしましょう。




■単体テストの実施(2)ログを入れる

 ということで、エビデンスまでとるとなると、ログを入れるということになります。
 ログを分岐点にいれて実行、ログを取得すれば、ログから、通ったか通らないかわかるので、エビデンスとすることができます。

 ただし、アスペクト指向でもない限り、プログラムを作り終わったあとに(テストするときに)ログを入れるというのは、プログラムを直さないと出来ないわけで・・・

 っていうわけで、ログをいれてエビデンスとする場合には、コーディング規約で、ログをいれるところをきめて、プログラム作成中に、ログを入れておくのが、のぞましいです。




■単体テストの実施(3)どっちもめんどうなので。。

 でも、どっちにしろ、めんどうです。
 JUnitでは、モジュール内はブラックボックスとして、入力値を変化させ、その出力結果をログに残すことにより、単体テストとしています。
 これが、単体テストか?ホワイトボックスこそが、単体テストではないのか・・
 という意見もあるかと思いますが。。。




■結果とエビデンスをのこす

 で、結果に関しては、記入するところがあるのでそこに記入し、必要なエビデンスをのこします。




というように実施するわけです。
で、うまくいけばこれでおしまいなのですが、たいていは巧くいきません。
バグが、でます。
次回はそのバグについてです。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

台湾エイサー、米ゲートウェイを買収

2007-08-28 13:17:46 | Weblog

きょうのオープニングベルでもやってたけど
ここのニュース
台湾エイサー、米ゲートウェイを買収
http://www.nikkei.co.jp/news/kaigai/20070828AT2M2701T27082007.html

によると(以下斜体は上記サイトより引用)


台湾のパソコン最大手、宏碁(エイサー)は27日、米同業大手のゲートウェイを買収すると発表した。7億1000万ドル(約825億円)でゲートウェイを全額出資子会社にする。宏碁は買収により中国レノボ・グループを抜き、世界のパソコン市場でヒューレット・パッカード(HP)、デルの米国勢に次ぐシェア3位に浮上する。


ほー。。
で、パソコンは安くなるのかなあ(^^)?


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

VC++で実行時、DLLがないといわれ、スタティックにしたら、エラー。。。

2007-08-28 11:34:07 | Weblog

VC++で作ってて、実行ファイルを実行してもらったら、
「なんだかDLLが、ありません」みたいなエラーが出て、立ち上がらない
との話。

あ、そっか、共有DLLを使うって言う設定にしてたっけ(^^;)
ということで、

(プロジェクトのプロパティダイアログ)

こんなふうに、スタティックに変えてみたら

今度は、リビルトのリンクで

nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) は既に libcpmt.lib(newop.obj) で定義されています。
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) は既に libcpmt.lib(newaop.obj) で定義されています。


というエラーで、実行ファイルが出来ない(>_<!)

こまったあ・・

と思ったら。。。

こんなブログを発見
[技術情報][VC] MFC プロジェクトに C ソースコードを追加すると LNK4006 ワーニングになることがある
http://www.users.gr.jp/blogs/hidori/archive/2005/02/14/8990.aspx


おお、まさにこれじゃ・・
で、そのブログによると(以下斜体は上記ブログより引用)

リンカオプションの「特定のライブラリを無視」に "Nafxcw.lib Libcmt.lib" を指定
追加オプションの「追加の依存ファイル」に "Nafxcw.lib Libcmt.lib" を指定


つまり、

(プロジェクトのプロパティダイアログ)
こうするってことですね・・

やってみると・・・

ほんとーだあー(@_@!)
エラーがなくなった。。。
実行ファイルが出来た・・めでたしめでたし



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

オブジェクト指向で開発の最初から最後までの手順例-その24:フレームワークその4

2007-08-27 14:22:04 | Weblog

 オブジェクト指向でやる場合の最初から最後までの流れを、実際の例を挙げて書いていくシリーズ「オブジェクト指向で開発の最初から最後までの手順例」、今、ここの「(3)フレームワークを決定する」をやっていて、前回「何を作るのか?」をまとめました。
こんなかんじ
1.画面
   ・各画面
   ★共通部分(呼び出し部分など)

2.コントローラー
   ★サーブレット
   ★返り値となるXMLのJSP

3.モデル部分
   ・各モデル部分のプログラム

4.DBアクセス部分
   ★各アクセス部分
   ★共通部分



 今回は、「4.DBアクセス部分」を「3.モデル部分」とあわせて説明します。




■説明例

 で、その説明する例として、発注と発注明細について考えます。

 発注を作成する場合は、発注と発注明細の作成が必要で、これは、1つのトランザクションとして扱わないといけません(どっちも両方作成するか(=コミット)、どっちも両方取り消すか(ロールバック))

 しかし、発注のみ、発注明細のみの編集もありえます。




■モデル作成前に、「4.DBアクセス部分」で用意するもの

 DBアクセス部分では、以下のものがあります。

1.各(テーブル)アクセス部分
  モデルでアクセスするテーブルのDBアクセスクラスを作成します。
  今回は、
    発注テーブルアクセスクラス
    発注明細テーブルアクセスクラス
  を作成します。
  このクラスは、ここに書いてあるexecuteに、トランザクション処理が加わります。
(ここでは、executeの代わりにaddBatch()し、rollback(),commit()は、後述の共通処理でします)


2.共通部分
 トランザクション処理を行う場合、

  (あ)コネクションとステートメントオブジェクトを作成し
  (い)各テーブル処理で、insert,update,delete処理をaddBach()し、
  (う-1)executeBatch();して、コミットするか(エラーならロールバック)
  (う-2)何か都合の悪いことが起きたらロールバックします。

 このうち、(い)は、上記「1.各(テーブル)アクセス部分」でやっているので、ここでは、(あ)、(うー1)、(うー2)の処理を作成します。
 MyConnectionというクラスを作成し(クラス名はなんでもかまいませんが)
 属性として、コネクションとステートメントを持つようにして、

 生成するとき(=コンストラクタの中で)
  (あ)の処理、つまりコネクションとステートメントを生成して

 commitメソッドで
  (う-1)のexecuteBatch();して、コミットする(エラーならロールバック)
   処理を行い

 rollbackメソッドで
  (う-2)何か都合の悪いことが起きたらロールバック処理を行います。




■モデル処理では・・・

 モデル処理では、以下の処理を行います。
 引数は、いつものように、更新データ等が入ったハッシュマップです

<<発注データのモデル>>

1.ハッシュマップから、コネクション(キーがMyConnectionとする)をさがす。
   なかったら、「4.DBアクセス部分」の「共通処理」のコネクション作成
   を行う

2.発注データの挿入、更新処理を行う。その際、引数のハッシュマップに、
  1のコネクションを入れる
   →トランザクション処理で、更新を行う

3.発注明細データがあれば、
  発注明細データの挿入、更新処理を行う。その際、引数のハッシュマップに、
  1のコネクションを入れる
   →トランザクション処理で、更新を行う

4.1で、コネクションがなくて、生成した場合は、
    エラーがあればロールバック、なければコミットをする
  →コネクションを、ハッシュマップからとってきた場合は、なにもしない。


発注明細も、まったく同様に行います。


<<発注明細データのモデル>>

1.ハッシュマップから、コネクション(キーがMyConnectionとする)をさがす。
   なかったら、「4.DBアクセス部分」の「共通処理」のコネクション作成
   を行う

2.発注明細データの挿入、更新処理を行う。その際、引数のハッシュマップに、
  1のコネクションを入れる
   →トランザクション処理で、更新を行う

3.1で、コネクションがなくて、生成した場合は、
   エラーがあればロールバック、なければコミットをする
  →コネクションを、ハッシュマップからとってきた場合は、なにもしない。




■こうすると・・・

 こうすると、

・発注データのみの場合は、「発注データのモデル」をとおって、
 発注データのみ、トランザクション処理を行います。

・発注明細データのみの場合は、「発注明細データのモデル」をとおって、
 発注明細データのみ、トランザクション処理を行います。

そして、発注と、発注明細データ両方ある場合は、

・「発注データのモデル」をとおって、
    2で、発注データの、トランザクション処理をまず行い、

・3で、「発注明細データのモデル」ガ呼び出された場合は、
    ハッシュマップに入っているので、
    トランザクション処理は、2のコネクションにaddBach()され、

・4で、発注、発注明細すべてのaddBachが、いっぺんにcommitまたはrollback
 されます。
  →発注と、発注明細データ両方のトランザクションができます。




■つまり・・・

・コネクションを、最上位で生成させ、
・そこから呼び出される、あるいは、その後で呼び出されるものには、
 そのコネクションを引数でわたし、それを利用してトランザクション処理を行い
  →引数がNULLなら、最上位ということ
・最上位で、ロールバックコミットする

というわけです。

こうすれば、メソッドが入れ子になっても、コネクションは入れ子にならずに(次々に同じトランザクションにaddBachされる形で)更新でき、
ロールバック、コミットできます。




ということで、「4.DBアクセス部分」を「3.モデル部分」の説明は終わりです。
(具体的なソース作成は、「(4)フレームワークにもとづき、クラスなどの開発手順、雛形の確定」で行うことになります)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

YouTubeの「映像に広告をつけ」るという記事-日経ビジネス8月27日号86ページ

2007-08-26 23:37:30 | Weblog

日経ビジネス 2007年8月27日号
(今の号、トヨタがソニーのロボット部門を買収について書いてある号)
の86ページから88ページ

映像と広告モデル ネットのあした
ユーチューブ「改造計画」
グーグル流の移植で、カネを生み出す体制に


によると(以下斜体は、上記日経ビジネス86ページ見出しより引用)


グーグルは昨年買収した世界最大の映像サイト「ユーチューブ」を改造する。
世界中から投稿された映像に広告をつけ、収入を分け与える考え。
魅力的だが、利益を生まなかった無数の映像を成長の原動力に変える。


その記事によると、画像の下に広告が入り、そこをクリックすると、CMがはじまり
クリックに応じて、投稿者がお金がもらえるというもの。
 マッシュアップした場合にも、お金がもらえる仕組みにするようだ。

 このしくみ、要するに、フラッシュの1レイヤに動画、別のレイヤに広告を入れ、その広告部分がクリックされたら、CMにいくとすればよさそうな気がするので、他の動画サイトでも、やる気になれば、できそうですね(^^)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ISPがウイルス感染者の回線を切断していくとの方針

2007-08-26 17:24:45 | Weblog

ここのスラッシュドットニュース
ISPがウイルス感染者の回線を切断していくとの方針
http://slashdot.jp/security/07/08/25/0356233.shtml

によると(以下斜体は上記サイトより引用)

NIKKEI NETによると、総務省はISPがウイルスに感染した端末の回線を切断することを認め、指針を策定していく方針だ。この指針を受け、各ISPは社内規定などを改め順次適用を始める見通し。


これ、切断されたとき、「ウィルス感染しているから」って理由がわかればいいけど、
理由がわからず、切断されると。。。

知らぬ間にウィルス感染して、急に切断!
「へー、なんでなんでえ??」ってことで、
ISPに問い合わせ殺到
ってなことは。。。ないのかな(^^;)


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Hello World程度のデータベース(その34:実践編 JDBCインストール)

2007-08-26 02:12:28 | 土日シリーズ

情報処理とは何から、データベースの基本的な話(情報処理試験のデータベーススペシャリスト程度の話まで)を書く、土日のシリーズ「Hello World程度のデータベース」です。

 このシリーズのはじめは、理論的なことを書いてきて、今は、実際にデータベースアクセスプログラムを書いてみましょう!ということになりました。

 一連の手順はここに書いてあって、今回は、「JDBCのインストール」です。




■MySQLのJDBC

 今回は、MySQLでやるので、MySQLのJDBCを使いましょう。
 JDBCはデータベースごとにあるので、他のDBなら、ほかのJDBCが必要です。

 で、MySQLのJDBCは、Connector/J 5.0になります(5.1は、現在ベータなので、使うのは、まあ5.0ってことで・・)



■ダウンロード
そのMySQLのJDBC,Connector/J 5.0は、

ここ http://dev.mysql.com/downloads/connector/j/5.0.html
にあります。
そこの「Source and Binaries (zip)」(下のZIPのほうです)のDownload を
クリックするか、右クリックして、「対象をファイルに保存」して、その後、
ZIPファイルを解凍すればいいはず。。。ですが、

う、ダウンロードできない・・・時間によっては、そーいうことがあるのかしら?

その場合は、ミラーサイト。
そのよこの”Pick a mirror”をクリックするのでは「なくて!!」
左側の、Mirrors(Archivesの下、Documentationの上)をクリック。
いろんなミラーが出ます。ウィリアムのいたずらは、JMPAを選びました。

そうすると Connector/J 5.0は、
ここ http://mirror.mysql-partners-jp.biz/downloads/connector/j/5.0.htmlで入手することになります。




■インストール

 解凍したら、Tomcatと、(Eclipseを使っていれば)Eclipseのパスに入れる必要があります(使わない場合、classpathに通します)。


●Tomcatにいれる

 前回Tomcat6.0を入れましたが、6.0の説明は、最後の配置のときします。
 今回は、4.1等の説明をします
 Tomcatのホーム
(設定を変えてなければ、4.1は、
C:Program FilesApache Software FoundationTomcat 4.1
とかだと思います)
の下のcommonlib、つまりデフォルトだと
C:Program FilesApache Software FoundationTomcat 4.1commonlib
の下に、解凍した
mysql-connector-java-5.0.7-bin.jar
をいれます。

●Eclipseの設定
プロジェクトを左クリックし、Propertiesを選択、プロパティのダイアログが出たら、
左側で、Java Built Pathを選択。Librariesタブをクリックして、Add External JARSで、
mysql-connector-java-5.0.7-bin.jar
を選択します
(すみません、ウィリアムのいたずら、英語版のEclipseのまま使っているので、日本語パッチを当てている人は、上記の表現が変わります)



と、こんかいはここまで



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

WinnyのBREW版ってないことから考えて、Winnyの原因がレガシーシステムなのか?。。。

2007-08-25 18:58:30 | Weblog

ここのスラッシュドットニュース
MSKK社長曰く「Winny問題は日本のデジタルワークスタイルの遅れが原因」
http://slashdot.jp/articles/07/08/22/2329250.shtml

によると、マイクロソフト社長が以下のように発言したそうだ
(以下斜体は上記サイトより引用)


Winnyでの情報漏えい事件や年金記録の問題は、レガシーシステムを使い続けていることが原因であり、日本社会が抱える深刻な問題であると指摘したうえで、「Windowsのような標準技術に基づくオープン・システムに移行することで、日本のITを取り巻く深刻な問題を解決してほしい」と訴えたのだそうだ。


 年金はさておき(コレも違うと思うけど)Winnyの原因は、レガシーシステムを使い続けていることが原因なのか?
 たとえば、WinnyのBREW版ってないよねえ。。もしあったら、アドレス帳を勝手に送って。。とかなったら、大問題になりそうだけど、絶対にない。
 理由は、BREW開発自体が、日本においてはオープンでなく、クローズドだし(クアルコムから証明書をもらい、日本市場をはじめから狙わない場合を除く)、日本でBREWアプリを載せるとしたら、KDDIの審査を受けなければならない。かりに、BREW版Winnyが作れたとしても、その審査にはまず通らないだろう。

 このように、クローズドなしステムなら、そもそもWinnyが載らないので、それによる被害もない。オープンシステムだからこそ、Winnyが移植でき、それを利用して被害が出るんじゃあ・・・つーか、WindowsユーザーがWinny使って問題おこし、クローズドなBREW使って、Winny問題起きてない時点で、むしろ、オープンのほうが危険だと思うけど・・

 これ、逆にKDDIの人が、
「オープンは危険です。BREWでは、Winnyの問題は起きていません。みんな、BREWベースでアプリを作りましょう(^^;)v」って、逆に宣伝しても、違和感ないと思うけど。。

 そうそう、だから防衛庁も、機密保持をまじめに考えるなら、OSも、防衛庁内で自作すればいいんだよね。アプリケーションのワープロも表計算も。。。

 アプリケーションのワープロ、表計算に関しては、国内でも作れるわけだし(例:ジャストシステム)、OSに関しては、暗号化された実行ファイルだけが、動くようにするっていう仕様なら、一部変更なので、そんなに難しくないし。。
 Linuxあたりをベースにして作れば、これからどんどん捨てられる中古パソコンをリサイクルすれば使えるので、費用的にも割安だし・・
 アプリケーションの作成ファイルも暗号化し、機密性のないもの、低いものは、ネットで鍵をわたし、機密性の高いものは、生体認証の結果を利用して鍵を生成するとか、なにか、鍵になるものを提示しないといけないとかにすれば・・・
 かりにアプリケーションファイルが盗まれても、解読できない・・

 そもそも、軍事機密が、オープンなものの上にあっていいのか?って言うほうが問題かも・・
 軍事機密は、クローズドなシステムの上にあって、他者と情報交換するときだけ、オープンなフォーマットにしたほうが、安全なんじゃないか??




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする