자바 플랫폼에서 스크립트 언어 지원의 추가에 따라 Groovy와 같은 웹 애플리케이션 스크립트 언어, Java Persistence API(JPA)와 같은 자바 기술 및 MySQL과 같은 데이터베이스의 결합에 많은 관심이 집중되었습니다. 작년에 저는 애완동물의 온라인 카탈로그를 보여주는 애플리케이션을 생성하기 위해 JavaServer Faces 기술, Spring 및 JPA를 사용하는 방법을 보여주는 JSF 기술, Spring과 JPI의 결합이라는 제목의 테크팁을 쓴 적이 있습니다. 본 팁에서는 Groovy 언어, Grails 프레임워크, MySQL 데이터베이스 및 Java Persistence API를 사용하여 온라인 카탈로그 애플리케이션을 만드는 방법을 보여줍니다.

본 팁에는 샘플 애플리케이션 코드가 수록된 패키지가 함께 제공됩니다. 이 팁의 코드 예제는 해당 패키지에 포함된 샘플의 소스 코드에서 추출한 것입니다. 본 팁에서는 애플리케이션을 구축하고 GlassFish 애플리케이션 서버에 배포하기 위해 NetBeans IDE 6.5 Milestone 1을 사용합니다. NetBeans IDE는 자바 프로그래밍 언어로 작성된 모듈식 표준 기반 통합 개발 환경(IDE)입니다. 최신 NetBeans IDE 서비스인 NetBeans IDE 6.5 Milestone 1(M1)은 Groovy 및 Grails에 대한 지원을 포함한 여러 가지 새로운 기능을 제공합니다. GlassFish는 자바 EE 5 플랫폼에서 최신 기능을 구현하는 무료 오픈 소스 애플리케이션 서버입니다.


샘플 애플리케이션의 언어, 기술 및 프레임워크 요약

Groovy, Grails, MySQL 또는 JPA에 익숙하지 않은 경우를 위해 간략하게 설명하겠습니다.

  • Groovy는 자바 가상 머신(JVM)1을 위한 민첩하고 동적인 언어입니다. 자바 바이트 코드를 컴파일하며 Smalltalk, Python 및 Ruby와 같은 언어의 인기 있는 기능을 결합했습니다.
  • Grails는 Groovy 언어를 활용하며 자바 웹 배포를 보완하는 오픈 소스 웹 애플리케이션 프레임워크이며 Groovy에 "규칙에 따른 코딩" 패러다임을 적용하는 것을 목적으로 합니다. Grails는 모델-뷰-컨트롤러(Model-View-Controller) 기반 프레임워크로서 구성 파일의 필요성을 줄이고 데이터베이스 지원 웹 애플리케이션에서 필요한 것들을 생성하여 웹 애플리케이션 개발을 단순화합니다.
  • MySQL은 세계적으로 가장 널리 사용되는 오픈 소스 데이터베이스입니다. 지속적으로 빠른 성능과 높은 신뢰성, 사용상의 편이성을 제공합니다.
  • JPA(Java Persistence API)는 자바 EE 및 자바 SE 애플리케이션을 위해 POJO(plain old Java object) 기반의 지속성 모델을 제공합니다. 이것은 관계형 데이터가 Java 개체에 매핑되는 방식에 대한 모든 세부사항을 다루며 개체/관계 매핑(O/R)을 표준화합니다.


샘플 애플리케이션

샘플 애플리케이션에서는 애완동물 가게에서 판매하는 애완동물의 온라인 카탈로그를 표시합니다. 그림 1은 사용자가 상점의 제품 목록을 페이지별로 볼 수 있는 카탈로그 목록 페이지를 보여줍니다.

 

사용자 삽입 이미지
그림 1. 카탈로그 목록 페이지


애플리케이션 검사

앞에서 언급했듯이 Grails는 웹 애플리케이션 개발을 단순화하는 모델-뷰-컨트롤러(Model-View-Controller) 기반 프레임워크입니다. 온라인 카탈로그 애플리케이션은 Grails를 사용하며 애플리케이션은 사용자 인터페이스인 "뷰(View)"와 모델과 뷰 사이의 통신을 관리하는 코드인 "컨트롤러(Controller)"에서 데이터인 "모델(Model)"을 격리하는 MVC 패턴을 따릅니다. 애플리케이션에 대한 모델을 먼저 살펴 보겠습니다.


모델

모델은 애플리케이션의 데이터를 나타낼 뿐만 아니라 애플리케이션의 수명이 끝나더라도 지속되는 영구적 데이터도 나타냅니다. 다시 말해, 모델은 애플리케이션의 영구적 비즈니스 도메인 개체를 나타냅니다. 애플리케이션은 지속성 관리를 위해 JPA를 사용합니다. JPA에서 엔터티 개체의 인스턴스인 엔터티 인스턴스는 데이터베이스 테이블의 데이터 행을 나타냅니다.

애플리케이션의 소스 코드를 검토하면 model 디렉토리에서 ItemAddress의 두 가지 클래스를 볼 수 있습니다. Item은 일반적인 JPA 엔터티 개체인 엔터티 클래스로서 데이터베이스의 item 테이블에 매핑합니다. 테이블은 카탈로그의 항목에 대한 정보를 저장합니다. 다음은 Item 클래스에 대한 소스 코드의 일부입니다.

   package model;

   import java.io.Serializable;
   ...

   @Entity
   @Table(name = "item")
   public class Item implements Serializable {

       private static final long serialVersionUID = 1L;
       @Id
       private Long id;
       private String name;
       private String description;
       private String imageurl;
       private String imagethumburl;
       private BigDecimal price;
       @ManyToOne(optional = false)
   	       @JoinColumn(name = "address_id")
       private Address address;

       // getters and setters
       ...
   }

Address는 데이터베이스의 address 테이블에 매핑하는 엔터티 클래스입니다. 테이블은 카탈로그의 항목에 연관된 주소를 저장합니다. 다음은 Address 클래스에 대한 소스 코드의 일부입니다.

   package model;

   import java.io.Serializable;
   ...

   @Entity
   public class Address implements Serializable {

       private static final long serialVersionUID = 1L;
       @Id
       private Long id;
       private String street1;
       private String street2;
       private String city;
       private String state;
       private String zip;
       private BigDecimal latitude;
       private BigDecimal longitude;
       private BigInteger version;
       @OneToMany(fetch = FetchType.EAGER,
        cascade = { CascadeType.ALL },
        mappedBy = "address")
       private Collection<Item>items = new ArrayList();


       // getters and setters
	          ...
   }

Item 클래스는 Address 클래스와 다대일 관계를 가지며 이는 동일한 주소와 연관된 카탈로그에 여러 개의 항목이 있을 수 있지만 여러 개의 주소는 동일한 항목과 연관될 수 없음을 의미합니다. 이 관계는 Item 클래스의 @ManyToOne 주석과 Address 엔터티 클래스의 @OneToMany(mappedBy = "address") 주석으로 지정됩니다.


Grails 및 MySQL과 함께 JPA 엔터티 사용

애플리케이션에 Grails 및 MySQL과 함께 JPA 엔터티를 사용하려면 먼저 Grails 애플리케이션을 생성한 다음, Grails 애플리케이션 디렉토리 구조에서 일부 파일을 수정해야 합니다.

NetBeans IDE 6.5 M1을 사용하여 Grails 애플리케이션을 생성합니다. 아직 없는 경우, NetBeans IDE 6.5 Milestone 1 다운로드Grails 다운로드를 받으십시오.

NetBeans IDE 6.5 Milestone 1을 시작합니다. File 메뉴에서 New Project를 선택합니다. 그 다음, 그림 2에 나온 것처럼 Categories 창에서 Groovy를, Projects 창에서 Grails를 선택합니다.

 

사용자 삽입 이미지
그림 2. NetBeans IDE 6.5 M1에서 Grails 프로젝트 생성

Next 버튼을 클릭하고 프로젝트의 이름을 지정합니다(예: MyGrailsApp). 기본 프로젝트 위치를 허용하거나 탐색하여 다른 위치를 선택합니다. Set as Main Project 확인란을 선택된 상태로 두고 Finish 버튼을 클릭합니다.

그 결과, NetBeans는 Grails 프로젝트와 Grails 애플리케이션에 대한 표준 디렉토리 구조를 생성합니다. 그림 3은 온라인 카탈로그 애플리케이션에 대한 Grails 디렉토리 구조를 보여줍니다.

 

사용자 삽입 이미지
그림 3. 온라인 카탈로그 애플리케이션용 Grails 디렉토리 구조

디렉토리 구조를 제 위치로 한 후에 다음을 수행합니다.

  1. 엔터티 파일을 app_name\src\java 디렉토리에 놓습니다. 여기에서 app_name은 Grails 애플리케이션의 이름입니다. 온라인 카탈로그 애플리케이션에 대한 ItemAddress 엔터티 파일은 catalog\src\java\model 디렉토리에 있습니다.
  2. MySQL jdbc 드라이버 mysql-connector-java-5.1.6-bin.jar을 찾아 app_name\lib 디렉토리에 놓습니다. 온라인 카탈로그 애플리케이션에 대한 mysql-connector-java-5.1.6-bin.jar 파일은 catalog\lib 디렉토리에 있습니다.
  3. MySQL을 데이터베이스로 사용하도록 app_name\grails-app\conf 디렉토리의 DataSource.groovy 파일을 수정하고 JPA 엔터티의 주석을 사용하도록 GrailsAnnotationConfiguration 구성 클래스를 지정합니다. 다음 코드 예제에 굵은 글꼴로 표시된 코드는 온라인 카탈로그 애플리케이션에 대한 DataSource.groovy 파일에 추가 및 수정한 부분입니다.
       import org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsAnnotationConfiguration
       dataSource {
           configClass = GrailsAnnotationConfiguration.class
       	   pooled = false
       	   driverClassName = "com.mysql.jdbc.Driver"
       	   username = "root"
       	   password =  ""
       	   dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
       }
       hibernate {
           cache.use_second_level_cache=true
           cache.use_query_cache=true
           cache.provider_class='com.opensymphony.oscache.hibernate.OSCacheProvider'
       }
       // environment specific settings
       environments {
       	development {
       		dataSource {
       			dbCreate = "create-drop" // one of 'create', 'create-drop','update'
       			url = "jdbc:mysql://localhost/petcatalog"
       		}
       	}
       	test {
       		dataSource {
       			dbCreate = "update"
       			url = "jdbc:mysql://localhost/petcatalog"
       		}
       	}
       	production {
       		dataSource {
       			dbCreate = "update"
       			url = "jdbc:mysql://localhost/petcatalog"
       		}
       	}
       }
    
     
  4. Grails가 JPA 엔터티를 도메인 클래스로 인식하도록 하려면 app_name\grails-app\conf\hibernate 디렉토리에 hibernate.cfg.xml 파일을 추가해야 합니다. 다음은 온라인 카탈로그 애플리케이션에 대한 hibernate.cfg.xml 파일입니다. 이 파일은 catalog\grails-app\conf\hibernate 디렉토리에 있습니다.
       <?xml version=""1.0" encoding="UTF-8"?>
       <!DOCTYPE hibernate-configuration PUBLIC
       		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
       		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
       <hibernate-configuration>
           <session-factory>
               <mapping package="model" />
               <mapping class="model.Item" />
               <mapping class="model.Address" />
           </session-factory>
       </hibernate-configuration>
    
     

컨트롤러

NetBeans IDE 6.5 M1에서는 도메인 클래스와 컨트롤러를 생성할 수 있지만 컨트롤러 생성을 위한 메뉴 옵션을 찾을 수 없어서 여기에서는 컨트롤러 생성을 위해 다음 명령줄을 사용합니다.

  1. 명령 프롬프트를 열고 Grails 애플리케이션의 프로젝트 디렉토리를 찾습니다. 위치를 잊은 경우에는 프로젝트의 Properties 대화 상자에서 확인할 수 있습니다.
  2. 다음 명령을 입력하여 도메인 클래스의 컨트롤러를 생성합니다.
       grails generate-controller domain-class
    
    여기에서 domain-class는 도메인 클래스 이름입니다. 예를 들어, Item 도메인 클래스의 컨트롤러를 생성하려면 다음과 같이 입력합니다.
       grails generate-controller model.Item
    

    그 결과, 명령은 grails-app/controllers 디렉토리에 domain-classController.groovy 파일을 생성합니다. Item 클래스의 경우, 생성된 컨트롤러는 grails-app/controllers/ItemController.groovy에 위치합니다.

그림 4는 NetBeans IDE 6.1 M1 Groovy 편집기 창에 ItemController.groovy 컨트롤러를 보여줍니다.

 

사용자 삽입 이미지
그림 4. 온라인 카탈로그 애플리케이션용 Grails 디렉토리 구조에 표시된 컨트롤러

컨트롤러는 수신되는 HTTP 요청을 처리하고 데이터 수신 및 요청 처리를 위해 모델과 상호 작용하며 올바른 뷰를 호출하고 표시를 위해 도메인 데이터를 뷰로 전송합니다. Grails에서 HTTP 요청은 요청 시 실행되는 하나 이상의 액션 메소드를 포함하는 컨트롤러 클래스가 처리합니다. 액션 메소드는 GSP(Groovy Server Page)를 렌더링하거나 다른 작업으로 전달합니다. Grails는 요청에 대한 URL 매핑에 해당하는 컨트롤러 작업으로 요청을 라우팅합니다. Grails에서, URL에서 액션 메소드로의 기본 매핑은 http://host/app_name/controller/action/id 규칙을 따릅니다. 여기에서 host는 호스트 이름, app_name은 Grails 애플리케이션 이름, controller는 컨트롤러 클래스, action은 액션 메소드, id는 전달된 매개 변수의 id입니다. 예를 들어, http://host/catalog/item/list URL은 항목 컨트롤러 클래스의 list 액션 메소드를 호출합니다. 다음은 list 메소드를 보여주는 ItemController.groovy 코드 일부입니다.

  import model.Item
  class ItemController {

      def index = { redirect(action:list,params:params) }

      // the delete, save and update actions only accept POST requests
      def allowedMethods = [delete:'POST', save:'POST', update:'POST']

      def list = {
          if(!params.max) params.max = 10
          [ itemList: Item.list( params ) ]
      }

Grails 스케폴딩(scaffolding)은 클래스의 개체 나열, 생성, 업데이트 및 삭제를 위한 일련의 표준화된 컨트롤러 액션 메소드를 제공합니다. 이들 표준화된 작업은 컨트롤러 논리 및 기본 뷰 GSP(Groovy Server Page)와 함께 제공됩니다. ItemControllerlist 작업은 항목 개체의 페이지 지정 목록과 함께 뷰를 렌더링합니다.

http://localhost:8080/catalog/item/과 같이 URL에 컨트롤러가 있지만 작업이 없을 경우, Grails는 index 작업을 기본값으로 합니다. ItemController 코드에서 index 액션 메소드는 list 액션 메소드로 전달합니다. list 액션 메소드는 데이터베이스의 item 테이블에서 가져온 item 개체의 ArrayList를 반환하는 Item.list() 메소드를 호출합니다. params.max에 지정된 숫자(이 경우는 10)보다 더 많은 개체가 테이블에 있을 경우, Grails는 자동으로 다음 및 이전 페이지 링크를 생성합니다. Grails 프레임워크는 자동으로 itemList 변수를 뷰에서 사용 가능하도록 합니다.

코드 실행 후 작업은 일반적으로 작업 및 컨트롤러 이름에 해당하는 views 디렉토리에 GSP를 렌더링합니다. 예를 들면, list 작업은 grails-app\views\item 디렉토리에 list.gsp GSP를 렌더링합니다.


뷰 계층은 웹 페이지 생성을 위해 컨트롤러가 제공한 도메인 개체의 데이터를 사용합니다. Grails에서 뷰는 GSP(Groovy Server Page)를 사용하여 렌더링됩니다. 뷰를 생성하려면 명령 프롬프트를 열고 Grails 애플리케이션의 프로젝트 디렉토리를 찾은 후에 다음 명령을 입력합니다.

   grails generate-views domain-class

여기에서 domain-class는 도메인 클래스입니다. 예를 들어, Item 도메인 클래스의 뷰를 생성하려면 다음과 같이 입력합니다.

   grails generate-views model.Item

그 결과, 명령은 도메인 클래스의 GSP를 생성합니다. 예: model.Item 엔터티의 create.gsp, edit.gsp, list.gsp< 생성합니다. code>를>

다음은 온라인 카탈로그 애플리케이션에 대한 list.gsp 파일의 일부입니다. 애완동물 이미지를 표시하기 위해 기본으로 생성되는 HTML 테이블 형식을 수정했습니다.

    <table>
      <thead>
        <tr>
          <g:sortableColumn property="name" title="Name" />
          <g:sortableColumn property="imagethumburl" title="Photo" />
          <g:sortableColumn property="price" title="Price" />
        </tr>
      </thead>
      <tbody>
        <g:each in="${itemList}" status="i" var="item">
        <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
          <td>
           <g:link action="show" id="${item.id}">
             ${item.name?.encodeAsHTML()}</g:link>
          </td>
          <td>
            <img src="${createLinkTo(dir:'images',file:item.imagethumburl)}"/>
          </td>
          <td>${item.price?.encodeAsHTML()}</td>
         </tr>
       </g:each>
      </tbody>
    </table>
  </div>

  <div class="paginateButtons">
    <g:paginate total="${Item.count()}" />
  </div>

뷰는 GSP 렌더링을 위해 필요한 데이터를 액세스하기 위해 컨트롤러가 설정한 인스턴스 변수를 사용합니다. GSP(Groovy Server Page)는 JSP 태그 라이브러리와 유사한 GroovyTagLib를 사용합니다. 태그는 list.gsp 코드에서 <g:로 시작합니다. 이들은 GroovyTag입니다. 다음은 list.gsp 코드의 일부 기타 요소와 GroovyTag의 요약입니다.

<g:sortableColumn>
테이블에서 정렬을 지원하기 위한 정렬 가능 열을 렌더링합니다.
<g:each in="${itemList}" status="i" var="item">
Item 모델 개체의 순서에 따른 ArrayListitemList 변수에서 각 개체를 루프하고 각각의 Item 모델 개체를 item 변수에 지정합니다.
<g:link action="show" id="${item.id}">${item.name?.encodeAsHTML()}</g:link>
지정된 작업, id 및 지정된 컨트롤러 매개 변수를 기반으로 HTML 앵커 태그 href를 생성합니다. 이 예제에서는 item/show/id 작업에의 링크를 생성합니다. 이 작업은 해당 항목의 세부사항을 표시합니다. 이 행은 item 변수에 대한 다음 HTML을 생성합니다.
   <a href="/catalog/item/show/2">Friendly Cat</a>
<img src="${createLinkTo(dir:'images',file:item.imagethumburl)}"/>
항목의
${item.price?.encodeAsHTML()}
항목의 가격 속성 값을 이스케이프 HTML 텍스트로 표시합니다.
<g:paginate total="${Item.count()}" />
도메인 메소드를 사용하여 결과에 페이지를 지정할 수 있도록 다음/이전 버튼 및 사이트 이동 경로를 생성합니다. < DD code>>

Show 액션 메소드

Grails에서, URL에서 액션 메소드로의 기본 매핑은 http://host/app_name/controller/action/id 규칙을 따르며 여기에서 host는 호스트 이름, app_name은 Grails 애플리케이션 이름, controller는 컨트롤러 클래스, action은 액션 메소드, id는 전달된 매개 변수의 id입니다. 이는 온라인 카탈로그 애플리케이션에서 http://host/item/show/1 URL이 ItemController의 보여주기 작업으로 라우팅하여 1을 매개 변수 id로 메소드에 전달함을 의미합니다. ItemController 클래스의 show 작업이 아래에 나와 있습니다. ItemController show 작업은 id 매개 변수에 해당하는 item 개체의 세부 사항을 보여주는 뷰를 렌더링합니다.

   def show = {
     def item = Item.get( params.id )

     if(!item) {
        flash.message = "Item not found with id ${params.id}"
        redirect(action:list)
     }
     else { return [ item : item ] }
   }

show 액션 메소드는 Item.get() 메소드를 호출합니다. 이 메소드는 items 테이블을 쿼리하고 속성 id(즉, 기본 키)가 id 매개 변수와 동일한 item에 해당하는 item 인스턴스 변수를 반환합니다. 이는 다음 SQL 문과 같습니다.

   select * from items where id='1'

Grails 프레임워크는 자동으로 item 변수를 Show 뷰에서 사용 가능하도록 합니다.

항목 보여주기 GSP

적절한 코드 실행 후 show 작업은 애플리케이션의 views/item 디렉토리에 show.gsp 파일을 렌더링합니다. 다음은 항목 보여주기 뷰를 나타내는 온라인 카탈로그 애플리케이션에 대한 show.gsp 파일의 일부입니다.

   <table>
     <tbody>
       <tr class="prop"">
         <td valign="top" class="name">Name:</td>
         <td valign="top" class="value">${item.name}</td>
       </tr>
       <tr class="prop">
         <td valign="top" class="name">Description:</td>
         <td valign="top" class="value">${item.description}</td>
       </tr>
       <tr class="prop">
         <td valign="top" class="name">Imageurl:</td>
         <td valign="top" class="value">
           <img src="${createLinkTo(dir:'images',file:item.imageurl)}" />
         </td>
       </tr>
       <tr class="prop">
         <td valign="top" class="name">Price:</td>
         <td valign="top" class="value"> ${item.price}</td>
       </tr>
       <tr class="prop">
         <td valign="top" class="name">Seller's Address:</td>
         <td valign="top" class="value">${item?.address?.street1},
         ${item?.address?.city}, ${item?.address?.state}</td>
       </tr>
      </tbody>
   </table>

다음은 항목 보여주기 뷰의 몇 가지 중요한 부분입니다.

${item.description}
항목의 설명 속성 값을 표시합니다.
<img src="${createLinkTo(dir:'images',file:item.imageurl)}" /> ${item.description}
항목의 imageurl 속성에 대한 HTML 이미지 태그를 생성합니다.
${item?.address?.city}
항목의 주소 도시 속성 값을 표시합니다.


샘플 코드 실행

이 지침은 NetBeans IDE 6.1, GlassFish v2ur2MySQL이 설치되어 있다고 가정합니다. 이들 모두를 하나의 번들로 다운로드 받을 수 있습니다. 또는 Sun Java System Application Server 9.1 업데이트 1과 MySQL 커뮤니티 서버를 포함하는 번들을 다운로드 받을 수도 있습니다.

  1. 다음과 같이 Grails용 GlassFish v2 플러그인을 설치합니다.
    • GlassFish 업데이트 센터를 시작하려면 GF_install\updatecenter\bin\updatetool 명령을 수행합니다.
    • GlassFish 업데이트 센터에서 GlassFish Support for Grails Framework 확인란을 선택하고 Install을 클릭합니다.
       
      사용자 삽입 이미지
  2. NetBeans IDE가 없으면 NetBeans IDE 6.5 M1을 다운로드하여 설치합니다.
  3. 샘플 코드를 다운로드하고 그 내용을 추출합니다. 이제 새로 압축이 풀린 <sample_install_dir>/catalog 디렉토리를 볼 수 있을 것입니다. 여기에서 <sample_install_dir>은 샘플 패키지의 압축을 푼 디렉토리입니다. 예를 들어, Windows 시스템에서 C:\ 디렉토리에서 압축을 풀었다면 새로 생성된 디렉토리는 C:\catalog입니다.
  4. NetBeans IDE 6.5 Milestone 1을 시작합니다.
  5. 다음과 같이 MySQL 데이터베이스를 시작합니다.
    • NetBeans IDE에서 Services 탭을 클릭합니다.
    • 데이터베이스 노드를 확장합니다. 데이터베이스 목록에 MySQL 서버 데이터베이스가 나타나야 합니다.
       
      사용자 삽입 이미지
    • MySQL 서버 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 Start를 선택합니다.
  6. 다음과 같이 petcatalog 데이터베이스를 생성합니다.
    • MySQL 서버 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 Create Database를 선택합니다.
    • 데이터베이스 이름을 petcatalog로 입력합니다. New Database Connection 창이 열립니다. O.K를 클릭하여 표시된 설정을 받아들입니다.
  7. 다음과 같이 MySQL petcatalog 데이터베이스에 테이블을 생성합니다.
    • 드라이버 노드를 확장합니다. 드라이버 목록에서 petcatalog 데이터베이스의 드라이버를 선택해야 합니다.
       
      사용자 삽입 이미지
    • petcatalog 드라이버를 마우스 오른쪽 버튼으로 클릭하고 Connect를 선택합니다.
    • petcatalog 드라이버를 마우스 오른쪽 버튼으로 클릭하고 Execute Command를 선택합니다. SQL 명령 창이 열립니다.
    • catalog 디렉토리에서 catalog.sql 파일의 내용을 복사하여 SQL 명령 창에 붙여 넣습니다.
    • SQL 명령 창 위의 Run SQL 아이콘 Run SQL 아이콘(Ctrl+Shift+E)을 클릭합니다.
  8. 다음과 같이 WAR 파일을 생성합니다.
    • catalog\grails-app\conf\DataSource.groovy 파일의 사용자 이름 및 암호 설정이 MySQL 서버 데이터베이스용 NetBeans IDE 6.5 M1의 해당 속성 설정과 동일한지 확인합니다.
    • Projects 창에서 카탈로그 노드를 마우스 오른쪽 버튼으로 클릭합니다.
    • Grails를 선택한 다음, Create war file을 선택합니다. 카탈로그 프로젝트 디렉토리에 catalog-0.1.war 파일이 생성됩니다. 설치한 Grails의 수준으로 조율하기 위해 애플리케이션의 예상 Grails 수준(catalog\application.properties 파일의 app.grails.version 설정)을 변경해야 할 수도 있습니다.
  9. catalog-0.1.war 파일을 GF_install/domains/domain1/autodeploy 디렉토리로 복사합니다. 여기에서 GF_install은 GlassFish를 설치한 디렉토리입니다.
  10. 아직 시작하지 않았으면 GlassFish를 시작합니다.
  11. 브라우저에서 URL http://localhost:8080/catalog-0.1/을 입력합니다. 샘플 애플리케이션의 홈페이지가 나타나야 합니다.
     
    사용자 삽입 이미지

추가 자료


저자 정보

Carol McDonald는 Sun Microsystems의 Java Technology Evangelist입니다. 1986년부터 소프트웨어 개발자로 일해 온 Carol은 자바 EE 기술, XML, 인터넷/인트라넷 애플리케이션, LDAP, 분산 네트워크 관리(CMIP, SNMP) 및 전자 메일(X.400, X.500)을 비롯한 분산 네트워크 애플리케이션 및 프로토콜 기술 분야에서 경력을 쌓아왔습니다. Carol은 Java 외에도 프랑스어와 독일어에 능통합니다.

1 이 웹사이트에 사용된 것처럼 "자바 가상 머신" 또는 "JVM"이란 용어는 자바 플랫폼용의 가상 시스템을 의미합니다. Ericsson 전화기를 받으세요.


이 글의 영문 원본은
Combining Groovy, Grails, MySQL, and the Java Persistence API
에서 보실 수 있습니다.

"Java EE" 카테고리의 다른 글

2008/08/20 17:06 2008/08/20 17:06

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/644

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 44 45 46 47 48 49 50 51 52  ... 641  Next ▶