제10장 EJB 사용하기

내용 목차

10.1. Session Bean 예제
10.1.1. 예제
10.1.2. 컴파일
10.1.3. Deploy
10.1.4. 실행 및 결과
10.2. Java Persistence API 예제
10.2.1. 예제
10.2.2. 컴파일
10.2.3. Deploy
10.2.4. 실행 및 결과

본 장에서는 예제를 이용해서 Stateless Session Bean과 Java Persistence API를 이용하여 Entity를 개발하고 deploy하는 과정에 대해 설명한다.

Session Bean은 기본적으로 Business Interface와 Bean Class로 구성된다.

EJB 예제

다음의 예제 코드는 helloejb를 출력하는 Business 메소드를 가진 간단한 Stateless Session Bean 예제이다.

예제 코드는 다음의 디렉터리에서 찾아볼 수 있다.

JEUS_HOME/samples/getting_started/helloejb/helloejb-ejb/src/java/helloejb

서블릿 클라이언트 예제

helloejb를 호출하는 서블릿 클라이언트를 다음과 같이 구현한다.


예제 코드는 다음 위치의 디렉터리에서 찾아볼 수 있다.

JEUS_HOME/samples/getting_started/helloejb/helloejb-war/src/java/helloejb

패키징한 EJB 애플리케이션을 WebAdmin과 콘솔 툴로 deploy할 수 있다.

WebAdmin 사용

WebAdmin을 사용하여 deploy하는 과정은 다음과 같다.

콘솔 툴 사용

콘솔 툴을 사용하여 deploy하는 과정은 다음과 같다.

  1. 위에서 작성한 helloejb.ear 파일을 임의의 경로에 위치시킨다.

  2. jeusadmin으로 JEUS에 접속한다.

    jeusadmin johan –u administrator –p  password>
  3. 다음과 같이 실행하여 애플리케이션을 DAS에 install한다.

    [DAS]jeus_domain.adminServer>install-application -id helloejb C:\TmaxSoft\JEUS8_5\samples\getting_started\helloejb\dist\helloejb.ear
    Successfully installed application[helloejb].
  4. 다음과 같이 실행하여 애플리케이션을 MS(server1)에 deploy한다.

    [DAS]jeus_domain.adminServer>deploy helloejb -servers server1
    Succeeded to deploy the application : helloejb

본 절에서는 Java Persistence API를 통해 Entity를 작성하고 컴파일하여 deploy하는 과정을 설명한다.

EJB 예제

예제는 Product Entity와 이를 다루는 EJB인 ProductManager Session Bean으로 구성되어 있다.

예제 코드는 다음의 디렉터리에서 찾아볼 수 있다.

JEUS_HOME/samples/getting_started/hellojpa/hellojpa-ejb/src/java/hellojpa

서블릿 클라이언트 예제

ProductManager EJB를 사용하여 데이터베이스에 데이터를 저장하고 데이터를 다루는 서블릿 클라이언트를 다음과 같이 구현한다.

[예 10.7] 서블릿 클라이언트 예제 : <<ProductManagerClient.java>>

package hellojpa;

import java.io.*;
import java.util.Collection;
import javax.ejb.EJB;

import javax.servlet.*;
import javax.servlet.http.*;

public class ProductManagerClient extends HttpServlet {
    @EJB
    private ProductManager productManager;    

    protected void processRequest(HttpServletRequest request,
        HttpServletResponse response)
    throws ServletException, IOException {        
        response.setContentType("text/plain");
        PrintWriter out = response.getWriter();
        out.println("SERVLET CLIENT CONSOLE OUTPUT:\n");
        
        productManager.removeAllProducts();
        out.println("Cleaned up existing products.\n");
        
        out.println("Creating products...");
        Product p1 = productManager.createProduct("1", 10.00, "Ceramic Dog");
        Product p2 = productManager.createProduct("2", 13.00, "Wooden Duck");
        Product p3 = productManager.createProduct("3", 19.00, "Ivory Cat");
        Product p4 = productManager.createProduct("4", 33.00, "Ivory Cat");
        Product p5 = productManager.createProduct("5", 22.00, "Chrome Fish");
        
        Collection products;

        out.println("Created products:");
        products = productManager.findAllProducts();
        for(Object product : products){
             out.println(product);
        }
        out.println();
        
        out.println("Find product with productId 1:");
        Product pp1 = productManager.getProduct("1");
        out.println("Found = " + pp1.getDescription() + " $" + pp1.getPrice());
        
        out.println("Update the price of this product to 12.00");
        pp1.setPrice(12.00);
        productManager.updateProduct(pp1);
        
        Product pp2 = productManager.getProduct("1");
        out.println("Product " + pp2.getDescription() + " is now $" + pp2.getPrice());
        out.println();
        
        out.println("Find products with description:");
        products = productManager.findProductsByDescription("Ivory Cat");
        for(Object product : products){
            out.println(product);
        }
        out.println();
        
        out.println("Find products with price range between 10.00 and 20.00");
        products = productManager.findProductsInRange(10.00, 20.00);
        for(Object product : products){
            out.println(product);
        }
        out.println();
        
        out.println("Removed all products.");
        productManager.removeProduct(p1);
        productManager.removeProduct(p2);
        productManager.removeProduct(p3);
        productManager.removeProduct(p4);
        productManager.removeProduct(p5);
        
        out.close();
    }
    
    protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    protected void doPost(HttpServletRequest request,
        HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
}


예제코드는 다음의 디렉터리에서 찾아볼 수 있다.

JEUS_HOME/samples/getting_started/hellojpa/hellojpa-war/src/java/hellojpa

패키징한 EJB 애플리케이션을 WebAdmin과 콘솔 툴로 deploy할 수 있다.

WebAdmin 사용

다음 과정에 따라 패키징된 모듈을 WebAdmin을 사용하여 deploy한다.

  1. 웹 브라우저로 접속해서 WebAdmin에 로그인한다.

  2. WebAdmin 왼쪽 메뉴의 [Applications]를 선택하면 애플리케이션 목록 조회 화면으로 이동한 후 Deployed Application 화면([그림 10.1])에서 [Install] 버튼을 클릭한다.

  3. Install 화면에서 'Id' 항목에 사용할 ID 값을 입력한다. 'Path' 항목의 [찾아보기] 버튼을 클릭해서 생성된 애플리케이션을 선택한 뒤 [확인] 버튼을 클릭한다. 생성된 애플리케이션은 'JEUS_HOME/samples/getting_started/hellojpa/dist'에 존재한다.


  4. 애플리케이션 목록 조회 화면으로 이동하고, DAS에 install된 애플리케이션이 조회된다. 이때 MS에 배포하기 위해 해당 애플리케이션의 [deploy] 버튼을 클릭한다.


  5. Deploy 화면([그림 10.4])에서 'Target Server' 항목에서 deploy할 서버를 선택하고 [확인] 버튼을 클릭한다. DAS를 선택할 수도 있지만 MS에 deploy하여 애플리케이션을 서비스하는 것을 권장한다.

  6. deploy가 성공적으로 완료되면 다음과 같이 결과 메시지가 출력된다.


참고

“8.4. 데이터소스 추가”에서 데이터소스 설정 관련 부분에서 설명했지만, 데이터소스 설정에서 패스워드나 IP 주소가 정확하지 않을 경우에 deploy는 실패한다.

콘솔 툴 사용

콘솔 툴을 사용하여 deploy하는 방법은 다음과 같다.