03-ClientView

Download Report

Transcript 03-ClientView

03: 클라이언트 뷰
학습 목표
세션 빈의 로컬 및 원격 홈 인터페이스의 클라이언트 뷰에 대한 올바른,
또는 올바르지 못한 설명이나 예제를 파악합니다.
세션 빈의 로컬 및 원격 컴포넌트 인터페이스의 클라이언트 뷰에 대한 올
바른 또는 올바르지 못한 설명이나 예제를 파악합니다.
03
Chapter
클라이언트 뷰
1.클라이언트에서 세션 빈을 사용하는 방법
>생성, 사용 및 제거 1/2
03
Chapter
클라이언트 뷰
1.클라이언트에서 세션 빈을 사용하는 방법
>생성, 사용 및 제거 2/2
03
Chapter
클라이언트 뷰
2.우선 홈 인터페이스 레퍼런스를 가져와야 합니다.
■ JNDI를 사용하여 홈 인터페이스에 대한 레퍼런스를 가
져옵니다.
Ex) Context ic = new InitialContext();
Object o = ic.lookup(“Advisor”);
■ JNDI가 뭐죠?
•Java Naming Directory Interface
•명명 및 디렉토리 서비스에 접근하기 위한 API
03
Chapter
클라이언트 뷰
3.그냥 캐스팅만 하면 되는 줄 알았는데…
■ 원격 홈 인터페이스의 캐스팅(잘못된 방법)
Ex) Context ic = new InitialContext();
Object o = ic.lookup(“Advisor”);
AdviceHome = (AdviceHome) o;
■ 원격 홈 인터페이스의 올바른 축소(올바른 방법)
Ex) Context ic = new InitialContext();
Object o = ic.lookup(“Advisor”);
AdviceHome = (AdviceHome) PortableRemoteObject.narrow(o,
AdviceHome.class);
03
Chapter
클라이언트 뷰
4.PortableRemoteObject.narrow()
■ JNDI로 부터 받은 객체를 인자로 받아서 실제로 홈인터
페이스를 구현하는 객체로 바꿔주는 메소드이다.
■ 즉 이 메소드를 호출되는 것을 홈 인터페이스 형식으
로 캐스트 할 수 있고, 그 객체에 대해 create()메소드를 호
출할 수 있다.
03
Chapter
클라이언트 뷰
5.세션 빈을 위한 원격 홈 인터페이스 만들기.
■ 홈 인터페이스를 만드는 법
03
Chapter
클라이언트 뷰
6.컴포넌트 인터페이스
■ 컴포넌트 인터페이스를 만드는 법
03
Chapter
클라이언트 뷰
7.온라인 쇼핑은 너무 서두르면 안되죠.
■ 집에서 쇼핑을 하다가, 회사에서 계속해서 쇼핑을 하고
싶을때, 다행히도 우리에겐 핸들이 있습니다.
Handle mtHandle = myCart,getHandle();
■ Handle에는 메소드가 하나밖에 없습니다.
Public EJBObject getEJBObject()
■ Client 코드
Handle h = this.restoreToHandle();
Object o = h.getEJBObject();
Shopping cart =
(Shopping)PortableRemoteObject.narrow(o,shopping.class);
03
Chapter
클라이언트 뷰
8.isIdentical? 1/2
■ 두 스텁이 같은 빈을 참조하는지 알아내는 방법
■ isIdentical()
•equals()와 비슷하지만, 힙에 있는 두 객
체가 동등한지를 파악하는 것이 아니다
.
•서버에 있는 두 원격 객체가 같다고 할
수 있는지를 알아내는 것이다.
03
Chapter
클라이언트 뷰
8.isInentical? 2/2
■ 두 스텁이 같은 빈을 참조하는지 알아내는 방법
03
Chapter
클라이언트 뷰
9.빈의 클라이언트 인터페이스가 로컬일 수도 있습니다.
■ 원격 클라이언트 뷰
■ 로컬 클라이언트 뷰
03
Chapter
클라이언트 뷰
10.’핸들’하면 ‘원격’을 생각하세요
■ 로컬 클라이언트에는 핸들이 없어도 됩니다.
03
Chapter
클라이언트 뷰
11.리플렉션이 있다면 EJBMetaData가 왜 필요할까요?
■ 로컬 클라이언트에서는 EJBMetaData가 필요 없습니다.
■ 로컬 클라이언트에서는 그냥 자바 리플렉션 메소드
(getClass()등)를 사용하면 된다.
■ 자바 리플렉션 API가 있으면 객체를 조사해서 그 클래스
에 대한 모든 정보를 구할 수 있지만, 원격 객체의 경우는 레
퍼런스를 구할 수 없기 때문에 EJBMetaData(EJBHome의
getEJBMetaData())를 사용해야 한다.
03
Chapter
클라이언트 뷰
12.equals()가 있어도 isIdentical()이 필요한가요?
■ 로컬 클라이언트에서도 isIdentical()은 필요합니다.
■ 규격에는 equals()메소드에서 리턴되는 값이 어떻게 된다
는 내용이 없기 때문에 isIdentical()가 아니면 두 개의 결과가
같다는 보장을 할 수 없습니다.
03
Chapter
클라이언트 뷰
13.remove 메소드는 왜 그리 많나요?
■ 원격 클라이언트의 경우에는 홈에 두 개, 컴포넌트 인터
페이스에 한 개가 있습니다.
03
Chapter
클라이언트 뷰
14.원격 vs 로컬 1/2
■ 원격 클라이언트 뷰
03
Chapter
클라이언트 뷰
14.원격 vs 로컬 2/2
■ 로컬 클라이언트 뷰
03
Chapter
클라이언트 뷰
15.로컬 클라이언트 인터페이스 만드는 법
■ 로컬 인터페이스를 만드는 법
03
Chapter
클라이언트 뷰
16.클라이언트 인터페이스에서의 예외
>클라이언트에서 준비해야 하는 것
■ 원격 클라이언트 뷰
■ 로컬 클라이언트 뷰
는 컴파일러 확인 예외(즉 RuntimeException이 아닌 예외)를 나타냅니다.
03
Chapter
클라이언트 뷰
17.원격 메소드 인자 vs 로컬 메소드 인자 1/2
■ 로컬 메소드 호출
03
Chapter
클라이언트 뷰
17.원격 메소드 인자 vs 로컬 메소드 인자 2/2
■ 원격 메소드 호출