Microsoft PowerPoint - RMI.ppt

Similar documents
개요

rmi_박준용_final.PDF

Network Programming

Chap12

(Microsoft PowerPoint - Chapter17 RMI.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint os4.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt

제11장 프로세스와 쓰레드

Microsoft PowerPoint os5.ppt

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

슬라이드 1

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

JMF3_심빈구.PDF

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

Microsoft PowerPoint os5.ppt [호환 모드]

PowerPoint Presentation

6주차.key

PowerPoint Presentation

Microsoft PowerPoint - 03-TCP Programming.ppt

fundamentalOfCommandPattern_calmglow_pattern_jstorm_1.0_f…

PowerPoint 프레젠테이션

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Cluster management software

MasoJava4_Dongbin.PDF

gnu-lee-oop-kor-lec06-3-chap7

자바-11장N'1-502

Microsoft PowerPoint os3.ppt [호환 모드]

02 C h a p t e r Java

JAVA PROGRAMMING 실습 09. 예외처리

쉽게 풀어쓴 C 프로그래밍

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

FileMaker ODBC and JDBC Guide

12-file.key

비긴쿡-자바 00앞부속

1

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft PowerPoint - Lect04.pptx

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Design Issues

신림프로그래머_클린코드.key

PowerPoint Presentation

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

교육2 ? 그림

쉽게 풀어쓴 C 프로그래밊

Chap7.PDF

자바 프로그래밍

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

untitled

PowerPoint 프레젠테이션

PowerPoint Presentation

4장

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

07 자바의 다양한 클래스.key

FileMaker ODBC and JDBC Guide

Microsoft PowerPoint - Java7.pptx

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

PowerPoint 프레젠테이션

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

JMF2_심빈구.PDF

교육자료

FileMaker ODBC 및 JDBC 가이드

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Interstage5 SOAP서비스 설정 가이드

PowerPoint Presentation

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

05-class.key

Semantic Consistency in Information Exchange

PowerPoint Presentation

Java ~ Java program: main() class class» public static void main(string args[])» First.java (main class ) /* The first simple program */ public class

thesis

Microsoft PowerPoint - 2강

FileMaker 15 ODBC 및 JDBC 설명서

01-OOPConcepts(2).PDF

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

스레드의우선순위 우선순위설정메소드 : void setpriority(int newpriority) newpriority 에설정할수있는등급 : 1( 가장낮은우선순위 ) 부터 10( 가장높은우선순위 ) 가장높은우선순위 : MAX_PRIORITY, 보통우선순위 : NORM_

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

5장.key

PowerPoint 프레젠테이션

Spring Boot

JUNIT 실습및발표

ch09

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

JVM 메모리구조

PowerPoint Presentation

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

자바GUI실전프로그래밍2_장대원.PDF

Transcription:

( 분산통신실습 ) RMI RMI 익히기 1. 분산환경에서동작하는 message-passing을이용한 boundedbuffer 해법프로그램을실행해보세요. 소스코드 : ftp://211.119.245.153 -> os -> OSJavaSources -> ch15 -> rmi http://marvel el.incheon.ac.kr의 Information Unix RMI 참조 2. 또, 이예제가웹상에서수행될수있도록수정해보세요. 즉클라이언트프로그램에서이예제의 Producer와 Consumer의동작을모니터링하는 Java applet을작성해보는것입니다. AppletViewer 또는넷스케이프커뮤니케이터로실행 3. BONUS: Java synchronization을이용한 bounded-buffer 해법 ( 운영체제교재 Applied Operating System Concepts 7장 p209 참조 ) 이분산환경에서도동작할수있도록 RMI를이용하여수정해보세요. 실습방법 cseblade.incheon.ac.kr(211.119.245.68) 의 /mysung/2003osreport 디렉토리에자기학번디렉토리를만들고소스프로그램과실행파일을옮겨놓으세요. 1.1

RMI (Remote Method Invocation) RPC 의 Java 버전 저수준 (low-level) 소켓을이용하지않고원격객체의메소드를호출할수있는방법을제공하는객체지향언어인 Java 기반의분산컴퓨팅환경 ( 클라이언트 / 서버지원 ) 을위한미들웨어 (RPC와유사 ) 스레드 (thread) 가원격객체 (Remote Object) 의메소드 (method) 호출 다른 Java Virtual Machine 상에있는객체는 원격 객체 RPC 보다좋은점 객체지향적이다. 프로그램작성및사용이쉽다. 안전하고보안성이있다. 기존시스템과통합해서사용할수있다. 작성절차 원격인터페이스를정의한다. 원격인터페이스를구현 (implement) 하는원격객체 ( 서버 ) 를작성한다. 원격객체를이용하는프로그램 ( 클라이언트 ) 을작성한다. stub 와 skeleton 클래스를생성한다. rmiregistry 를실행시킨다. 서버와클라이언트를실행시킨다. 1.2

RMI (Remote Method Invocation) 1.3

RMI (Remote Method Invocation) RPC versus RMI RPC : Procedural Programming Style RMI : Object-Oriented Programming Style RPC 의매개변수 : Ordinary Data Structures RMI 의매개변수 : Objects Stubs and Skeletons Stub 클라이언트에상주하는원격객체의대리인 (proxy) 매개변수들을 Marshalls ( 메소드이름과인자들의꾸러미생성 ) 해서서버로보냄 Skeleton 서버에상주 매개변수를 Unmarshalls 해서서버에전달함 매개변수 Marshall 된매개변수가 Local (Non-Remote) Objects 이면객체를바이트스트림으로기록해주는객체순서화 (Object Serialization) 기법을이용해서복사에의해 (by Value) 전달 Marshall 된매개변수가 Remote Objects 이면참조에의해 (by Reference) 전달 : RMI 의장점 Remote objects java.rmi.remote 를확장한 Interface 로선언되어야함 extends java.rmi.remote 모든메소드는 java.rmi.remoteexception 을발생시켜야함 throws java.rmi.remoteexception 1.4

Marshalling Parameters 1.5

원격인터페이스구현 MessageQueueImpl.java MessageQueue.java javac server MessageQueueImpl.class MessageQueueImpl_skel.class rmic MessageQueueImpl_stub.class Factory.java Producer.java Consumer.java javac Factory.class client 1.6

구성 원격인터페이스 : MessageQueue.java 서버프로그램 : MessageQueueImpl.java 클라이언트프로그램 : Factory.java, Producer.java, Consumer.java Policy File : New with Java 2 grant { permission java.net.socketpermission "*:1024-65535","connect,accept"; ; 1.7

실행순서 1. 모든소스파일컴파일 $ javac MessageQueue.java MessageQueueImpl.java Factory.java Producer.java Consumer.java 2. rmic로 stub와 skeleton class 파일생성 $ rmic MessageQueueImpl 3. 레지스트리서비스시작 (rmiregistry) osagent 또는 rpcbind 디몬에해당 $ rmiregistry & (Unix) 또는 C: > start rmiregistry (Windows) 4. 원격서버객체의인스턴스생성 (JDK 1.2 이상버전에서는인증해주어야함 ) $ java -Djava.security.policy=java.policy MessageQueueImpl (JDK 1.2 이상 ) 또는 $ java MessgeQueueImpl (JDK 1.1) 5. 클라이언트에서원격객체실행시작 $ java -Djava.security.policy=java.policy Factory (JDK.2 이상 ) 또는 $ java Factory (JDK 1.1) 1.8

서버 : MessageQueue interface import java.util.*; import java.rmi.*; public interface MessageQueue extends java.rmi.remote { /* * This implements a non-blocking send */ public void send(object item) throws java.rmi.remoteexception; /* * This implements a non-blocking receive */ public Object receive() throws java.rmi.remoteexception; 1.9

서버 : MessageQueueImpl.java (1) import java.util.*; import java.rmi.*; public class MessageQueueImpl extends java.rmi.server.unicastremoteobject implements MessageQueue { public MessageQueueImpl() throws RemoteException { queue = new Vector(); // This implements a non-blocking send public synchronized void send(object item) throws RemoteException { queue.addelement(item); System.out.println("Producer entered " + item + " size = " + queue.size()); 1.10

서버 : MessageQueueImpl.java (2) // This implements a non-blocking receive public synchronized Object receive() throws RemoteException { Object item; if (queue.size() == 0) return null; else { item = queue.firstelement(); queue.removeelementat(0); System.out.println("Consumer removed " + item + " size = " + queue.size()); return item; 1.11

서버 : MessageQueueImpl.java (3) public static void main(string args[]) { System.setSecurityManager(new RMISecurityManager()); try { MessageQueue server = new MessageQueueImpl(); Naming.rebind("//127.0.0.1/MessageServer", server); //Naming.rebind("rmi://media.inchon.ac.kr/MessageServer", server); System.out.println("Server Bound"); catch(exception e) { System.err.println(e); private Vector queue; 1.12

클라이언트 : Factory.java (1) import java.util.*; import java.rmi.*; public class Factory { public Factory() { // remote object MessageQueue mailbox; System.setSecurityManager(new RMISecurityManager()); // install a security manager try { //get a reference to the remote object mailbox = (MessageQueue)Naming.lookup( //127.0.0.1/MessageServer"); //(MessageQueue)Naming.lookup("rmi://media.inchon.ac.kr/MessageServer"); // now create the producer and consumer threads Producer producerthread = new Producer(mailBox); Consumer consumerthread = new Consumer(mailBox); producerthread.start(); consumerthread.start(); catch (Exception e) { System.err.println(e); 1.13

클라이언트 : Factory.java (2) // producer and consumer will call this to nap public static void napping() { int sleeptime = (int) (NAP_TIME * Math.random() ); try { Thread.sleep(sleepTime*1000); catch(interruptedexception e) { public static void main(string args[]) { Factory client = new Factory(); private static final int NAP_TIME = 5; 1.14

클라이언트 : Producer.java import java.util.*; class Producer extends Thread{ public Producer(MessageQueue m) { mbox = m; public void run() { Date message; while (true) { Factory.napping(); // produce an item & enter it into the buffer message = new Date(); try { mbox.send(message); System.out.println( Producer Produced + message); catch (Exception e) { System.err.println(e); private MessageQueue mbox; 1.15

클라이언트 : Consumer.java import java.util.*; class Consumer extends Thread { public Consumer(MessageQueue m) { mbox = m; public void run() { Date message; while (true) { Factory.napping(); // consume an item from the buffer try { message = (Date)mbox.receive(); if (message!= null) // Consume the item System.out.println( Consumer Consumed + message); catch (Exception e) { System.err.println(e); private MessageQueue mbox; 1.16