JAVA WEB EJB 엔터프라이즈 자바 빈즈 기초

[출처] http://dada.pe.kr/129

초보자의 간단한 EJB 프로그램 만들기

from 개발 끄적임들/케케묵어버린 것들 2005/03/14 11:32

※ 김성박님의 EJB 강좌와 EJB 엔터프라이즈 자바빈즈 바이블을 참고했습니다.

1. EJB 개발 순서
a. 홈 인터페이스(Home Interface)와 리모트 인터페이스(Remote Interface)의 작성
- 홈 인터페이스(Home Interface) : 엔터프라이즈 빈을 클라이언트가 사용할 수 있도록 생성하고 찾아주는 기능
- 리모트 인터페이스(Remote Interface) : 엔터프라이즈 빈이 클라이언트에게 제공하는 서비스를 메소드들로 선언한 인터페이스

b. Bean Class의 작성
- 엔터프라이즈 빈이 실제로 처리하는 작업을 내부코드로 구체적으로 작성하는 클래스입니다. Remote Interface에서 선언된 비즈니스 메소드를 실제로 구현해줘야 한다. 개발자 입장으로 보면 가장 할 일이 많은 작업이다.
- Bean Class를 작성할 때는 Remote Interface에서 정의된 메소드를 실제로 구현해 주는 것 외에도 EJB 컨테이너의 규약 메소드를 정의해야 한다. 이 메소드는 EJB 컨테이너가 특정한 순간에 호출하는 메소들로 아주 중요한 기능을 처리한다.

c. 디플로이먼트 디스크립터(Deployment Descriptor) 작성
- 디플로이먼트 디스크립터는 XML파일로 엔터프라이즈 빈의 이름, 트랜잭션 처리방법, 보안, 자원관리 방법 등의 정보를 작성한 파일아더,

d. 엔터프라이즈 빈과 관련된 모든 클래스와 디플로이먼트 디스크립터의 패키지화(jar로 묶음)
※ c,d를 묶어 디플로이먼트라고 한다.

e. 패키지를 EJB 컨테이너에 설치함
- 참고로 EJB 컨테이너 안에 EJB패키지를 설치하는 개발자를 배치자(deployeer)라고 한다.
- 컨테이너에 설치하는 과정을 '플로그인'이라고 말하며, 플러그인 되는 과정에서 리모트 인터페이스를 구현한 클래스, 홈 인터페이스를 구현한 클래스, 각각의 RMI 스텁, 스켈레톤 클래스가 자동으로 생성된다.


2. J2EE 설치하기
a. 그냥 다운로드 받아서 설치한다. 여기서 버젼은 1.4.x이다.

b. 환경 설정을 한다.
- 환경 변수에서 CLASSPATH를 만들고, C:SunAppServerlibj2ee.jar 를 입력한다.

- J2EE_HOME을 만들고, C:SunAppServer를 입력한다.

- JAVA_HOME을 만들고, C:SunAppServerjdk를 입력한다.

- PATH는 편집하기를 하여, C:SunAppServerin 과 C:SunAppServerjdkin을 추가한다.

- J2EE 서버에 관한 내용은 http://www.kid.pe.kr/blog/index.php?pl=118&ct1=4 에 있으므로 참고바람^^


3. 간단한 덧셈을 계산하여 주는 EJB와 jsp을 연동하는 프로그래밍하기
a. Home Interface 작성
AddHome.java
package kr.co.kid.ejb.user;

import java.rmi.*;
import javax.ejb.*;

public interface AddHome extends EJBHome {
public Add create() throws CreateException, RemoteException;
}


b. Remote Interface 작성
Add.java
package kr.co.kid.ejb.user;

import java.rmi.*;
import javax.ejb.*;

public interface Add extends EJBObject {
public int getAdd(int num1, int num2) throws RemoteException;
}


c. Bean Class 작성
AddEJB.java
package kr.co.kid.ejb.user;

import java.util.*;
import javax.ejb.*;

public class AddEJB implements SessionBean {
public int getAdd(int num1, int num2) {
return num1 + num2;
}

public AddEJB(){}
public void ejbCreate(){}
public void ejbRemove(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void setSessionContext(SessionContext sc){}
}


4. 디플로이먼트 하기
a. 먼저 컴파일을 한다.


b. class 파일을 소스 파일에서 package로 지정한 디렉토리(즉 kr.co.kid.ejb.user)를 차례대로 만들어 그곳에 복사한다.


c. J2EE의 default Server를 실행한다.

d. J2EE의 Deploytool을 실행한다.


e. File -> New -> Application 을 선택한다.

- 여기서는 임의의 폴더 project를 만들고, Add라는 임의의 이름을 지정해주었다. 이 project 폴더 안에서 jar과 ear이 만들어진다.
- OK 버튼을 누르면 Applications에 Add가 첨가되어있는 것을 볼 수 있다.


f. File -> New -> Enterprise Bean을 선택한다.

- JAR Display Name에 Add라는 이름을 지정하고 Edit Content를 선택한다.

- 앞에서 만들었던 최상위 폴더에서 kr폴더를 선택하고 Add한다. 그러면 아래 프레임에 krcokidejbuser 안의 class가 Add된 것을 알 수 있다. OK 버튼을 누르고 Next한다.

- 위의 그림처럼 설정하자. Enterprise Bean Type은 무상태, 즉 Stateless Session으로 놓아둔다. Remote Interface도 설정하고 Next한다.

- No로 설정하고 그냥 Next한다.
- 마지막 화면이 나오면 Finish한다.

- 설정이 끝나면 본화면에서 Add아래에 Add/AddEJB가 생성된 것을 확인할 수 있다.

- AddEJB위의 Add를 선택하고 아래의 Sun-specific Settings...버튼을 누르면 위 그림처럼 다이얼로그가 뜬다. 여기서 JNDI Name을 MyAdd로 설정한다.

5. EJB와 연동하기 위해 html 및 jsp 작성하기
※ 블로그에서 <>를 태그로 인식하므로 []로 대체해서 소스를 올렸다.
a. html 작성하기
Addform.html
[html]
[head]
[title]EJB 와 덧셈 [/title]
[/head]

[body]
[!--
post 방식으로 add.jsp를 호출합니다. add.jsp는 EJB객체를 이용하는 jsp 파일입니다.
--]

[form method = "post" action="Add.jsp"]
값 1:[input type = "text" name = "num1"][br]
값 2:[input type = "text" name = "num2"][br]
[input type = "submit" value="계산"]
[/form]
[/body]
[/html]


b. jsp 작성하기
Add.jsp
[%@page contentType = "text/html; charset=euc-kr" %]
[%@page import = "javax.naming.*" %]
[%@page import = "javax.rmi.PortableRemoteObject" %]
[%@page import = "kr.co.kid.ejb.user.AddHome" %]
[%@page import = "kr.co.kid.ejb.user.Add" %]
[html]
[head]
[title]EJB와 덧셈[/title]
[/head]

[body]

[%
int num1 = 0;
int num2 = 0;

try {
num1 = Integer.parseInt(request.getParameter("num1"));
} catch(Exception e) {
num1 = 0;
}

try {
num2 = Integer.parseInt(request.getParameter("num2"));
} catch(Exception e) {
num2 = 0;
}

Context initial = new InitialContext();
Object obj = initial.lookup("MyAdd");

AddHome home = (AddHome)PortableRemoteObject.narrow(obj, AddHome.class);

Add a1 = home.create();
out.println("결과값 : " + a1.getAdd(num1, num2));
%]

[/body]


6. EJB와 연동하기 위해 Web Compoent 만들기
a. Deploytools에서 File -> New -> Web Component... 를 선택한다.

- Create New WAR Module in Application에서 Add를 선택하고, War Display Name은 AddWar로 설정한 후 아래의 Edit Content 버튼을 클릭한다.

- Enterprise Beans 와 마찬가지로 다이얼로그 창이 뜨는데, 조금전에 작성했던 Addform.html과 Add.jsp를 선택하여 Add하고, Next한다.

- Web Component로 JSP를 사용할 것이기 때문에 JSP Page를 선택하고 Next.

- JSP filename으로 Add.jsp를 선택하면 자동으로 에디트툴에 설정해준다. 그 후에 Next하고 Finish

- AddWar라는 이름의 Web Component가 생성된 것을 확인할 수 있다. AddWar를 선택하고 General Tab의 Context Root에 AddContextRoot라고 입력한다.

- EJB Ref's 탭의 Add 버튼을 선택하고 위 그림처럼 설정한다.

b. Applications의 바로 아래 Add를 선택한 후, Tool -> Deploy를 선택한다.

- Return Client Jar의 라디오 체크버튼을 체크하고 OK한다.

- 위의 그림처럼 나오면 deplyment를 성공한 것이다.

- localhost:4848을 선택하면 오른쪽 프레임에 Add가 running되어 있는 것을 확인한다. (deployment 되었음)

c. 제대로 연동이 되는지 웹브라우저에서 확인해보자

- 주소를 http://localhost:8080/AddContextRoot/Addform.html 지정하고 위의 화면이 나오면 첫번째 관문은 통과~ 값을 입력하고 계산 버튼을 눌러보자!

- Add.jsp가 불러지고 위의 화면처럼 결과값이 나오면 제대로 연동된 것이다~ 축하~

7. 몇가지 참고할만 한 것들
a. deployment된 파일들은 C:SunAppServerdomainsdomain1applicationsj2ee-appsAdd 에서 확인할 수 있다.
b. 자바 1.4대 부터는 이전처럼 같은 폴더 안에 있는 class파일을 그냥 import할 수 없다. package 명령을 사용하여 폴더를 지정해줘야한다. 4-b 디렉토리 설정과 5-b jsp 소스의 3,4번째 import 참고

8. 후기
인터넷에 나온 예제들이 J2EE 1.3을 기준으로 하여 약간씩 변화된 것이 많다. 특히 deploy tools의 설정이 많이 변경되었다. (삽질이 많았다 ㅜㅜ) 또한 jsp에서 사용자 class의 import와 java파일의 package 설정 또한 자세히 나와있지 않아(자바 기초 부족 ㅡㅡ;), 여러 서적을 뒤적거리면서 찾아냈다. (이것땜시 이틀 날림;;)
아직 끝난 것은 아니다. MySQL 등 관계형 데이터베이스와 연동을 시도해야한다 ㅡㅁㅡ; 휴~

+ Recent posts