2015年2月26日 dsthhub 『dataspiderインターナル...
Post on 21-Jul-2015
423 Views
Preview:
TRANSCRIPT
DataSpiderインターナル"プラガブルアーキテクチャ"で
広がる可能性
株式会社アプレッソ開発部 開発グループ
リーダー佐々木 健二
2015年2月26日 dstn HUB
自己紹介
• 佐々木健二
• 開発部に所属
• 趣味
– ランニング
• 毎年「Nippon IT チャリテイ駅伝」に出場
754チーム中11位
最近の業務
• サポート業務
• DataSpider保守開発
• DataSpider開発計画
• DataSpider SDK
• 営業支援、OEM開発支援
アジェンダ
• プラガブルアーキテクチャについて
• プラガブルアーキテクチャの利点
• 拡張クラスローダ
• プラグインの起動プロセス
• SDKとは?
• SDKの未来
プラガブルアーキテクチャについて
プラガブルアーキテクチャとは?
• プラガブルとは…
– プラグイン(=部品)が抜き差し可能なこと
つまり、プラガブルアーキテクチャとはプラグインが抜き差し可能になっているアーキテクチャのこと
DataSpiderServerにおけるプラグインとは?
• マネージャやアダプタのこと
– DataSpiderServerは、核となるカーネルと、数多くのプラグイン(マネージャ、アダプタなど)で構成されている
DataSpiderServerのアーキテクチャ図
Java VM
カーネル
Web
Co
nta
iner
Trigger
Manager
DataProcessing
Component Manager
FileSystem
Manager
HT
TP
Trig
ger
File
Trig
ger
Sch
ed
ule
Trig
ger
FT
PTrig
ger
CS
V
Excel
DBFS
LFS
ExtLFS
DataProcessing
Connection Manager
Ora
cle
DataSpiderServer
マネージャ
Web
User
Manager
Global
Resources
Adapters
Converters
FT
P
Users
Groups
アダプタ
カーネルとは?
• DataSpiderServerの中核部分
– マネージャの起動/停止、登録/削除を行っている
マネージャとは?
• DataSpiderServerの各種機能をサービスとして提供しているモジュール
– ファイルシステムマネージャ• DataSpiderファイルシステムへのアクセスを提供
– Webコンテナ• Webアクセスの機能を提供
– ユーザマネージャ• ユーザ、グループ管理の機能を提供
【例】
アダプタとは?
• 各種データソースに接続してデータの入出力を行うモジュール
– Excelアダプタ• Excelファイルのデータを読み書きする
– Oracleアダプタ• Oracleデータベースのデータを読み書きする
– Mailアダプタ• メールの送受信を行う
【例】
プラグインの起動プロセス
プラグインの構造
• プラグインは宣言部分と機能の実装に分離されている
宣言部分(プロパティファイル)
機能の実装(Java JAR)
プラグインのロードクラスや、種類、表示名、依存関係などを定義
フレームワークに従って、プラグインで提供する機能をJavaで実装
プラグインの起動プロセス
• DataSpiderServer起動時に、プラグインのロード、初期化、サービスの開始を行う
1. プラグインのクラスをロード
2. プラグインを初期化
3. プラグインのサービスを開始
プラグインのロード
02/23 19:16:40|INFO|ds.boot|DataSpider Serverを起動します。02/23 19:16:40|INFO|ds.boot|システムのロードを行います。システム名[DataSpider Server]
02/23 19:16:41|INFO|ds.boot|システムのロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュールのロードを行います。02/23 19:16:41|INFO|ds.boot|モジュール[Web Container]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Session Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[SystemModule Container]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[AccessLog Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Database Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[File Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[License Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Document Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Application Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Calendar Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Callback Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Command Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[Environment Manager]のロードに成功しました。02/23 19:16:41|INFO|ds.boot|モジュール[User Manager]のロードに成功しました。
プラグインの宣言部分の読み込み、クラスのロード、マネージャの設定値の初期化などを行う
server.log
02/23 19:16:42|INFO|ds.boot|モジュールの初期化を開始します。02/23 19:16:42|INFO|ds.boot|モジュール[Server]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Server]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Web Container]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Web Container]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Session Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Session Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[SystemModule Container]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[SystemModule Container]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[AccessLog Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[AccessLog Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[Database Manager]を初期化しています。02/23 19:16:42|INFO|ds.boot|モジュール[Database Manager]の初期化に成功しました。02/23 19:16:42|INFO|ds.boot|モジュール[File Manager]を初期化しています。02/23 19:16:42|WARN|ds.kernel.mgr.file|拡張ローカルファイルシステムは利用できません。単純ローカルファイルシステムとしてロードされます。02/23 19:16:42|WARN|ds.kernel.mgr.file|拡張ローカルファイルシステムは利用できません。単純ローカルファイルシステムとしてロードされます。
プラグインの初期化
各プラグインで実装されている初期化処理を呼び出す。
例えば、リポジトリDBの接続、ファイルシステムの初期化、アダプタのオペレーション、グローバルリソースの定義の読み込みなど。
アダプタの場合、ライセンスチェックやライブラリのチェックなどが行われる。
server.log
02/23 19:16:44|INFO|ds.boot|システムのサービスを開始しています。02/23 19:16:44|INFO|ds.boot|モジュール[Web Container]のサービスを開始しています。02/23 19:16:45|INFO|org.apache.catalina.startup.Embedded|Starting tomcat server
02/23 19:16:45|INFO|org.apache.catalina.core.StandardEngine|Starting Servlet Engine:
Apache Tomcat/6.0.36
02/23 19:16:47|INFO|org.apache.coyote.http11.Http11Protocol|Coyote HTTP/1.1をhttp-7700 で初期化します02/23 19:16:47|INFO|org.apache.coyote.http11.Http11Protocol|Coyote HTTP/1.1をhttp-7700 で起動します02/23 19:16:47|INFO|ds.boot|モジュール[Web Container]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[Session Manager]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Session Manager]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[SystemModule Container]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Trigger Manager]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Azure Service Bus Trigger]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Azure Service Bus Trigger]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[Database Trigger]のサービスを開始しています。02/23 19:16:47|INFO|ds.boot|モジュール[Database Trigger]のサービスを開始しました。02/23 19:16:47|INFO|ds.boot|モジュール[File Trigger]のサービスを開始しています。
プラグインのサービス開始
各プラグインで実装されているサービスを開始する。
例えば、Webコンテナの起動、トリガーの開始、コンポーネントプールの初期化など。
server.log
プラガブルアーキテクチャの利点
1. 拡張性
プラガブルアーキテクチャの利点
2. 保守性
拡張性
• DataSpider本体を変更することなく、プラグインを追加・削除することができる
– フレームワークに従ってプラグインを開発するだけで、機能を拡張することができる
–不要なプラグイン(アダプタ)は削除することも可能
保守性
• 他のプラグインに影響を及ぼすことなく、プラグインを追加・変更・削除することができる
– プラグインは個々に分離されているため、影響範囲は対象のプラグインだけに局所化できる
– プラグインごとにクラスローダを拡張しているため、異なるバージョンのライブラリを複数同時にロードすることができる
例えば、Oracleアダプタの場合、OracleのバージョンごとにJDBCドライバ(ライブラリ)を同時に使用するこができる
拡張クラスローダ
クラスローダとは?
• JavaのクラスをJVMのメモリにロードする役割を持つオブジェクト
– クラスローダは通常複数あり、それらはツリー構造になっている
– クラスの探索には、まず親のクラスローダに移譲し、そこで見つからなければ子自身で探索する
DataSpiderServerのクラスローダ
• DataSpiderServerには大きく3つのカテゴリのクラスローダがある
– システム共通のクラスローダ
– マネージャのクラスローダ
– アダプタのクラスローダ
クラスローダの役割
• システム共通のクラスローダ
– DataSpiderServer全体のコンポーネントから利用することが可能
• マネージャのクラスローダ
– マネージャ共通で利用するクラスローダ、各マネージャそれぞれが利用するクラスローダがある
• アダプタのクラスローダ
– アダプタ共通で利用するクラスローダ、各アダプタそれぞれが利用するクラスローダがある
ModuleClassLoader
クラスローダの関係
URLClassLoader
DataSpiderURLClassLoader
CommonClassLoader
SharedClassLoader
SharedClassLoader
server
system
common
kernel
share
modules
module
plugin
data_processing
share
modules
moduleModuleClassLoader
・・・
・・・
ModuleClassLoader
ModuleClassLoaderModuleClassLoaderModuleClassLoader
・・・
・・・
マネージャのクラスローダ
アダプタのクラスローダ
システム共通のクラスローダ
クラスローダ ディレクトリツリー
クラス探索の流れ(アダプタの場合)
ModuleClassLoader
URLClassLoader
DataSpiderURLClassLoader
CommonClassLoader
SharedClassLoader
SharedClassLoader
server
system
common
kernel
share
modules
module
plugin
data_processing
share
modules
moduleModuleClassLoader
・・・
・・・
ModuleClassLoader
ModuleClassLoaderModuleClassLoaderModuleClassLoader
・・・
・・・
マネージャのクラスローダ
アダプタのクラスローダ
システム共通のクラスローダ
クラスローダ ディレクトリツリー
1. システム共通のクラスローダでクラスを探索
2. アダプタ共通のクラスローダでクラスを探索
3 アダプタのクラスローダでクラスを探索
クラスローダを拡張する利点
• 実行するクラスが依存するクラスを選択的にロードできる
例えば、Oracleアダプタの場合、OracleのバージョンごとにJDBCドライバ(ライブラリ)を同時に使用するこができる
例えば、アダプタのクラスローダ場合、アダプタが必要とするアダプタフレームワークのクラスを選択してロードする
• 異なるバージョンのライブラリを複数同時にロードできる
クラスを共有するときの注意点
• ライブラリの競合に気をつける
– システム全体のクラスローダとアダプタのクラスローダの両方に、異なるバージョンの同じライブラリがある場合
server
system
common
plugin
data_processing
share
modules
module
commonlib_v1.jar
commonlib_v2.jar
URLClassLoader
DataSpiderURLClassLoader
CommonClassLoader
SharedClassLoader
ModuleClassLoader
アダプタのクラスローダ
システム共通のクラスローダ
(1)
A.classを探索
(2)
commonlib_v1.jarに含まれていたので、A.classをロード
(3)
アダプタにあるcommonlib_v2.jarに含まれるA.classはロードされない
SDKとは?
SDKとは
• アダプタを開発するための開発者キット
– プログラミング言語はJava
– APIドキュメント(Javadoc)
–開発ガイドドキュメント
– サンプルコード
– ビルドファイル
【主な提供物】
SDKの使いどころ
• 既存のJavaプログラムをDataSpiderから実行したい
• DataSpiderで対応していないデータソース、プロトコル、サービスに接続したい
• Mapperでは実現が難しい複雑なロジックを実装したい
SDKの未来
SDKのロードマップ
4.0
4.14.2
• Java8対応• プログラム埋め込みMapperロジック
• トリガーSDK
• SDKテストフレームワーク• テンプレートコード自動生成
• Eclipseプラグイン• アダプタ開発用サーバ
まとめ
• DataSpiderServerは、拡張性、保守性に優れたプラガブルアーキテクチャを採用している
• クラスローダの拡張はプラガブルアーキテクチャを実現する上で重要な技術
• 標準アダプタで実現が難しい場合は、SDKで開発することが可能
• SDKの未来にご期待ください
ご清聴ありがとうございました。
top related