「DataSnapユースケース研究」 多層技術の概要と最適化、実践テクニック

Similar documents
c5

28th Embarcadero Developer Camp

20th Embarcadero Developer Camp

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

25th Developer Camp

知って得する!現役ヘルプデスクが答えるDelphiテクニカルエッセンス 8.0

「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

Delphi 10.2 Tokyoで実現する 広範な接続性 - APIで変わる情報システム

21st Embarcadero Developer Camp T9

10th Developer Camp - B5

- 2 Copyright (C) All Rights Reserved.

Windows開発者のためのFireMonkeyモバイル開発入門

Delphi/400開発ノウハウお教えします 情報を守ろう!安全性を高めたWebシステムの構築

17th Embarcadero Developer Camp

Microsoft PowerPoint - はじめてのDataSnapアプリケーション_

基幹システムとの連携手法をご紹介 -インターネットEDIとの連携-

14th Developer Camp

Delphi XE 機能評価ガイド

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

新バージョンDelphi/400 XE7ご紹介 - マルチデバイスデザイナ機能で開発効率アップ! -

Delphi/400 XE5 -こんなに簡単!IBM iスマートデバイスネイティブ開発-

マルチデバイスに対応した IBMi業務システム開発のポイント

LightSwitch で申請システム Windows ストアアプリで受付システムを構築してみた 情報政策グループ技術職員金森浩治 1. はじめに総合情報基盤センターでは 仮想サーバホスティングサービスや ソフトウェアライセンス貸与といった さまざまなエンドユーザ向けサービスを行っている 上記のよう

「Delphiのマイグレーションを行うのであれば、これだけは知っておこう!」

24th Embarcadero Developer Camp

SQL Server データベース接続設定 マニュアル

Delphi/400 テクニック公開 Delphi/400開発 ~ パフォーマンス向上テクニック ~

ZJTM ADSelfService Plus をインターネットで 安全に利用するためのガイド 1

本セミナーの目的 Firebird の利点を最も有効に利用できる開 発環境は Delphi です 理由その 1 ミドルウェアの充実 理由その 2 データベース対応機能の充実 理由その 3 国内 海外での豊富な実績の蓄積

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

25th Developer Camp

データベースアプリケーション構築技法 Delphi、C++Builderによるメンテナンス性を考慮した開発

ステップアップ! モバイルアプリケーション開発

初心者にもできるアメブロカスタマイズ新2016.pages

~ アドレス収集くん ~ セキュリティ対策御説明資料

既存のDelphi/C++Builderアプリケーションの移行方針

Android Layout SDK プログラミング マニュアル

チャレンジ!dbExpress接続

Copyright All Rights Reserved. -2 -!

技術レポート 1)QuiX 端末認証と HP IceWall SSO の連携 2)QuiX 端末認証と XenApp の連携 3)QuiX 端末認証 RADIUS オプションと APRESIA の連携 Ver 1.1 Copyright (C) 2012 Base Technology, Inc.

モバイル統合アプリケーション 障害切り分け手順書

データアダプタ概要

ミガロ.製品 最新情報

DocuWorks Mobile 障害切り分け手順書

Microsoft Word - 最終版 バックせどりismマニュアル .docx

PowerPoint プレゼンテーション

25th Developer Camp

なぜIDSIPSは必要なのか?(v1.1).ppt

home-unit2_quickguide_ras_v1.1

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

WTM2019SingleSignOn

PowerPoint プレゼンテーション

FW ファイルアップロード ダウンロード機能利用ガイド Version 年 9 月 21 日富士通株式会社 i All Right Reserved, Copyright FUJITSU LIMITED

ロイロノートスクールクラウド版表 クラウド サービス利 弊社が 意しているクラウドサービスへ接続し利 するシンプルなプランです サービスだけで利 することができます プラン 保存可能な容量 / ユーザー 額の場合 / ユーザー 年額の場合 / ユーザー 共 タブレット向け 1 0.8GB 40 円

SpringSecurity

rcp-add-01:アーキテクチャ設計書

1. 2. SRT QAC/TM 4. QAC/TM 5. QAC/TM 6. QAC/TM ( ) 7. [APPENDIX 1] [APPENDIX 2] QAC/TM Classification 2

Delphi/400開発ノウハウお教えします Googleマップ連携によるリッチなGUIアプリ開発

WEB進捗状況管理システムによるリアルタイム性の実現

Delphi / C++Builder / RAD Studio 新バージョンの概要 第 36 回エンバカデロ デベロッパーキャンプ エンバカデロ テクノロジーズセールスコンサルタント 井之上和弘 筑木真志 本文書の一部または全部の転載を禁止します 本文書の著作権は 著作者に帰属します

6 接続の使用準備ができました 画面が表示されます 閉じる をクリックします 認証に事前共有キーを使う の キー に リモートアクセス接続用シークレットキー を入力後 OK をクリックします 今すぐ接続します はクリックしません. アダプターの設定 (Window 7) コントロールパネル - ネッ

3. クラスリンク ( 先生の IP アドレス >:< ポート >) を生徒と共有して生徒がブラウザーから接続できるようにします デフォルトのポート番号は 90 ですが これは [Vision 設定 ] から変更できます Netop Vision Student アプリケーションを使

LAPLINK ヘルプデスク 導入ガイド

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

BizBrowser SmartDevice Android開発用スタートアップガイド

Windows Server2003環境向け Deep Security 推奨ポリシーの考え方 と適用イメージ

untitled

CodeGear Developer Camp

Transcription:

B4 Delphi/C++ テクニカルセッション DataSnap ユースケース研究 多層技術の概要と最適化 実践テクニック エンバカデロ テクノロジーズエヴァンジェリスト高橋智宏

アジェンダ DataSnap の基礎 プロトコル サーバーメソッド 現実的な構成例 DMZ + ロードバランス ライフサイクル DB 接続のレイヤ 親クラス FireDAC デモ マルチデバイス対応 Tips HTTPS を利用するには? バイナリデータの送受信 サーバーメソッドの非同期呼び出しは? 2

1 DataSnap の基礎 3

2 層の C/S GUI, 業務ロジック SQL 文 etc DataSnap とは? GUI アプリ アクセスDB ドライバ RDBMS 3 層構造 4 GUI DataSnap TCP/IP HTTP(s) DataSnap GUIアプリ DataSnapサーバ RDBMS プロトコル 業務ロジック SQL 文 etc アクセスDB ドライバ

検討事項 特にセキュリティ面と運用面 RDBMS の ユーザー名 と パスワード の管理 ネットワーク上 直接 RDBMS に接続出来てしまう dbexpress/dbgo/firedac などの DB コンポーネント コンポーネントのアップデート 全端末への再配布 RDBMS のネイティブクライアントライブラリ サポートされているプラットフォームは?? インストーラ モジュールのアップデート 全端末への再配布 ビジネスロジックや SQL 文がクライアント側に存在 アプリケーションのアップデート 全端末への再配布 ファイアウォール etc Copyright 2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します 5

DataSnap プロトコル TCP/IP デフォルト 211 番ポート SSL, IPv6 は未サポート HTTP デフォルト 80 番ポート HTTPS もサポート RPC 形式 サーバーメソッド 要は RDBMS のストアドプロシージャと同じ扱い!! パラメータ & 戻り値 in, var, out, return 組み込みの非同期呼び出しは無い インスタンスのライフサイクル Server, Session, Invocation Callback, Filter, Event データフォーマット JSON(JavaScript Object Notation) クライアントからのリクエストのサンプル {"method":"connect","params":"drivername":"datasnap", "port":"211","communicationprotocol":"tcp/ip","hostna me":"127.0.0.1","driverunit":"dbxdatasnap",...]} {"method":"execute","params":[{"fields":[- 1,false,"Dbx.MetaData","GetDatabase"]}]} {"method":"reader_close","params":[1,0]} {"method":"disconnect","params":[0]} サーバーからのレスポンスのサンプル {"result":[0,"datasnap",2]} {"result":[{"rows":[0]},{"data":[1,`]},{"table":[{"fi elds":[0,false,1,0,true]},{"columns":[13,["quotechar",26,0,0,0,16,0,0],["procedurequotechar",26,0,0,0,16,0,0],["maxcommands",6,0,0,0,0,0,0],["supportstransacti ons",4,0,0,0,0,0,0],["supportsnestedtransactions",4,0,0,0,0,0,0],["supportsrowsetsize",4,0,0,0,0,0,0]......... Copyright 2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します 6

サーバーメソッドとは? リモートプロシージャコール (RPC) http://ja.wikipedia.org/wiki/rpc サーバーメソッドの実装 & エクスポート 引数の型 戻り値 例外は? クライアント用プロキシは? Copyright 2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します 7

サーバーメソッドで扱える型 基本型 AnsiString Boolean Byte Currency TDateTime TDBXDate TDBXTime Double Int64 Integer LongInt OleVariant Single ShortInt SmallInt String(UnicodeString) WideString TStream DBXValue 型 TDBXAnsiStringValue TDBXAnsiCharsValue TDBXBcdValue TDBXBooleanValue TDBXDateValue TDBXDoubleValue TDBXUInt8Value TDBXInt8Value TDBXInt16Value TDBXInt32Value TDBXInt64Value TDBXJSonValue TDBXReaderValue TDBXSingleValue TDBXStringValue TDBXTimeStampValue TDBXTimeValue TDBXWideCharsValue TDBXWideStringValue TDBXStreamValue テーブル型 TDataSet JSON 型 TJSONArray 基本型 DBXValue 型 テーブル型 配列型 (array of ) TParams TDBXReader TJSONNumber TJSONObject TJSONString TJSONValue NULL サポート無し var や戻り値も OK NULL サポートあり var や戻り値は NG var や戻り値も OK サポートされません TJSONArrayを使う Copyright 2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します 8

2 現実的な構成例 9

システム構成例 複数の DataSnap サーバーをロードバランス GUI DataSnap HTTPS GUIアプリリバースプロキシ DataSnapサーバ RDBMS DataSnap プロトコル DMZ Apache Nginx ロードバランサ etc HTTP 業務ロジック SQL 文 etc TCP/IP FireDAC ドライバ 社内端末 DB 管理者等 10

ロードバランスすると サーバーメソッド用クラスのライフサイクルとの兼ね合い Session ( デフォルト ) クライアントアプリケーションからの接続とインスタンスが結びつく ステートフル ステート ( セッション情報 ) のリプリケーションは?? Invocation サーバーメソッドの呼び出しごとにインスタンスの生成 & 破棄を繰り返す ステートレス リクエストレスポンス クラスインスタンスクラスインスタンスクラスインスタンスクラスインスタンスクラスインスタンス 接続クエリー実行切断 ロードバランサクライアント DataSnapサーバ RDBMS 11

3 DB 接続のレイヤ 12

サーバーメソッドクラスの構造 親クラス TComponent, TDataModule, TDSServerModule データアクセス IBExpress dbexpress dbgo(ado) FireDAC etc 親クラスを TComponent で データモジュールをプーリング? コネクションプーリング 独自実装 FireDAC Copyright 2009 Embarcadero Technologies, Inc. All Rights Reserved. 本文書の一部または全部の転載を禁止します 13

DB アクセスモジュールの設計 FireDAC で使用する主なコンポーネント TFDConnection TFDTable / TFDQuery など TFDPhysIBDriverLink など TFDGUIxWaitCursor (ProviderプロパティはConsole) データモジュール データベースアクセスをカプセル化 サーバーメソッドの処理とデータベース処理を分離 サーバーメソッド群 データモジュール RDBMS 14 DataSnap クライアントアプリ DataSnap サーバープロセス

デモ - 複数デバイス対応 - 15

サーバー & クライアントの例 サーバー Delphi 64bit スタンドアロン TCP/IP + HTTP TComponent( 親 ) + データモジュール FireDAC クライアント Delphi VCL Delphi ios Delphi Android C++Builder OS X 16

Tips 17

HTTPS を利用するには? リバースプロキシで HTTPS を処理し HTTP の DataSnap にリダイレクトする http://blogs.embarcadero.com/teamj/2013/10/29/4096/ HTTPS HTTP GUI アプリ DataSnap DataSnap プロトコル リバースプロキシ DataSnap サーバ DataSnap 単体でも OpenSSL(Indy で利用 ) を使用した HTTPS 接続を受付可能 http://blogs.embarcadero.com/teamj/2013/10/30/4103/ Windows Server の IIS を利用する ISAPI(DLL) モードでDataSnapサーバーを実装 IIS 自体でHTTPSを処理する クライアントは プロトコルに https を指定するだけで OK

TStream を使う バイナリデータの送受信 高速 もちろん TJSONAarrayにByte 配列を入れる方法もOKですが Server 側 function TTestServer.Download( ): TStream; var memstream: TBytesStream; begin Result := nil; FileName := ; if FileExists(FileName) then begin memstream := TBytesStream.Create; memstream.loadfromfile(filename); Result := memstream; end; end; Client 側 procedure TForm1.BtnClick(Sender: TObject); var stream: TStream; b: Byte; mem: TBytesStream; begin stream := TestSV.Download('xyz.jpg'); mem := TBytesStream.Create; while stream.read(b, 1) = 1 do mem.write(b, 1); mem.free; end; 19

サーバーメソッドの非同期呼び出しは? VCL(Windows) 向けなら OmniThreadLibrary が便利 http://code.google.com/p/omnithreadlibrary/ 最新版は 3.03a で Delphi 2007 XE5 (32bit/64bit) をサポート VCL 以外 (FireMonkey, ios, Android) は TThread の派生クラスと Synchronize メソッドなどを組み合わせる 20