■17245 / ) |
Java webシステム間連携について |
□投稿者/ ま (15回)-(2008/04/20(Sun) 01:53:58)
|
分類:[.NET 全般]
●システムA(以下A) 某社が開発したかなり安定しているマルチセッション可能なフレームワーク上で動くWebシステム。 見たことも触ったことも無いが、フレームワークの仕様書を見る限りということ。 struts ベース。
●システムB(以下B) 自社開発のかなり不安定なマルチセッション不可能なフレームワーク上で動くWebシステム。 セッション無しでも画面を起動できる点が唯一のポイント。 struts ベース、但し劣化してます。
●システムC(以下C) 自社開発フレームワークで行こうとした矢先に、部長のなじみの会社に案件を吸い取られ、結果自社フレームワークを 土台にしつつも大幅にデチューンしたがシステムBのフレームワークよりも安定しているある意味劣化版フレームワーク 上で動く、マルチセッション不可能なWebシステム。 見習ったフレームワーク自体が悪いのでこれも劣化 struts ベースです。
BとCを現在メンテしているのですが、今度Aが「同一ドメインでなければ出来ない連携」をするためこちらの環境に移行 されようとしています。但し厄介?なことにAの中身を触ることは一切出来ません。
同一ドメインで Aのセッション中のとある画面から showModalDialog 経由で、Bの新規画面を開き、BのDB情報を元に ある計算を行った結果を、window.returnValue 経由で吸い取ろうという画面連携が実装される予定です。
同一ドメインならば、確かに showModalDialog だろうが、window.open だろうが、なんら関係なしにシステム間で連携でき ますが、この連携を思いついた方々は静的HTML でのテスト確認しか行っていません。ですので、Aがまだこちらの環境に 移行されていないのですが、BとCを使って、CをAに見立ててBを呼び出す、ということを実際にやってみました。
Cのセッション中のとある画面にボタンを配置し、その画面から 静的HTML経由でBのサーブレットにポストする仕掛け でやってみました。なぜ静的HTMLを間に挟む必要があるかというと、showModalDialog はフォームのターゲットにはでき ないためです。
結果、Bをセッションを発行しないモードで起動するとBのJSPを ダイアログ内に表示し、そこで入力した値をCに戻す ことに成功しました。
これでめでたしめでたしかとおもいきや、処理後、Cの画面で適当に画面遷移操作を行うとCのセッションがどうも壊れている ように見える挙動が連発して発生し、画面が 404 になったり、1件も無いはずの検索結果が1件表示されたり、まことに怪しい 挙動が確認できました。モーダルダイアログを起動しない状態ではいじる前の普通に操作できる状態であったのでモーダルダイ アログの起動後になんらかの情報が壊れているのが原因と推測しています。
今時、showModalDialog で画面連携も無いですが、これと同じ境遇に会われた方、居ましたらどんな些細なことでも良いので その時の対処方法などあればお知らせ願います。
通常、こういうシステム連携というのはありえるのでしょうか?在り得る場合、双方のシステム間でどのようにしてセッションを 共有したりするのでしょうか?セッション・セッションって煩いですが、もしかしてセッションなんぞ関係無いとかそういう落ち ですか?
もしかして、window.open ならそんなこと有り得ないのでしょうか?showModalDialog は window.open の子画面とはちょっと趣 が異なるのではないか?と愚考しています。
試したことは、 Cのセッション中に、Bをセッション新規で開始 =>結果はNG。どこをいじってもエラー画面しか出てこない。 Cのセッション中に、Bをセッション継続で開始 =>元々のセッションが無いのだから継続しようが無いのでこれもNG。 Cのセッション中に、Bをセッション無しで開始 =>上記の通り。
テスト構成は、 ●Bに新規画面のサンプル画面をJSPで作成、サーブレットに初期化処理(静的HTMLからのポストパラメータを取得処理する)追加 ●Cのとある画面に showModalDialog を呼び出すJavaScriptを追加、Cのパス配下に、BのサーブレットにPOSTするための静的HTML を 新規作成して追加
showModalDialog の第二パラメータに渡す情報は、 C画面のFORM 要素全てを cloneNode(true) で作成し、コピーを配列にセットして渡しています。 ダイアログ中のフォームにはその配列のノード種別に関係なく、HIDDEN 要素を作ってそれをフォームに追加し、そのフォームを onload でBのサーブレットへサブミットしています。
cloneNode() でコピると一時的にIDやNAMEが重複することになるのですが、もしかしてこれが悪さしている原因でしょうか? でもコピったからといって、Cのフォームにそのコピーが存在する訳では無いし、ダイアログ閉じたタイミングですべてのノードは 削除していますし・・・・この確認(cloneNode 以外での実装)はまだ行っていませんのでなんとも言えません。
以上
|
|