제 이 슨 루 돌 프 의 Groovy 에 대한 새로운 튜 토리 얼: Grails + EJB Step by Step (프롤로그)

5849 단어 grails ejb
본문http://www.infoq.com/cn/articles/grails-ejb-tutorial
저자 제 이 슨 루 돌 프 번역자 호 키
이것 은 grails 의 좋 은 입문 강좌 입 니 다. JAVA 응용 에 비해 대량의 코드 를 생략 할 수 있 습 니 다.
머리말
루비 온 레일 스 는 소프트웨어 공학 세계 의 주목 을 받 고 있 지만 기업 들 은 여전히 이 를 의심 하고 있다.왜 이러 지?우 리 는 "스 크 립 트 언어 위 에 구 축 된 프레임 워 크 가 어떻게 나의 기업 응용 에 적합 할 수 있 겠 는가?!"라 고 의심한다. 루비 온 레일 스에 대해 전형 적 인 논 조 는 기업 서비스 (예 를 들 어 분포 식 사무, 메시지 전달 등) 에 대한 지원 이 부족 하 다 는 것 이다.많은 기업 들 에 게 플랫폼 이 이런 서비스 가 없다 면 고려 될 수 없 을 것 이다.
Grails 는 이러한 관심 사 를 해결 하고 빠 른 응용 개발 (RAD) 이 기업 에 가능 하 다 는 것 을 증명 하 는 데 목적 을 둔다.Grails 는 Groovy 위 에 구축 되 어 자바 와 의 틈새 없 는 통합 을 제공 합 니 다.그것 은 당신 의 업무 에 의존 하 는 기업 서 비 스 를 직접 방문 할 수 있 고 도구 모음 에 강력 한 동적 언어 구 조 를 추가 할 수 있 습 니 다.
기업 의 집적 능력 을 보 여 주 는 인상적 인 예 로 서 Grails 는 기 존의 EJB 3 실체 Bean 을 바탕 으로 웹 애플 리 케 이 션 을 구축 할 수 있 습 니 다.하지만 그 능력 은 그것 뿐 이 아니다.Grails 는 실체 Bean 의 능력 을 대폭 향상 시 켰 고 이것 은 완전히 동적 으로 이 루어 졌 으 며 EJB 소스 코드 를 변경 하지 않 았 습 니 다.Grails 대상 관계 맵 (GORM) 은 Hibernate 3 (최종 적 으로 자바 지구 화 API 에 대한 지원 을 제공 합 니 다) 위 에 세 워 졌 으 며, Groovy 의 메타 대상 프로 토 콜 (MOP) 을 이용 하여 다양한 정적 실체 Bean 에 편리 한 동적 방법 을 추가 하 였 습 니 다.이 방법 들 은 Grails 와 Groovy 에서 접근 할 수 있 을 뿐만 아니 라 자바 코드 도 접근 할 수 있 습 니 다!우 리 는 순식간에 JEE/EJB 3 의 기업 급 능력 과 RAD 웹 애플 리 케 이 션 개발 의 모든 장점 을 가지 게 되 었 습 니 다!
그렇다면 EJB 3 실체 Bean 을 바탕 으로 Grails 애플 리 케 이 션 을 구축 하 는 데 어떤 작업 을 해 야 하 는 지 살 펴 보 자.다음 단계 에서 우 리 는 새로운 Grails 응용 을 만 들 고 실체 Bean 을 응용 에 가 져 와 실체 Bean 에 결 성 된 웹 인터페이스 를 신속하게 구축 하 는 비계 코드 (scaffolding) 를 만 든 다음 에 Grails 가 실체 Bean 에 추가 하 는 편리 한 동적 방법 을 모색 할 것 이다.
우선 EJB 3 애플 리 케 이 션 부터 시작 해 야 합 니 다.(Grails 는 EJB 3 애플 리 케 이 션 을 시작 으로 할 필요 가 없습니다. 그러나 본 논문 의 일반적인 가설 은 RAD 웹 개발 을 EJB 3 프로젝트 에 합병 하 는 것 에 관심 이 있다 는 것 입 니 다.) 우리 가 EJB 3 실체 Bean 이 있다 고 가정 하면 한 회사 의 직원 (EmployeBean) 과 직원 에 게 배 치 된 컴퓨터 (Computer Bean) 를 대표 합 니 다.(문제 가 발생 하면 자원 소절 을 참조 하 십시오. 이 Grails 응용 프로그램의 전체 소스 코드 인 이 실체 Bean 을 사용 하 는 간단 한 JEE 응용 프로그램 과 다른 유용 한 것 을 찾 을 수 있 습 니 다.)
[첨부 파일 1 위 구조 도]
다음은 우리 실체 빈 을 지지 하 는 두 장의 표 입 니 다.(예 를 들 어, 우 리 는 MySQL 5.0 을 사용 할 것 입 니 다. 이 스 크 립 트 를 사용 하여 ejb3example 라 는 새 데이터 베 이 스 를 만 들 수 있 습 니 다. 동시에 이 표를 생 성 할 수 있 습 니 다.)
[첨부 파일 2 위 표 스 크 립 트]
이러한 데이터 와 상호작용 하 는 웹 사용자 인터페이스 를 구축 하고 기 존 코드 와 통합 하 는 데 얼마나 걸 립 니까?그것 은 너무 많은 시간 을 써 서 는 안 된다. 그러나 우 리 는 이미 이러한 관점 을 받 아 들 였 을 것 이다. 즉, 이 과정 은 중대 한 노력 이 필요 하 다 는 것 이다.Grails 를 사용 하면 그 럴 필요 가 없습니다.
다음은 POJO 코드 입 니 다.
package com.jasonrudolph.ejb3example.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "employees")
public class EmployeeBean implements Serializable {

	/** The primary key for this employee. */
	private int id;

	/** The network ID (i.e., user ID) for this employee. */
	private String networkId;

	/** The first name for this employee. */
	private String firstName;

	/** The last name for this employee. */
	private String lastName;

	/** The date on which this employee began his/her employment. */
	private Date startDate;

	/** The collection of computers assigned to this employee. */
	private Collection<ComputerBean> computers = new ArrayList();

	public EmployeeBean() {
	}

	public EmployeeBean(String networkId, String firstName, String lastName,
			Date startDate) {
		this.networkId = networkId;
		this.firstName = firstName;
		this.lastName = lastName;
		this.startDate = startDate;
	}

	/**
	 * @return the system-generated primary key for this employee
	 */
	@Id
	@GeneratedValue
	public int getId() {
		return this.id;
	}

	/**
	 * Sets the primary key for this employee. Only the EJB container should
	 * invoke this method.
	 *
	 * @param id
	 *            the primary key for this employee
	 */
	public void setId(int id) {
		this.id = id;
	}

	@Column(name = "network_id")
	public String getNetworkId() {
		return this.networkId;
	}

	public void setNetworkId(String networkId) {
		this.networkId = networkId;
	}

	@Column(name = "first_name")
	public String getFirstName() {
		return this.firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	@Column(name = "last_name")
	public String getLastName() {
		return this.lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	@Column(name = "start_date")
	public Date getStartDate() {
		return startDate;
	}

	public void setStartDate(Date startDate) {
		this.startDate = startDate;
	}

	/**
	 * @return the collection of computers assigned to this employee
	 */
	@OneToMany(fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, mappedBy = "employeeBean")
	public Collection<ComputerBean> getComputers() {
		return this.computers;
	}

	/**
	 * Sets the collection of computers assigned to this employee.
	 *
	 * @param computers
	 *            the collection of computers assigned to this employee
	 */
	public void setComputers(Collection<ComputerBean> computers) {
		this.computers = computers;
	}
}

좋은 웹페이지 즐겨찾기