ライカ マイクロシステムズ(株)における Webベース業務システムの開発 Sep. 7, 1999 Takashi Tahara Agenda • • • • • • 会社概要 開発のきっかけ 新システムの概要 なぜ、その技術や製品を採用したのか Webベース システムの開発について まとめ 会社概要 • 欧米のトップメーカー(ライツ、ウイルド、ケ ンブリッジ等)の合併により設立された世界 的な企業グループ • 研究用顕微鏡をはじめ最先端技術をライ カ ブランドとして全世界に供給 • 販売サービス・ネットワークは、欧米・日本 をはじめ100カ国以上をカバー 開発のきっかけ 業務フロー ロジスティクス業務 営業業務 顧客/代理店 サービス依頼 見積依頼 引合 貸出依頼 発注 商品受取 案件入力 営業活動の 状況の入力 営業 (サービス含む) サービス受付 見積 サービス状況登録 保守部品発注依頼 案件情報を基 に見積書作成 デモ機貸出 在庫照会 貸出申請 受注受付 見積内容確定 リリース ロジスティクス BU 仕入先 倉庫 発注 在庫管理 出荷指示 受注情報を基に 国内外仕入先へ発注 入庫管理 返品管理等 受注情報を基に 出荷指示書作成 出荷 入庫 出荷 入庫結果の 入力 出荷状況の 照会・入力 現状の問題点 • • • • 手作業とAS400の混在 データが一元管理されていない アーキテクチャの陳腐化 Y2K 新システムの開発を決定 • 問題点を解決するためにアーキテクチ ャの試験を行った後、新システムの開 発を決定 • しかし、多くのSIベンダーがDelphi + DCOMでの開発に難色を示した • 有限会社フュージョンが参加すること で、新システムの開発がスタートでき た 新システムの概要 システムの目標 • • • • • データの一元管理 営業プロセスとモノの流れを把握 一元管理されたデータを戦略に利用 外回り営業のノートパソコンからの操作 TCOの削減 システム構成 HTTP DCOM Client (社内) Net8 Windows98/NT Internet Explorer HTTP DCOM ※RAS経由 Note PC (営業) Windows98/NT Internet Explorer Application Server Web Server WindowsNT4.0EE IIS4.0 COM Object BDE, Net8 Database Server WindowsNT4.0EE Oracle8.05 なぜ、その技術や製品 を採用したのか 新システムで採用した技術と製品 • • • • • 3層C/S Webベース InternetExplorer + ActiveXコントロール DCOM Delphi 3層C/S • 2層C/Sの問題点 – FATクライアント – ビジネスロジックが共有できない – スケーラビリティに欠ける • 3層C/Sのメリット – Thinクライアント – ビジネスロジックを共有できる – スケーラビリティがある 2層C/S: SQL文 (Network) Client UI BL Database Server DBMW ×クライアント台数の増 加により飽和しやすい ×FATクライアント ×BLが共有できない 3層C/S: ○SQLに比べ頻度が 低いためトラフィック が低い メソッド呼び出し (Network) Client UI ○Thinクライアント SQL文 (Network) Application Server BL DBMW ○BLを共有できる ○スケーラビリティがある Database Server Webベース • 2層C/Sの問題点 – 動作するために様々なソフトウェアが必要 – ソフトウェアの配布に手間がかかる • Webベースのメリット – Webブラウザがあれば動作する – ソフトウェアの配布が簡単 2層C/S: Client UI BL ×動作に必要なソフトウェアが多い ×ソフトウェアの配布に手間が掛かる DBMW Webベース: ○配布が簡単 UI ダウンロード Web Server Client IE メソッド呼び出し ○Webブラウザだけでよい ○ビジネスロジックなどは 配布する必要がない Application Server DBMW BL Internet Explorer + ActiveXコントロール • HTMLの問題点 – UIの操作性が悪い – フォーム送受信によるパフォーマンスの低下 – 生産性があまりよくない • Internet Explorer+ActiveXコントロール – Windowsアプリケーション同様の操作性 – 必要なデータのみを送受信できるためパフォ ーマンスが良い – 使いなれた開発ツールを利用できる HTML: ダウンロード,データの送信 (HTTP) Client ×データ送受信のパフォー マンスが悪い Web Server Browser HTML ×生産性が悪い ×操作性が悪い ○プラットフォームに依存しない Internet Explorer + ActiveXコントロー ル: ダウンロード(HTTP) Web Server Client IE ActiveX データの送信(DCOM) ○パフォーマンスが良い ○操作性が良い ×プラットフォームに依存する ○生産性が良い Application Server DCOM • ソケット通信, VisiBroker, MIDAS – ソケット通信: スレッド管理やマーシャリングな どの部分に多くの実装が必要 – VisiBroker: 現状では、Delphiとの親和性に 疑問がある – MIDAS: ビジネスロジックを実装しにくい • DCOMのメリット – ビジネスロジックを実装するだけで良い • スレッドの管理やマーシャリングなどインフラ部分 はDCOMに実装されている Delphi • 開発したプログラムの「抜群の安定性」 • コンポーネントによる「抜群の生産性」 • コンポーネントのソースがあるため、不具 合の原因を完全に追求できる • ランタイムの配布が不要 • DCOMとDelphiを理解している開発者が いた – もしいなければ、Delphiを採用しなかった 採用した技術および製品のまとめ • 3層C/SとWebベースのいいとこどり – Thinクライアント – スケーラビリティ – UIの操作性が良い • プログラムの抜群の安定性 – Delphiで開発したプログラムの抜群の安定性 • プログラムの抜群の生産性 – C/Sで使いなれたDelphiを利用できる – コンポーネント 3層C/SとWebベースのいいとこどり: 3層C/Sの 長所 Webの長所 Delphiの長 所 Client Web Server Application Server Thinクライアント ビジネスロジックの共有 操作性が良い スケーラビリティ Thinクライアント ソフトウェアの配布が簡単 抜群の安定性 抜群の生産性 Database Server Webベース システムの 開発について プログラムの構成 Client Web Server Application Server Internet Explorer ActiveForm ユーザーインタ ーフェースを表 示 ダウンロード (HTTP) メソッドの呼び出し (DCOM) Database Server IIS 4.0 Oracle 8.05 COMオブジェクト SQL文 BDE, Net8 SQL文 (Net8) 2層C/Sと3層C/Sでの開発の相違点 • クライアントとサーバーの処理の振り分け – 2層C/S:ほとんどクライアントに実装 • サーバーをCOMオブジェクトとして実装 • クライアントをActiveXコントロールとして実装 – 2層C/S:Windowsアプリケーション • クライアントとサーバーをDCOMで接続 – 2層C/S:BDEとDBミドルウェア 2層C/S: Database Server Client Windowsアプリケーション メソッド呼び出し UI BL DBMW Database SQL文 3層C/S: Application Server Client COM オブジェクト ActiveXコントロール UI 凡例 Database Server メソッド呼び出し (DCOM) 2層C/Sと異なる部分 BL DBMW SQL文 Database クライアントとサーバーの処理の振り分け • サーバー – ビジネスロジック – データベースに関連する処理 • クライアント – UIに関連する処理 – 日付の形式などUIに関連するチェックはクライアントに実装する • サーバーとクライアント間のI/Oを決める – オブジェクト、メソッド、パラメータ – メソッドの呼び出し回数を極力少なくする – どちらでエラーチェックをするかなど一貫したルールを決めること COM(Component Object Model)とは? • 米マイクロソフト社が策定したオブジェクト 間通信規約 • DCOMとは、COMをネットワーク経由で呼 び出せるように拡張したもの • COM規約に従って実装することで、通信 部分を意識する必要がなくなる – ビジネスロジックだけを実装すればよい COMオブジェクトの実装(1) • TRemoteDataModuleコンポーネント – COMオブジェクトを表すデータモジュール – ここにビジネスロジックを実装する • Single Instance or Multiple Instance – 別プロセスへの分割が必須でなければMultiple Instance • アパートメントスレッドモデル or フリースレッドモデル – 複数並列実行が必須でなければアパートメントスレッ ドモデル • アパートメントスレッドモデル + Multiple Instanceで作 成するのが一般的 TRemoteDataModuleの作成: Single Instance or Multiple Instance アパートメントスレッドモデル or フリースレッドモデル TRemoteDataModuleにビジネスロジックを実装: クラスおよびメソッドを宣言 ビジネスロジックを実装 アパートメントスレッドモデルとフリースレッドモデル: アパートメントスレッドモデル: 1アパートメントに1スレッド STA (Single Thread Apartment) スレッド COM Object COM Object COM Object STA (Single Thread Apartment) スレッド COM Object COM Object COM Object フリースレッドモデル: アパートメントに複数のスレッド MTA (Multi Thread Apartment) スレッド スレッド スレッド COM Object COM Object COM Object COM Object COM Object Single Instance と Multiple Instance: Single Instance: COMクライアント毎にプロセスを作成 Multiple Instance: 1プロセスに複数のCOMオブジェクト COM Server Process COM Server Process COMクライアント COMクライアント COM Object COMクライアント COM Object COM Server Process COMクライアント COM Object COMクライアント COM Object COM Object COM Server Process COMクライアント COM Object COMオブジェクトの実装(2) • DBアクセスの注意点 – フリースレッドモデルでのマルチスレッド アク セス • スレッドごとにBDEセッションが必要 – TRemoteDataModuleにTSessionとTDatabaseを配 置し、TSession.AutoSessionName:=Trueに設定 – SQL文を明示的に発行する • BDEやコンポーネントの挙動に悩まされないよう にするため • ※2層C/Sでも同じ DCOMでの接続 • TDCOMConnectionとTSimpleObjectBroker で接続 • 配布を単純にするためにレイトバインディングを 採用 – プロキシ/スタブDLL、タイプライブラリを配布・登録し ないで済む – この方法のデメリット • パラメータの型はOLEオートメーション互換型に制限される • COMオブジェクトの指定は、ProgIDではなく、 CLSID(GUID)でしか指定できない • TDCOMConnectionをローカルレジストリを参照しないよう に修正する必要がある Application Server Client サーバー名の取得 DCOMで接続 COM Object サーバー名の取得 DCOMで接続 COM Object TSimpleObjectBroker: サーバー名の一元管理 TDCOMConnection: COMオブジェクトへの接続 ServerGUIDプロパティでCLSIDを指定 アーリーバインディングでは、クライアントにCOMサーバー情報の 配布・登録が必要: アーリーバインディング レイトバインディング Client Client UI(ActiveX) UI(ActiveX) COMサーバーの タイプライブラリ COMサーバーの プロキシ/スタブDLL 汎用レコードクラス • クライアント/サーバー間でのレコードセット の受渡しに利用 • 各プログラムで個別に構造体やクラスを定 義する必要がなくなる • 汎用レコードクラスのマーシャリング – OLEオートメーション互換型パラメータに渡す ために、バイト配列のバリアントにマーシャリ ングが必要 – TComponentクラスの機能を利用 Application Server Client ClientDataSet 格納 など 汎用レコード オブジェクト ClientDataSet 格納 など 汎用レコード オブジェクト アンパック バリアント型 パック パック 汎用レコード オブジェクト 汎用レコード バリアント型 アンパック オブジェクト 格納 更新 結果セット Database レイトバインディングのため バリアント型への マーシャリングが必要 {--------------------------------------コンポーネントをバリアント型にパックする ---------------------------------------} function ComponentToVariant( Instance: TComponent ): OleVariant; var Stream: TMemoryStream; P: Pointer; begin Result := Unassigned; Stream := TMemoryStream.Create; try Stream.WriteComponent( Instance ); Stream.Position := 0; Result := VarArrayCreate( [0,Stream.Size], varByte ); P := VarArrayLock(Result); try Stream.Read( P^, Stream.Size ); finally VarArrayUnlock(Result); end; finally Stream.Free; end; end; {--------------------------------------バリアント型からコンポーネントにアンパックする ---------------------------------------} function VariantToComponent( AValue: OleVariant ): TComponent; var Stream: TMemoryStream; P: Pointer; begin Stream := TMemoryStream.Create; try Stream.Size := VarArrayHighBound(AValue, 1); P := VarArrayLock(AValue); try Stream.Write(P^, Stream.Size); finally VarArrayUnlock(AValue); end; Stream.Position := 0; Result := Stream.ReadComponent( nil ); finally Stream.Free; end; end; COMオブジェクト ラッパー • COMオブジェクトをカプセル化 – 接続先情報(マシン名、CLSID) – 汎用レコードクラスのマーシャリングを隠蔽 • 普通のクラスと同様に利用できる – COMオブジェクト ラッパー利用者は、COMオ ブジェクトを意識する必要が無い • データキャッシングやモバイルの不安定な 通信回線への対処にも応用できる Application Server Client COMオブジェクト ラッパー プログラム メソッド 呼び出し COMオブジェクト への接続情報 DCOM COMオブジェクト レコードオブジェクト のマーシャリング COMオブジェクトの面倒な部分をカプセル化 普通のObject Pascalのクラスと同様に扱える クライアントデータセットの利用 • サーバーから受け取ったデータの保存先 として利用 • ActiveForm上のDBGridへの表示・編集 などに利用 データコントロール コンポーネント 表示 編集 ClientDataSet 格納 汎用レコード オブジェクト ActiveFormへのUIの実装 • C/Sと同じテクニックが利用できる • 複数のフォームを切り替える方法 – ActiveFormを親コントロールに指定する • 顧客一覧検索など共通に使用する画面は DLLに実装して共有することも可能 – .infでDLLの転送先を指定すること • 例:destdir=11 # system32に転送 • ActiveForm間の呼び出しは難しい – ActiveXコントロールの切り分けに注意が必要 DCOMの注意点 • オブジェクトの実体を渡すことができない – リスト オブジェクトなどの内容は配列や構造体にしな いと渡せない – 独自の例外クラスが定義できないため、例外で伝播 できる情報が少なすぎる • マーシャリングコードが静的リンクできない – レイトバインディングにするか、プロキシ/スタブDLLや タイプライブラリの配布・登録が必要 • セキュリティーが難解 • VisiBrokerに比べ見劣りする まとめ まとめ • 3層C/S + Webベースにすることで、2層 C/Sのさまざまな問題点を解決できる • 各技術や製品のメリット/デメリットを見極 めてから採用すること – 技術に振り回されないように注意 • Delphi – 様々な技術を簡単かつ制限なく利用できる – 開発したプログラムの抜群の安定性 – コンポーネントによる抜群の生産性 ライカ マイクロシステムズ(株)における Webベース業務システムの開発 Sep. 7, 1999 Takashi Tahara
© Copyright 2024 ExpyDoc