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

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

DBアクセスの場合、1トランザクション毎にまとめたほうがいいので、自動生成は。。。

2006-08-04 21:35:41 | Weblog

 以前のブログで、産能大記号について、一つ一つみていくということで、「新しい帳票を用意する」に相当するものを、考えた。
 そこでは、以下の2種類の考え方があって、

  1つはDBに書き出せば本当はOKというもの
  もう1つは、紙(帳票)に書き出すこと重要

というのがあると書き、このシリーズの前回では、帳票の場合を説明した。

 帳票の場合は、
  ・帳票のサービスププログラムを用意し、データはXMLで
    →帳票のフォーマットはXMLのタグから分かるようにする
  ・帳票サービスでは、データ処理はさせないで、そのサービスを呼び出すほうが、
   データ加工を行い、XMLで転送する
 ということを書いた。

 今日は、前者の、「1つはDBに書き出せば本当はOKというもの」、つまりDB書き出しについて




DB書き出しの場合、コミット、ロールバックのトランザクション処理をどこに置くか?という問題になる。仮に、トランザクション操作をクライアント側から発行できるようにするとなると、サーバーに対し、2フェーズコミットで実現するということになる。
 しかし、このやり方、セキュアにして、確認をとってからコミットするというのは、通信が多くなると、時間がかかってくる(ネットワーク負荷がおおきい)。

 とすると、このやり方より、1トランザクション分のデータをサーバーに送る形にして、サーバーのほうで、複数のテーブルに対してDBアクセスをしてもらったほうがいいということになる。




 とすると、サーバー側には、2段階のモジュールができることになる。

   ・1つは、1トランザクション分を管理するサービスプログラム
    →これを呼び出す
    →このプログラムから、複数の「テーブルに対応するサービスプログラム」
     を呼び出す。

   ・もう一つは、1テーブルに対応するサービスプログラム

 EJBの世界では、前者がセッションBEAN,後者がエンティティBeanとなり、
 富士通InterStageの世界では、前者がCBS、後者がCBMとなる。


 ただし、「1トランザクション分を管理するサービスプログラム」処理は、固定的に決まっているものではない。
 前のテーブルの結果を利用して、あとのテーブルの値を更新するなどということもある。
 このため、クライアント側で1トランザクションの値を設定するときに、全ての値を設定できるわけでなく、「1トランザクション分を管理するサービスプログラム」の内部で、加減乗除その他をしてもらうことになる。
 しかし、ここが、ユーザーにも分かって、確認が取れないと、おかしなプログラムが出来てしまったりする。ということで、恣意的に、このプログラムを書いてもらうというのでは困る。ある程度の規制が必要だ。
 となると、仕様を、入力するツールがあって、そこから自動生成することになる。

 その一方、「1テーブルに対応するサービスプログラム」というのは、Hibernateなどが存在するように、ある程度きまっている。そこで、この「1テーブルに対応するサービスプログラム」というのは、自動生成が可能である。




まとめると、
  帳票の場合は、クライアント側でデータの値を設定するのに対し
  DB更新の場合は、サーバー側で1トランザクション分の値設定の処理をさせる。
    そのために、とくに、ここで恣意性をふくまないために、
    仕様入力ツール、自動生成ツールが必要となる。

では、具体的に「仕様入力ツール、自動生成ツール」とは何か?という話については、長くなるし、まだ作っていないので、また今度ということにしよう。


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

「リネージュガール、コスプレでアップデートをPR」だって

2006-08-04 20:41:11 | Weblog

ここのニュース
(ただし、勤務中に開くと、不適切な画像が含まれているかもしれません)
NCジャパン:リネージュガール、コスプレでアップデートをPR
http://www.mainichi-msn.co.jp/entertainment/game/graph/event/20060804/


によると、オンラインRPG「リネージュ」をPRするリネージュガールが、コスプレして、「毎日新聞社デジタルメディア局」を訪問したんだとか。。。なぜ、毎日新聞??ポットキャストのエンタメ情報にでも、ねたにしてもらうため?

 ただ、市川さん以外の2人のリネージュガールをみて思う。
 
 リネージュガールを選んだ人たちと、ウィリアムのいたずらの好みは違うようだ。。
 ってことは、ウィリアムのいたずらは、リネージュをやらないほうがいいだろう。
 きっと、違う感性が求められるのであろう。。。間違いない。



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

スパゲティなプログラムを分解してイベントにして、簡単にする方法1・・簡単な例

2006-08-04 17:35:10 | Weblog

 前に、たしか、基質特異性の話を書こうとした気がします。

 複雑なプログラム(まあ、スパゲティになっちゃうようなやつ)を、簡単にするのに、細かくわけて、それを、人間がやっている酵素の基質特異性みたいなことすると、うまくいくよ。。
 ってかいて、そのあと、細かく分けての話をずーっとして(産能大記号)、結局、基質特異性のほうのはなしをしてなかったんで、きょうは、そっちのほうをかきますね。




 酵素の基質特異性っていうのは、ある特定のものにしか、反応しないという性質。
 これがあると、いろんなものがまじっていても、ある特定のものだけ分解する。
 その分解されたやつが、また、特定のものにだけ反応して、分解する。。。と
 つづいていくやつ。

 つまり、これを応用すると、

 いろいろ複雑につづいているプログラムも、
  ステータスをふって、そのステータスのときだけ動き、
  その働きが終わったら、次のステータスにする。。
 っていうふうにしていくと、
 (ステータスが基質にあたる)

 switchで、ステータスによってディスパッチするコントローラーをつくって、
 あとは、状態遷移におとしこめるってこと。。。

 ・・・なにいってるか、自分でもわかんなくなってきたので、
 例を挙げます。




■例

以下のようなフローがあります。


このぐらいだったらIF文で書いてもわかるけど、もっと複雑になると
分けわかんなくなって、スパゲティになってしまいます。

そこで。。。




■手順
1.まず、上記のフローで、入力が1つ、出力が1つ(1本の線しかない)ところは、まとめて、
  1モジュールとします。

2.そして、出力のところに、番号を振ります。
  そうすると、こんな図になります。

 この図をプログラムします。




■ソース

 ソースは、こんな感じになります。
public ststic void main(String[] args)
{
	//	引数を設定している=ここは、本題ではない
	HashMap map = new HashMap();
	if ( map	==	null )
	{
		//	エラー
		sts	=	9;
	}
	else
	{
		//	引数はハッシュマップにいてておくと、
		//	関数の取り外しに便利
		for(int i = 0 ; i < args.length ; i ++ )
		{
			map.put("para"+i,args[i]);	
		}

		//	ステータスの初期化
		sts = 0;
	}

	while(sts < 8 )
	{
		switch(sts)
		{
		case	0:	//	一番初め:処理1
			sts = syori_1(map);
			break;
		case	1:	//	条件1
			sts =zyoken_1(map);
			break;
		case	2:	//	処理2
			sts = syori_2(map);
			break;
		case	3:	//	処理4
			sts = syori_4(map);
			break;
		case	4:	//	処理3
			sts = syori_3(map);
			break;
		case	5:	//	処理4
			sts = syori_4(map);
			break;
		case	6:	//	処理5
			sts = syori_5(map);
			break;
		case	7:	//	処理5
			sts = syori_5(map);
			break;
		}
	}

	if ( sts	>	8 )
	{
		System.out.println("Error");
	}
}

/*============================================
 * 処理1<p>
 *============================================*/
public int syori_1(HashMap map)
{

	//	ここに処理1のときの処理を書く
	//	えらーのときreturn 9;

	//	処理終了時のステータスをセット
	return	1;
}

/*============================================
 * 条件1<p>
 *============================================*/
public int syori_1(HashMap map)
{
	if ( map == null )
		return	9;	//	エラー

	String para2 = (String)map.get("para2");

	//	条件を判断して、
	//	分岐先のステータスをセット
	if ( para2	==	null )
	{
		return	 3;
	}
	else if ( para2.equals("2") == true )
	{
		return	2
	}
	return	4;
}

//==============以下の処理は省略================//

(上記 < > ¥ は、本当は、半角です)

 上図の番号をcase文にかき、そのcase文の下に、起動する処理を書きます。
 で、結果としてsts(ステータス)をもらっています。

 こんかいのような簡単なケースではこれでもOKですが、次回以降に説明する、
 並列処理などを考える場合は、このような形でなく、終了したってことを、
 ハッシュマップなり、リストなりにいれます。

 処理の場合は、うまくいったら、終了の(上図の)番号を、エラーのときはエラーステータス
 (ここでは9)を返します。

 条件のときは、それぞれの条件の(上図の)番号を、エラーのときはエラーステータス
 (ここでは9)を返します。

 最後の処理になると、while文がfalseになり、抜けます。
 また、エラーのときもfalse担って抜けるようにします。




■このようにするメリット
 こうすると、イベントと処理っていうことになるので、状態遷移図で管理できるようになり、1つ1つのプログラムの取り外しや修正も(プログラムが局所化され、重複の場合、同じ処理を使うので、検索しやすくなって)見やすくなります。
 
 すくなくても、if文の入れ子の}がたらなくて。。。なんていうミスは防げます。




 今日は、同時並列処理がなかったのでかんたんでしたけど、
 そのような、スレッドで、同時並列処理させる場合とかについては、また今度
 かきたいとおもってます。



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

中国向けPOPによるメール取得の通信が、途中で切断されることがあるという発表

2006-08-04 14:22:02 | Weblog

 スラッシュドットにも書いてあったが(ここ)、

 以下のニュースリリース
国際間における通信の状況改善に向けた取り組みについて
https://www.telecom-isac.jp/news/news20060803.html

によると(以下、斜体は上記ニュースリリースより引用)


対象地域: 中国
対象通信: POP プロトコル (*1)

この事象は、日本のISPのメールサーバに対するメール取得の通信が、通信の途中で不明の原因により切断されるという事象です。特定の事業者やIPアドレスにのみ依存するものではなく、現時点でも断続的に発生しています。


だそうな。

。。。。ひょっとして。。検閲??(^^;)
文中に”靖国神社”って書いてみたら。。。。
(冗談ですよ、本気にしないでね。
 あ、上記ニュースリリースがでてるってことは、本当)


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

JavaScript用IDE、Dreamweaverの代わりになるフリーソフト「Aptana」

2006-08-04 11:09:32 | JavaとWeb

いま、いろいろためしている時間ないので、めもだけ
(まだ、使ってません)

Dreamweaverの代わりになるフリーソフト「Aptana」
http://gigazine.net/index.php?/news/comments/20060801_aptana/


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


JavaScriptの開発環境、要するにJavaScript用IDEという位置づけなのですが、HTML、CSSの構造をアウトラインで示してくれたり、文法の間違いを指摘してくれたり、やっていることはほとんどDreamweaverの持っている機能と同じです。

特に面白いのはJavaScriptやCSSなどがInternetExplorerとFirefoxに対応しているかどうかが一発で分かる点。JavaScriptのエラーについても細かい部分まで指摘してくれます。つまり、実行しなくてもエラーがドコにあるのか分かる「静的解析」が可能というわけ。


だそうな。。



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