EJB 소개

핵심 힌트: EJB가 뭐예요?기업 JavaBean(EJB)은 재사용 가능하고 이식 가능한 J2EE 구성 요소입니다.EJB는 비즈니스 논리를 봉인하는 여러 가지 방법으로 구성됩니다.예를 들어 EJB는 고객 데이터베이스에 있는 데이터를 업데이트하는 방법을 포함하는 비즈니스 논리를 가질 수 있습니다.여러 개의 원격 클라이언트와 로컬 클라이언트가 이 방법을 호출할 수 있습니다.또한 EJB는 하나의 용기에서 작동합니다.
EJB가 뭐예요?
기업 JavaBean(EJB)은 재사용 가능하고 이식 가능한 J2EE 구성 요소입니다.EJB는 비즈니스 논리를 봉인하는 여러 가지 방법으로 구성됩니다.예를 들어 EJB는 고객 데이터베이스에 있는 데이터를 업데이트하는 방법을 포함하는 비즈니스 논리를 가질 수 있습니다.여러 개의 원격 클라이언트와 로컬 클라이언트가 이 방법을 호출할 수 있습니다.또한 EJB는 하나의 용기에 실행되어 개발자가 bean과의 업무 논리에만 관심을 가지며 사무 지원, 안전성, 원격 대상 접근 등 복잡하고 오류가 발생하기 쉬운 일을 고려하지 않도록 한다.EJB는 POJO나 일반적인 오래된 자바 대상 형식으로 개발되었고 개발자는 메타데이터 주석으로 용기가 이 Bean을 어떻게 관리하는지 정의할 수 있다.
EJB 유형
EJB는 주로 세 가지 유형이 있는데 그것이 바로 세션 Bean, 실체 Bean과 메시지 구동 Bean이다.세션 Bean은 고객 계정의 기록을 검사하는 등 명확한 결합 해제 작업을 완성합니다.실체 Bean은 데이터베이스에 존재하는 업무 대상을 대표하는 복잡한 업무 실체이다.메시지 구동 Bean은 비동기식 JMS 메시지를 수신하는 데 사용됩니다.이런 유형들을 더욱 상세하게 인식합시다.
세션 빈(메서드)
세션 Bean은 일반적으로 업무 프로세스에서'주문 처리'와 같은 동작을 대표한다.세션 Bean은 과도한 상태를 유지할지 여부에 따라 유상태 또는 무상태로 나뉩니다.
무상태 세션 빈에는 중간 상태가 없습니다.그들은 다른 방법으로 전달된 정보를 추적하는 방법을 유지하지 않는다.따라서 무상태 업무 방법의 매번 호출은 이전의 호출에 독립된다.예를 들어 세금 계산이나 대금 이체.세금 납부액을 계산하는 방법이 호출될 때, 세금 값은 계산되어 호출된 방법으로 되돌아오며, 호출자가 장래에 호출할 내부 상태를 저장할 필요가 없다.상태를 유지하지 않기 때문에 이 Bean들은 용기로만 관리된다.클라이언트가 무상태 Bean 실례를 요청할 때, 용기에서 관리하는 무상태 세션 Bean 실례 집합에서 실례를 받을 수 있습니다.또한 무상태 세션 Bean이 공유될 수 있기 때문에 용기는 더 적은 수의 실례를 유지하여 대량의 클라이언트를 위해 서비스를 제공할 수 있다.간단하게 이 Bean처럼 원 주석 @Stateless를 추가하여 자바 Bean을 무상태 세션으로 지정하고 관리합니다.
상태가 있는 세션 Bean은 여러 가지 방법을 뛰어넘어 호출되는 세션 상태를 유지합니다.예를 들어 온라인 장바구니 응용 프로그램.고객이 온라인 쇼핑을 시작할 때, 고객의 상세한 정보는 데이터베이스에서 얻을 수 있다.같은 정보는 고객이 장바구니에서 상품을 늘리거나 제거하는 등 조작을 할 때 호출되는 다른 방법에도 접근할 수 있다.그러나 이 상태는 세션이 끝나거나 시스템이 붕괴되거나 네트워크가 실패할 때 보류되지 않기 때문에 상태 세션 Bean은 일시적이다.클라이언트가 상태 세션 Bean 실례를 요청하면 클라이언트는 세션 실례를 얻을 수 있습니다. 이 Bean의 상태는 클라이언트에게만 유지됩니다.방법에 메타 주석 @Remove를 추가하여 용기에 어떤 방법이 호출되어 상태 세션을 끝내면 Bean 실례가 제거되어야 한다고 알려 줍니다.
세션 빈 인스턴스

import javax.ejb.Stateless.*;

/**
 *  Bean CalculateEJB incrementValue() 
 **/
@Stateless(name = "CalculateEJB")
public class CalculateEJBBean implements CalculateEJB {
	int value = 0;

	public String incrementValue() {
		value++;
		return "value incremented by 1";
	}
}

솔리드 빈
실체 Bean은 지속적인 데이터를 관리하는 대상으로 관련 자바 대상을 잠재적으로 사용하고 메인 키에 의존하여 유일하게 식별할 수 있다.@Entity 메타 주석을 포함하여 클래스가 솔리드 빈이라는 것을 지정합니다.실체 Bean은 데이터베이스에서 나온 지구화 데이터, 예를 들어 고객 테이블의 기록이나 직원 테이블의 직원 기록을 나타낸다.실체 Bean도 여러 클라이언트에 공유될 수 있다.예를 들어 한 직원의 실체는 한 직원의 연간 임금 총액을 여러 개 계산하거나 직원의 주소를 갱신하는 클라이언트에 의해 사용될 수 있다.실체 Bean 대상의 특정 변수는 지속성을 유지할 수 있다.실체 Bean에 @Transient 메타데이터가 없는 모든 변수는 지속성을 고려해야 합니다.EJB3.0의 주요 특징 중 하나는 메타데이터 주석을 사용하는 개체/관계식 매핑 실체 Bean을 만드는 능력입니다.예를 들어 실체 Bean을 지정하는empId 변수는employee 테이블의 EMPNO 속성에 비추어 아래 실례와 같이 @Table(name="Employees")로 이 테이블의 이름을 주석하고 @Column(name="EMPNO")으로 empId 변수를 주석합니다.또한 EJB3.0의 특징 중 하나는 개발할 때 실체 Bean을 쉽게 테스트할 수 있다는 것이다. Oracle Application Server Entity Test Harness로 용기 외부에서 실체 Bean을 실행할 수 있다.
솔리드 빈 인스턴스

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collection;

@Entity
@Table(name = "EMPLOYEES")
public class Employee implements java.io.Serializable {
	private int empId;
	private String eName;
	private double sal;

	@Id
	@Column(name = "EMPNO", primaryKey = true)
	public int getEmpId() {
		return empId;
	}

	public void setEmpId(int empId) {
		this.empId = empId;
	}

	public String getEname() {
		return eName;
	}

	public void setEname(String eName) {
		this.eName = eName;
	}

	public double getSal() {
		return sal;
	}

	public void setSal(double sal) {
		this.sal = sal;
	}

	public String toString() {
		StringBuffer buf = new StringBuffer();
		buf.append("Class:").append(this.getClass().getName()).append(" ::   ")
				.append(" empId:").append(getEmpId()).append(" ename:").append(
						getEname()).append("sal:").append(getSal());
		return buf.toString();
	}
}

메시지 구동 Bean
드라이브 빈(MDB)은 JMS(Java Message Service)를 직접 사용하는 것보다 비동기적인 통신을 실현하는 방법을 제공합니다.DB를 생성하여 비동기식 JMS 메시지를 수신합니다.컨테이너 처리는 JMS 대기열과 테마가 요구하는 로딩 처리의 대부분입니다.관련 MDB에 모든 메시지를 보냅니다.하나의 MDB는 J2EE 응용 프로그램에서 비동기식 메시지를 보낼 수 있도록 합니다. 이 응용 프로그램은 이 메시지를 처리할 수 있습니다.javax를 실현합니다.jms.MessageListener 인터페이스와 @MessageDriven을 사용하여 이 Bean을 주석해서 Bean이 메시지 구동 Bean이라고 지정합니다.
메시지 제어 Bean 인스턴스

import javax.ejb.MessageDriven;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.Inject;
import javax.jms.*;
import java.util.*;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
import javax.ejb.TimerService;

@MessageDriven(activationConfig = {
		@ActivationConfigProperty(propertyName = "connectionFactoryJndiName",

		propertyValue = "jms/TopicConnectionFactory"),
		@ActivationConfigProperty(propertyName = "destinationName",

		propertyValue = "jms/myTopic"),
		@ActivationConfigProperty(propertyName = "destinationType",

		propertyValue = "javax.jms.Topic"),
		@ActivationConfigProperty(propertyName = "messageSelector",

		propertyValue = "RECIPIENT = 'MDB'") })
/** * JMS  
 * * onMessage()  * Bean  
 * */
public class MessageLogger implements MessageListener, TimedObject {

	@Inject
	javax.ejb.MessageDrivenContext mc;

	public void onMessage(Message message) {
		System.out.println("onMessage() - " + message);
		try {
			String subject = message.getStringProperty("subject");
			String inmessage = message.getStringProperty("message");
			System.out.println("Message receivedntDate: "
					+ new java.util.Date() + "ntSubject: " + subject
					+ "ntMessage: " + inmessage + "n");
			System.out.println("Creating Timer a single event timer");
			TimerService ts = mc.getTimerService();
			Timer timer = ts.createTimer(30000, subject);
			System.out.println("Timer created by MDB at: "
					+ new Date(System.currentTimeMillis()) + " with info: "
					+ subject);
		} catch (Throwable ex) {
		}
	}

	public void ejbTimeout(Timer timer) {
		System.out.println("EJB 3.0: Timer with MDB");
		System.out.println("ejbTimeout() called at: " +

		new Date(System.currentTimeMillis()));
		return;
	}

}

EJB 사용
클라이언트는 Bean에 액세스하는 응용 프로그램입니다.클라이언트층에 저장할 필요는 없지만 독립적인 응용 프로그램인 JSP, Servlet 또는 다른 EJB로 사용할 수 있습니다.클라이언트가 Bean의 원격 또는 로컬 인터페이스를 통해 EJB에 접근하는 방법은 주로 클라이언트와 Bean이 같은 JVM에서 실행되느냐 다른 JVM에서 실행되느냐에 달려 있다.이러한 인터페이스는 Bean의 방법을 정의하고 Bean류가 실제적으로 이러한 방법을 실현한다.클라이언트가 이 Bean 클래스의 한 방법에 접근할 때 용기는 원격 대상 또는 로컬 대상이라고 불리는 Bean의 에이전트를 생성합니다.원격 또는 로컬 대상이 요청을 받고 해당 Bean 실례에 위임하여 클라이언트에게 결과를 되돌려줍니다.Bean에 있는 방법을 호출합니다. 클라이언트는 EJB에서 파일이 아닌 이름으로 Bean을 찾을 수 있도록 정의합니다.다음 예제에서 클라이언트는 컨텍스트 객체를 사용하여 "StateLessejb"Bean으로 이름을 지정합니다.
EJB 클라이언트 인스턴스

import javax.naming.Context;
import javax.naming.InitialContext;

/** *  Bean Bean  */

public class CalculateejbClient {
	public static void main(String[] args) {
		Context context = new InitialContext();
		CalculateEJB myejb = (CalculateEJB) context
				.lookup("java:comp/env/ejb/CalculateEJB");
		myejb.incrementValue();
	}
}

총결산
EJB 3.0 개발업체인 자바빈은 상당히 쉽다.이 규범은 메타데이터 주석을 사용하여 Bean의 유형과 클라이언트에 노출되는 방법을 정의합니다.따라서 특정한 작업을 수행하는 세션 Bean을 만들든 실체 Bean에 테이블을 비추어 데이터를 업데이트하든 일반 Java 대상과 인터페이스를 사용하는 것처럼 처리하고 업무 방법에서 메타 주석을 사용하여 클라이언트에게 노출하는 방법을 사용할 수 있다.EJB의 기초를 이해했으니 OTN에서 EJB 3.0 Resources 페이지에서 더 많은 정보를 발견할 수 있습니다.
다음으로 이동:
http://ajava.org/course/java/7769.html

좋은 웹페이지 즐겨찾기