메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈

Slides:



Advertisements
Similar presentations
Chap02 자바환경과 자바 프로그램 Section 1 : 자바 개발 환경 Section 2 : 자바 통합 환경 Section 3 : 자바 응용 프로그램과 애플릿 프로그램 Section 4 : 자바 응용 프로그램 Section 5 : 자바 애플릿 프로그램.
Advertisements

- SW_Desing Study Group -
어서와 Java는 처음이지! 제3장선택과 반복.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
Introduction to Servlets
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
최신 소프트웨어 공학 개요 11.1 컴포넌트 기반 소프트웨어 개발 11.2 웹 엔지니어링 11.3 정형적 명세 기법
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
어서와 Java는 처음이지! 제1장 기초 사항.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
제14장 원격 메소드 호출 김 기 환. 조 명 휘.
명품 JAVA Essential.
어서와 Java는 처음이지! 제1장 기초 사항 IT응용시스템공학과 김형진 교수.
팀 명: Con Spirito 팀 원: 경주리 김다정 김소담 최은미
3장. 웹 어플리케이션과 JSP 및 Servlet의 이해 제3장.
1. JSP(Java Server Pages) 소개
9 표준 액션.
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
5 익셉션 처리.
웹 서비스 (Web Services).
제7장 제어구조 I – 식과 문장.
음악 재생 프로그램 예외 처리 방법 try/catch 블록 예외 선언 방법
1. JSP(Java Server Pages) 소개
Java RMI (Remote Method Invocation)
Java RMI (Remote Method Invocation)
Power Java 제4장 자바 프로그래밍 기초.
10장 객체-지향 프로그래밍 II ©창병모.
1강 01장. 웹과 자바.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
자바 5.0 프로그래밍.
명품 Java Programming.
명품 JAVA Essential.
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Hadoop 김연왕
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
Java IT응용시스템공학과 김형진 교수 2장. 자바의 환경 public class SumTest {
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
Java RMI (Remote Method Invocation)
주소록 프로그램.
웹 서비스 (Web Services).
자바 5.0 프로그래밍.
JDBC (Java Database Connectivity)
객체 지향 프로그래밍.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
1강. 웹프로그래밍 웹프로그래밍이란? JAVA웹 웹프로그램의 동작 필요한 학습 Lecturer Kim Myoung-Ho
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
WAP Java Seminar
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
김 정 석 Web Programming 김 정 석
프로그래밍 개론 Ⅰ 제 1장 . 서론 ①.
[INA470] Java Programming Youn-Hee Han
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
JA A V W. 04.
Spring DI 이해 및 활용.
CACM 구현 public class CACM { public CACM(File file)
3장. 웹로직 서버에서의 서블릿과 JSP의 운용 3-1. 서블릿, JSP를 실행하기 전의 환경 설정
Internet Computing KUT Youn-Hee Han
자바 5.0 프로그래밍.
Internet Computing KUT Youn-Hee Han
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Java RMI (Remote Method Invocation)
제 17 장 MVC 모델과 구현 학기 인터넷비즈니스과 강 환수 교수.
컴퓨터 프로그래밍: 실습 1 제 1장 . 서론.
Java 5장. 객체지향 개념 public class SumTest {
웹 프로그래밍 기술 요약 Yang-Sae Moon Department of Computer Science
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
소프트웨어 공학 최신 소프트웨어 공학 기술 1.
Chapter8 : 인터페이스와 패키지 8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용
Presentation transcript:

메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈 18. RMI를 이용한 원격 배포 메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈

메소드 호출과 힙 메소드 호출은 항상 같은 힙에 들어있는 두 객체 사이에서 이루어집니다. class Foo { void go() { Bar b = new Bar(); b.doStuff(); } public static void main(String[] args) { Foo f = new Foo(); f.go(); doStuff() Bar 객체 Foo 객체

다른 시스템에서 돌아가는 객체의 메소드 JVM JVM 리틀 빅

RMI(원격 메소드 호출; Remote Method Invocation) !!! 다른 시스템에서 돌아가는 객체의 메소드 doCalcUsingDatabase() B A 리턴값 리틀 빅 A와 B가 같은 힙에 들어있지 않기 때문에 A에서 B에 있는 메소드를 호출할 수가 없습니다. RMI(원격 메소드 호출; Remote Method Invocation) !!!

원격 메소드 호출 클라이언트 힙 서버 힙 클라이언트 객체 서비스 객체

원격 메소드 호출 클라이언트 힙 서버 힙 클라이언트 객체 클라이언트 보조 객체 서비스 객체 서비스 보조 객체

원격 메소드 호출 클라이언트 힙 서버 힙 클라이언트 객체 서비스 객체 doBigThing() 클라이언트 보조 객체 서비스 보조 객체

원격 메소드 호출 클라이언트 힙 서버 힙 클라이언트 객체 서비스 객체 doBigThing() 클라이언트에서 메소드 호출한대요. 클라이언트 보조 객체 서비스 객체 서비스 보조 객체

원격 메소드 호출 클라이언트 힙 서버 힙 클라이언트 객체 서비스 객체 doBigThing() doBigThing() 클라이언트에서 메소드 호출한대요. 클라이언트 객체 클라이언트 보조 객체 서비스 객체 서비스 보조 객체

보조 객체 보조 객체(helper object) 실제 통신 작업을 처리함 소켓 및 스트림과 관련된 자질구레한 작업 처리 클라이언트가 로컬 객체에 있는 메소드를 “호출하는 척”하는 것을 가능하게 해 줌 “클라이언트에서 호출하려고 하는 메소드를 가지고 있는 객체인 척”하는 객체 서버 쪽에서는 서비스 보조 객체에서 클라이언트 보조 객체에서 보낸 요청을 받아서 호출에 대한 정보를 열어보고 진짜 서비스 객체에 있는 진짜 메소드를 호출 리턴값을 받아서 포장해서 다시 클라이언트 객체로 보냄

RMI RMI (Remote Method Invocation) 원격 메소드를 호출하는 데 필요한 메커니즘을 제공 사용할 수 있는 규약 JRMP – 자바로 원격 호출하기 위한 용도만으로 쓰임 IIOP – CORBA용 규약. 서버 힙 클라이언트 힙 RMI 스켈레톤 RMI 스터브 클라이언트 객체 서비스 보조 객체 서비스 객체 클라이언트 보조 객체

원격 서비스를 만드는 방법 원격 인터페이스 만들기 원격 인터페이스를 구현한 클래스 만들기 rmic를 이용하여 스터브와 스켈레톤 생성 RMI 레지스트리(rmiregistry) 실행 원격 서비스 시작

1. 원격 인터페이스 만들기 java.rmi.Remote 확장 모든 메소드에서 RemoteException 선언 인자나 리턴값이 직렬화 가능한 유형인지 확인 import java.rmi.*; public interface MyRemote extends Remote { public String sayHello() throws RemoteException; … }

2. 원격 인터페이스를 구현한 클래스 원격 인터페이스 구현 UnicastRemoteObject 확장 RemoteException을 선언하는 생성자 만들기 서비스를 RMI 레지스트리에 등록 puglic class MyRemoteImpl extends UnicastRemoteObject implements MyRemote { public MyRemoteImpl() throws RemoteException { } public String sayHello() { return “Server says, ‘Hey’”; … } try { MyRemote service = new MyRemoteImpl(); Naming.rebind(“Remote_Hello”, service); } catch(Exception ex) { … }

3. 스터브/스켈레톤 생성 원격 인터페이스를 구현한 클래스에 대해 rmic를 실행 MyRemoteImpl_Stub.class 101101 11010101 10101101 1010111 0100110 101101 11010101 10101101 1010111 0100110 MyRemoteImpl_Stub.class MyRemoteImpl_Skel.class

4. rmiregistry 실행 터미널을 열고 rmiregistry 시작 % rmiregistry

5. 서비스 시작 다른 터미널을 열고 서비스 시작 % java MyRemoteImpl 설명 끝나고 579 페이지에 서버용 코드가 있는데요, 그 코드는 간단한 원격 인터페이스하고 원격 서비스를 만들어놓은 것입니다. 이 코드는 나중에 클라이언트를 만들고 나서 클라이언트 코드와 함께 살펴보도록 하겠습니다.

클라이언트에서 스터브를 받는 방법 클라이언트에서 메소드를 호출할 때 스터브 객체에 대해 메소드를 호출 반드시 스터브 객체를 방아야 함 RMI 레지스트리에서 스터브를 찾아냄 MyRemote service = (MyRemote) Naming.lookup(“rmi://127.0.0.1/Remote_Hello”);

클라이언트에서 스터브를 받는 방법 서버 스켈레톤 서비스 객체 스터브 스터브 RMI 레지스트리 클라이언트 lookup() 클라이언트 객체 스켈레톤 스터브 서비스 객체 Remote Hello lookup() 스터브 RMI 레지스트리

스터브 클래스를 받는 방법 스터브 클래스를 직접 클라이언트로 복사 동적 클래스 다운로딩 클래스 파일을 찾을 수 있는 URL을 알려주는 정보가 스터브 객체에 기록됨 역직렬화 과정에서 RMI 시스템에서 클래스를 로컬 시스템에서 찾을 수 없으면 그 URL로 HTTP Get 요청을 하여 클래스를 받아옴

필요한 클래스 파일 서버 스켈레톤 서비스 객체 스터브 스터브 클라이언트 클라이언트 객체 MyRemoteClient.class 101101 11011 101011 101101 11011 101011 101101 11011 101011 MyRemoteClient.class 101101 11011 101011 MyRemoteImpl.class MyRemoteImpl_Stub.class MyRemoteImpl_Stub.class 101101 11011 101011 101101 11011 101011 101101 11011 101011 MyRemote.class MyRemoteImpl_Skel.class MyRemote.class

서블릿 (Servlet) HTTP에서 웹 서버와 함께 돌아가는 자바 프로그램 CGI 프로그래밍을 하는 데 자바를 사용한다고 볼 수 있음 J2EE 서블릿과 EJB(Enterprise Java Beans)를 혼합하기 위한 용도로 많이 쓰임 서블릿은 EJB의 클라이언트 역할을 함 서블릿과 EJB 사이에서 RMI를 통해 정보를 주고받음

서블릿 서블릿을 저장해야 하는 위치 확인 servlets.jar를 구해서 클래스 경로에 추가 HttpServlet을 확장하여 서블릿 클래스 만들기 public class MyServletA extends HttpServlet { … } 서블릿을 호출하는 HTML 페이지 만들기 <a href=“Servlets/MyServletA”>This is the most amazing servlet.</a> 서블릿과 HTML을 웹 서버에서 사용할 수 있도록 만들기

서블릿과 JSP JSP (Java Server Page) 서블릿에서는 출력 선언문에 HTML이 들어가는 자바 클래스를 만들어야 함 JSP에서는 자바 코드가 들어있는 HTML 페이지를 만들어야 함 서블릿을 사용하는 경우에 비해 사용하기가 상당히 편함 자바 개발자는 서블릿을 만들고 웹 페이지 개발자는 JSP를 만들어서 작업을 분리할 수 있음

EJB RMI만 가지고는 하기 힘든 다양한 서비스를 제공 보조객체 클라이언트 보조객체 클라이언트 객체 엔터프라이즈 빈

지니 (Jini) 어댑티브 디스커버리 (Adaptive discovery) 자가치유 네트워크 (self-healing network) 서비스에서 어떤 인터페이스를 구현했는지만 알면 필요한 서비스를 찾을 수 있음

어댑티브 디스커버리 안녕하세요. 제가 왔어요. 지니 룩업 서비스

scientificCalculator 구현합니다. 등록해주세요. 어댑티브 디스커버리 scientificCalculator 구현합니다. 등록해주세요. 지니 서비스 지니 룩업 서비스

scientificCalculator 구현한 거 있어요? 어댑티브 디스커버리 지니 서비스 지니 룩업 서비스 자바 애플리케이션 scientificCalculator 구현한 거 있어요?

어댑티브 디스커버리 지니 서비스 지니 룩업 서비스 자바 애플리케이션 예, 있습니다. 여기 직렬화된 객체 있어요.

자가치유 네트워크 임차권 여기 있습니다. 잘 갱신해주세요. 지니 서비스 지니 룩업 서비스

자가치유 네트워크 임차권을 갱신하지 않는군. 목록에서 빼야지. 지니 룩업 서비스

범용 서비스 브라우저

범용 서비스 브라우저 서버 서비스 브라우저 Remote Hello 스터브 RMI 레지스트리

범용 서비스 브라우저 서버 서비스 브라우저 getServiceList() getService(svc)

범용 서비스 브라우저 서비스 브라우저

600~607 페이지에 나와있는 코드를 직접 실행해봅시다. 범용 서비스 브라우저 – 클래스/인터페이스 ServiceServer getServicesList() getService() Service getGuiPanel() ServiceServerImpl getServicesList() getService() 600~607 페이지에 나와있는 코드를 직접 실행해봅시다. DiceService getGuiPanel() ServiceBrowser main() DayOfTheWeekService getGuiPanel() MiniMusicService getGuiPanel()

숙제 본문을 꼼꼼하게 읽어봅시다. 본문 및 코드 중간에 있는 ‘연필을 깎으며’ 문제를 모두 해결해봅시다. 모든 코드를 직접 입력해서 실행시켜보고 코드를 다시 한 번 보면서 코드를 다른 사람한테 소개하는 연습을 해 봅시다. API 문서에서 이 장에 나와있는 클래스 및 메소드에 대한 내용을 직접 찾아봅시다.