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

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

3月30日に出す、「コピーされるほど儲かるシステム!開発日記」第15号について

2005-03-29 12:33:37 | コピーされるほど儲かるシステム!
3月30日に出す、「コピーされるほど儲かるシステム!開発日記」第15号は、ウィリアムのいたずらが行った場合の見積もり例です。実際に何を作るのかについて書いてあります。

----------

内容は、要求仕様についてです。

具体的には、以下のブログのまとめです。

要件定義は何からはじめるか-世代の断絶が、業界の病理と開発の教祖を生み出した
http://blog.goo.ne.jp/xmldtp/e/424e7be149d7577ae9f06f8444bf612e

FrontPageでHTMLファイルで保存すると、Excelで開いてもExcelファイルで保存不可
http://blog.goo.ne.jp/xmldtp/e/8b69771d2146b7b29664e6ce288931f3

ただし、例が、夕飯支援システムでなく、確定申告の例(ブログには無い)になっています。


ということで、以下、いつもの決り文句です。

(決り文句)----------

 15号のメルマガについての、感想などはここの「コメント」にどうぞ!

 メールと、ウィリアムのいたずら自身のブログについては、このブログの
「コピーされるほど儲かるシステム!開発日記」へのメールについて
http://blog.goo.ne.jp/xmldtp/e/a58b79b40b1148c2f744556e27b76a79
を参照してください

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

COBOLからJAVAへの変換試案 オンライン(JAVAの1つのクラスで複数回画面表示)No2

2005-03-29 12:26:01 | JavaとWeb
 さきほどのブログのつづき




■■問題

 以下の、問題があるときの話です

・1つのプログラムの中で、何回も画面入出力が可能で、その間、セッションが切れない
    →Webでは1プログラムでだいたい1画面、画面間でセッションがきれる

・場合によっては、write(出力)からread(読む)の順番になる
    →Webの場合doGet()などで、データを読んでから処理、出力と、逆になるケースあり

■■ 対応策

(1)それでも、Strutsとかで、実現したいあなたへ
(2)そういう動きをする画面表示用のプログラム(ユーティリティ)をつくってしまう
(3)荒業で、サーバーのプログラムをクライアントに持ってくる

前回のブログで、(1)は説明しました。今回は、のこり




■■(2)そういう動きをする画面表示用のプログラム(ユーティリティ)をつくってしまう

以下のプログラムをつくってしまいます。

クライアントとサーバー側で、ソケット間プログラムをするプログラムで
(だから作るプログラムは、クライアントとソケットそれぞれ)

・サーバーをたちあげ、

・クライアントが立ち上がると、ソケットと通信して、コネクションを貼る

・サーバー側からwrite命令を発行すると、クライアント側に、そのデータを送る

・クライアントでは、指定されたデータをもとに、画面を選び、値をセットして表示する
  →したがって、画面のクラス(または元になるもの)は、クライアント側に置きます

・クライアント側では、画面入力され、イベントが発生すると、
   sendを行い、サーバーにデータ送信します。

っていうプログラムをつくると、サーバーからread writeするだけで、通信が出来ることになります(ただし、どの端末にどのメッセージを送るかとか、もうちょっと詰めないといけないことがあるけど)。
 ソケットを利用したプログラムなだけで、たいして難しいもんではないでしょう。


■■(3)荒業で、サーバーのプログラムをクライアントに持ってくる
 別に、サーバープログラムを、クライアントにおいちゃってもいいじゃん!という発想です。
 その場合,データベースと、(場合によっては)ファイルだけは、サーバーにおいておきたいかもしれません。

・そこで、データベースは、データベースサーバーとして、サーバーにおき、
  ODBCかなんかで、アクセスする
・サーバーに置きたいファイルがあれば、サーバーにおき、
  クライアントと、共有する

 とします。そうすれば、クライアントに、サーバープログラムがあってもいいじゃん!となります。

そのとき、画面の入出力は、(たとえば、Swingを使うなら)こんなかんじ。

OPENのところで、画面を生成し、(JFrame g1 = new JFrame() )
writeのところで、可視化し(g1.setVisible())
Readのところは、ループしておいて、画面からイベントが上がったら、フラグをセット、
  そのフラグが上がったら、画面から値を取得してぬけるようにする
  (もちろん、ループしているとき、sleepして、ある程度寝かせておきながらループ)
closeで画面をクローズする(g1.close())




なかんじだとおもいます。

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

COBOLからJAVAへの変換試案 オンラインNo1(またはJAVAの1つのクラスで複数回画面表示)

2005-03-29 11:50:21 | JavaとWeb
 今回は、COBOLからJAVAプログラムへの変換の話、オンライン編なんですけど、この話は、それだけでなく、JAVAの1つのクラスで複数回画面入出力をさせるには?という話も含みます。




COBOLからJAVAのプログラムへの変換は、まず、昨日のブログで書いたように、バッチと同じようにすすめていくわけですが、そうすると、壁にぶちあたります。

 それは

・1つのプログラムの中で、何回も画面入出力が可能で、その間、セッションが切れない
    →Webでは1プログラムでだいたい1画面、画面間でセッションがきれる

・場合によっては、write(出力)からread(読む)の順番になる
    →Webの場合doGet()などで、データを読んでから処理、出力と、逆になるケースあり
 
です。

 このため、単純に、そのCOBOLプログラムを、JAVAのwebを利用したプログラムに変換できません。
 実は、これは、JAVAでも、
・バッチプログラムの入出力を画面上から行わせるように変えた場合
・入出力が複数回ある画面プログラム
を、webのサーブレットやStrutsを利用しようとしたときにも、おきます。

 今日は、その対処法試案




 まず、各社固有のプラットフォームで、そういうものへの対応ができているのであれば、そちらを使えばいいと思います。
 例えば、フォームがBeanになっていて、そのbeanに値をセットすると、画面表示する。
 そして、画面でイベントが起きたときBeanから帰ってくるなんていうものが、用意されていれば、それを使えば、いいと思います。

 今回は、そういうものが無いケースを考えます。方法は3つ
(1)それでも、Strutsとかで、実現したいあなたへ
(2)そういう動きをする画面表示用のプログラム(ユーティリティ)をつくってしまう
(3)荒業で、サーバーのプログラムをクライアントに持ってくる




■■(1)それでも、Strutsとかで、実現したいあなたへ

cobolのプログラムのPROCEDURE DIVISIONで、以下のようになっていたとします

OPEN 画面1
PERFORM A-SET TRUE A-SET-RTN ここで、画面の値をセットしている
WRITE 画面1
READ 画面1
PERFORM A-GET TRUE A-GET-RTN ここで、画面の値をセットしている
CLOSE 画面1

OPEN 画面2
PERFORM B-SET TRUE B-SET-RTN ここで、画面の値を受け取るセットしている
WRITE 画面2
READ 画面2
PERFORM B-GET TRUE B-GET-RTN ここで、画面の値を受け取るセットしている
CLOSE 画面2

(JAVAで書くとこういうクラスです Gamenが、画面のクラス)

Gamen g1 = new Gamen();
g1.setter();
g1.write();
g1.read();
g1.getter(); // ここで、g1の値をどっかにセーブしたとする
g1.close();

Gamen g2 = new Gamen();
g2.setter(); // ここでg1の値をもとにg2の値をセットしたとする
g2.write();
g2.read();
g2.getter(); // ここで、g2の値をどっかにセーブしたとする
g2.close();


こんなとき、どうするか




こういうとき、COBOLでは、

   ・READの直前で、むりやりモジュールをきって、わける。

   そうすると、こうなる

    PERFORM BUBUN-A THRE BUBUN-A-RET
    PERFORM BUBUN-B THRE BUBUN-B-RET
    PERFORM BUBUN-C THRE BUBUN-C-RET
STOP RUN

BUBUN-A
OPEN 画面1
PERFORM A-SET TRUE A-SET-RTN ここで、画面の値をセットしている
WRITE 画面1
BUBUN-A-RET
EXIT

BUBUN-B
READ 画面1
PERFORM A-GET TRUE A-GET-RTN ここで、画面の値をセットしている
CLOSE 画面1

OPEN 画面2
PERFORM B-SET TRUE B-SET-RTN ここで、画面の値を受け取るセットしている
WRITE 画面2
BUBUN-B-RTN
EXIT

BUBUN-C
READ 画面2
PERFORM B-GET TRUE B-GET-RTN ここで、画面の値を受け取るセットしている
CLOSE 画面2
BUBUN-C-RTN
EXIT

・BUBUN-Aは、メニューからこのプログラムを呼び出すところのサーブレット
(Strutsなら、Actionクラス、*.doにあたる)になる。つまり、Strutsだと、

public class A extends Action
{
execute(なんとかかんとか)
{
BUBUN-AからBUBUN-A-RETのことをかいてね
}
}

・BUBUN-Bは、画面1で、ボタンを押されたところのサーブレット
public class B extends Action
{
execute(なんとかかんとか)
{
BUBUN-BからBUBUN-B-RETのことをかいてね
     ただし、 A-GET TRUE A-GET-RTNは、たぶんActionFormで
     吸収してると思うぞ
}
}

・BUBUN-Cは、画面2で、ボタンを押されたところのサーブレット
public class C extends Action
{
execute(なんとかかんとか)
{
BUBUN-CからBUBUN-C-RETのことをかいてね
}
}

となる。




 でも、これだと、データの受け渡しは、どーしてくれるんだ!となる。

 そこで、Data Divisionに入っているデータ全部を、セッションの中にいれ、

各クラスのexecuteで入ってすぐで、
    request.getSession();session.getAttribute();で値を取得、
各クラスのexecuteの抜けるところで、
    session.setAttribute();で値を設定する。

ちなみに、セッションの使い方は、ここに、まとめました




この話、長くなりすぎたので、別の記事にして続けます。

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