3回生レクチャ

講義日程予定
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
第 1 回 「ガイダンス」
第 2 回 「ユビキタスシティ検討ワーキング中間とりまとめ」
第 3 回 「次世代ネットワーク技術:情報家電」
第 4 回 「次世代ネットワーク技術:ホームネットワーク」
第 5 回 「次世代ネットワーク技術:インターネット技術」
第 6 回 「次世代ネットワーク技術:次世代インターネット技術」
第 7 回 「次世代ネットワーク技術: アドホックネットワーク」
第 8 回 「次世代ネットワーク技術: P2Pネットワーク」
第 9 回 「センシング技術:センサネットワーク」
第10回 「富士通のユビキタス事業紹介」
第11回 「センシング技術:RFIDと測位技術」
第12回 「サービスアーキテクチャ:基盤ソフトウェア技術」
第13回 「内田洋行のユビキタス事業紹介」
第14回 「サービスアーキテクチャ:プライバシとセキュリティ」
第15回 「期末定期試験」
期末試験用課題 1
• 家庭内でまだネットワークにつながっていな
い家電に適切なホームネットワークを適用し
た情報家電を各自考案し800字程度で以下
について述べよ.
– それを用いた機能,利用例について以下を明確
にして述べよ
• なぜそのような情報家電を考案したのか
• ネットワーク接続手法をどう選択したのか
– 供給した企業の販売後の戦略について考察せよ
• 普及後に展開できるサービスは何か
• 他のネットワーク機器との連携は
• 保守,アップデートは
期末試験用課題 2
• 次世代ネットワーク技術として,IPv6,P2P
ネットワーク,アドホックネットワーク,センサ
ネットワークの中から一つ選択して800字程度
で,
– その技術について説明し,
– 応用例を述べよ.
– またその技術を企業がビジネス化する可能性に
ついて述べよ.
期末試験用課題3
• 測位システムの利用には,測位精度,設備の
容易さ(イニシャルとランニングコスト,設定の
手間など),プライバシー確保の容易さ,といっ
た導入基準がある.Cambridge大学の
ActiveBatシステムとGPSを上記の項目に照ら
して比較し,利害得失を800字程度で論じなさ
い.
期末試験用課題4
• Java言語にはRMIという遠隔メソッド呼出し
の機構があるが,
– この機構について400字程度で説明し,
– それを用いたサービスアーキテクチャを実例をあ
げて400字程度で説明しなさい.
2006年度前期
情報システム構成論2
第12回 「サービスアーキテクチャ」
西尾 信彦
[email protected]
立命館大学 情報理工学部
分散システム構成法
• 分散システムとは何か?
– 例えば,サーバとクライアントによる通信
– プロセスの壁を越える
• 仮想メモリ管理を越える
– ホストの壁を越える
• ネットワークを利用
• 分散システムをどう構築するか?
– OSとライブラリでネットワーク利用
• ソケットプログラミング
• プログラミング言語がネットワークを隠す
– RPC: Remote Procedure Call
– プログラマにとっては関数呼び出し
– 呼び出された関数は別ホストで稼動
RPC: 遠隔手続き呼出し
• Sun MicrosystemsのSunRPCが有名
• UNIXにおける初期のかな漢字変換システム
であるJserverなどがRPCによって実装され
ていた.
– かなの文字列を引数にかな漢字変換用の関数
(RPC)を呼出すと漢字変換されて戻ってくる
RPC: 遠隔手続き呼出し
• RPC呼び出し側
– 引数を用意して関数呼び出し
– 呼出し先と引数をまとめてリモートホストに送る
– 返信を待つ
– 返信を受けて,返り値を取り出し,スタックに戻す
– 呼出しもとにリターン
RPC: 遠隔手続き呼出し
• RPC呼出され側
– ネットワーク越しの要求を待つ
– 届いた要求パケットから呼出され先を特定
– 引数をスタックに取り出し,コール
– RPC本体が動いて,返り値がスタックにつまれる
– 返り値をまとめて,呼出し側に送信
– また要求待ちに戻る
RPC: 遠隔手続き呼出し
• プログラマの手間
– クラアント,サーバ双方に余計なインタフェース部
分が必要
– これらをスタブ(切り株)と呼ぶ
– スタブを手で書いたら楽にならない
– スタブ自動生成のためのスタブジェネレータがあ
る
– スタブジェネレータに渡すRPCの仕様を記述する
インタフェース記述言語IDLが必要
– 適切なスタブを静的もしくは動的にリンク
• 動的にやるなら相手先を見つけるサーバが必要
RMI: 遠隔メソッド呼出し
• オブジェクト指向プログラミング言語における
RPCのこと
• 別プロセスに位置するオブジェクトのメソッド
を呼出す
• リモートオブジェクト,値呼出し/参照呼出し
• JavaではJavaRMIというクラスが実装されて
いる.
なぜ皆がJavaを使うのか?
• 新しいプログラミング言語である
• 成長中の言語である
• いま重要な要素が入っている
– オブジェクト指向
– アーキテクチャ中立
– セキュリティ
– ネットワーク
• 開発環境が近代的に充実している
– Eclipse…
– UML関連
Java Remote Method Invocation
•
•
•
•
•
•
•
•
•
•
Object-oriented
Mobile behavior
Design Patterns
Safe and Secure
Easy to Write/Easy to Use
Connects to Existing/Legacy Systems
Write Once, Run Anywhere
Distributed Garbage Collection
Parallel Computing
The Java Distributed Computing Solution
Stub and Skeleton
Client Object
Method Invocation
with arguments
Return Value
Stub
Server/Remote Object
Method Invocation
with arguments
Return Value
Skeleton
Designing Interface
RemoteDictionary.java:
import java.rmi.*;
public interface RemoteDictionary extends Remote {
Object answer( Object key ) throws RemoteException;
Object[] keys() throws RemoteException;
}
Implement Remote Object
RemoteDictionaryImpl.java:
public Object answer( Object key ) throws RemoteException {
import java.util.*;
import java.rmi.*;
import java.rmi.server.*;
public class RemoteDictionaryImpl
extends UnicastRemoteObject
implements RemoteDictionary {
private Hashtable dictionary;
return dictionary.get( key.toString() );
}
public Object[] keys() throws RemoteException {
Enumeration enum = dictionary.keys();
Vector vector = new Vector();
while( enum.hasMoreElements() )
vector.addElement( enum.nextElement() );
Object[] keys = new Object[ vector.size() ];
for( int i=0; i<vector.size(); i++ )
keys[i] = vector.elementAt(i);
public RemoteDictionaryImpl() throws RemoteException {
super();
dictionary = new Hashtable();
dictionary.put( "nishio",
"Nobuhiko Nishio\nAssociate Professor\nUbiquitous
Computing" );
return keys;
dictionary.put( "mouri",
}
"Koichi Mouri\nAsistant Professor\nContext-Aware
}
Software" );
dictionary.put( "okubo",
"Eiji Okubo\nProfessor\nOperating System" );
}
Building Server
DictionaryServer.java:
import java.rmi.*;
public class DictionaryServer {
public static void main( String argv[] ) {
System.setSecurityManager( new RMISecurityManager() );
try {
RemoteDictionaryImpl object = new RemoteDictionaryImpl();
Naming.rebind( "rmi:///RemoteDictionaryServer", object );
System.out.println( "Remote Dictionary Service Starts." );
} catch( Exception e ) {
System.err.println( "Error:" + e.getMessage() );
System.exit(-1);
}
}
}
Rebind and Look up
Client Object
Obtains Remote
Reference
Look up reference
Lookup()
Server/Remote Object
Rebind
Registry
Building Client
SingleLineClient.java:
import java.rmi.*;
public class SingleLineClient {
public static void main( String argv[] ) {
try {
RemoteDictionary dictionary
= (RemoteDictionary)Naming.lookup( "rmi://"
+ argv[0] + "/" + "RemoteDictionaryServer" );
Object value = dictionary.answer( argv[1] );
if( value != null )
System.out.println( value.toString() );
}
catch( Exception e ) {
System.err.println( "Error:" + e.getMessage() );
System.exit(-1);
}
}
}
Procedure for Execution
•
•
•
•
•
•
Compile Java sources
Compile RMI-related files
Prepare Security Policy
Launch RMI Registry Program
Launch Server Program
Execute Client Program
Policy:
grant {
permission java.security.AllPermission;
};
Jini
• JavaRMIをベースとしたサービスアーキテク
チャの一つ
• Sun Microsystemsが開発
• クライアントオブジェクトがルックアップサーバ
を経由して,リモート(サーバ)オブジェクトのプ
ロクシーを獲得し,それ経由でサービスを受
ける.
Jini Characters
Jini Overview
1. Discovery
3. Lookup
2. Join
4. Service Invocation
Lookup Service: registrar
Client Lookup
Proxy
Proxy vs Service:サイズの問題
• Thin proxy and fat service.
– RMI implementation
• Fat proxy and non service
• Half and half approach
– Other implementations than RMI
リモートサービスの課題
• どのようにサービスを発見するか
– ディスカバリ機構
– AppleのBonjourなど
• そのサービスが何をするのか
– サービス記述
• メソッド呼出しにおけるセマンティクス
– 値呼出しか参照呼出しか
– 参照呼出しをいかに実現するか
• 最初のスタブをいかに入手するか
– 新たに参加したサービスのインタフェースをどう知るか?
セキュリティの確保
• 適切な人が適切なサービスを実行する
• 利用時のユーザのログイン認証
– パスワード,RFID(ICOCA),バイオメトリクス
• ケイバビリティの生成
– 偽造できない許可証
• One-timeパスワードつき
• Man-in-the-middle攻撃対策
– 有効期限つき
• 通信路の暗号化
– IPSecやVPN
• どこまでやるのかも問題
– やりすぎたら使いものにならない
異種サービス間連携の問題
• 世の中には多くのサービスアーキテクチャが
– Jini,UPnP,DLNA,SOAP
• 通信路も多種多様
– Bluetooth,PLC,携帯電話公衆回線,WiFi
– WiMAX,UWB,3.5G/4G
• 個人認証も多様
– 次世代型RFID,生体認証
– ではあるが,統一されるのはもっと恐しい
異種サービス間連携の問題(続き)
• サービスアーキテクチャでの解決
– サービスのXMLを利用した記述
• オブジェクトの直列化(object serialization)
• RPC/RMI自体をXMLで記述する
– セマンティックウェブ技術の発達
• WSDL,RDF,OWL/Sなどによるグラウンディング
• 通信路での解決
– 各種ゲートウェイの開発
– 仕様の拡大化