'hsqldb'에 해당되는 글 5

  1. 2011.02.11 HSQLDB
  2. 2010.08.16 Eclipse에서 Ant로 HSQLDB 사용하기
  3. 2009.08.08 Spring 2 + JPA + Tomcat
  4. 2009.06.10 JPetStore 설치 - iBatis
  5. 2009.04.06 Grails - 서버 재시작시 데이터 삭제되지 않게 하기

HSQLDB

http://hsqldb.org/doc/2.0/guide/running-chapt.html

1. HyperSQL Database 에는 데이터를 저장하는 형태에 따라 세가지 종류의 catalog가 있다.
  • mem:
  • file:
  • res:

2. 데이터에 접근하는 방식은 두가지가 있다.

2.1. In-Process 방식
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:mymemdb", "SA", "");

2.2. Server Modes

2.2.1. HyperSQL HSQL Server
java -cp hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
java -cp hsqldb.jar org.hsqldb.server.Server --database.0 mem:mydb --dbname.0 xdb

2.2.2. HyperSQL HTTP Server
java -cp hsqldb.jar org.hsqldb.server.WebServer --database.0 file:mydb --dbname.0 xdb

2.2.3. HyperSQL HTTP Servlet

2.2.4. Database Server에 접근하는 방법
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "SA", "");
Connection c = DriverManager.getConnection("jdbc:hsqldb:http://localhost/xdb", "SA", "");

3. 데이터베이스 종료 시키기
반드시 SHUTDOWN 명령이나 쿼리를 실행시켜서 종료시킬 것.
아니면 연결 문자열에 속성을 지정한다.[각주:1]
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb;shutdown=true", "SA", "");

In-Process, file: 카타로그로 실행시킨 경우 shutdown으로 정상종료시키지 않으면 script 파일에 기록되지 않는다.

  1. 이 옵션은 아마 1.8부터 될거야. [본문으로]

Eclipse에서 Ant로 HSQLDB 사용하기

간단한 테스트 데이터베이스로 사용하기에 이놈보다 좋은게 어디있겠냐.
예전 Tutorial에서 가져옴.
원출처는 여기
devlib.dir=res/devlib

db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:hsql://localhost
db.name=baseball
db.username=sa
db.password=

Spring 2 + JPA + Tomcat

- 스프링 2와 JPA 시작하기

* 도메인 분석을 수행함
* 비즈니스 객체와 서비스를 구현함
* 비즈니스 객체에 대한 단위 테스트
* 스프링 JPA를 사용해 비즈니스 객체에 데이터 접근 코드 쉽게 추가
* 스프링 DAO(Data Access Object)를 사용해 서비스 구현
* DB2® Express-C와 연동한 서비스에 대한 통합 테스트 코드 작성
* 사용자 인터페이스에 기반을 둔 스프링 Model-View-Controller(MVC)를 위한 컨트롤러 생성
* 사용자 인터페이스를 위한 뷰(view) 디자인
* 애플리케이션을 위한 배치 가능한 WAR 파일 생성
* 아파치 톰캣(Apache Tomcat) 서버에 애플리케이션을 구성하고 배치함

- 도메인 모델 분석
직원엔터티에서 주소를 분리한다.
오퍼레이션을 정의한다.
Employee.java 에서 setEmpid() 를 제거한다.(JPA 에 의해서 관리된다.)

- JPA 어노테이션에 대한 설명
Employee와 Address 인스턴스가 일대일 관계(@OneToOne(casecade=CascadeType.ALL)) 어노테이션으로 기술되어)를 맺고 있는 것을 기억하자. 이 어노테이션은 Employee 객체를 대상으로 하는 모든 엔티티 매니저 오퍼레이션이 그 객체와 관련된 Address 객체에도 영향을 준다는 것을 의미한다. 이 말은 RDBMS에 Employee 기록을 추가하는 어느 작업이든지 그에 대응하는 Address 기록도 만들어지는 것을 뜻한다. 이것은 RDBMS에서 종종 찾을 수 있는 연속되는 삭제 참조 무결성 개념의 확장된 개념이라 보면 되겠다.

- HSQLDB 이용, DB2 로 변경

- RDBMS로 수행하는 DAO 통합 테스트 작성하기

- SpringMVC

- 스프링 2를 위해 톰캣 준비하기
   1. 톰캣에 스프링 2 클래스로더 추가 : server/lib/spring-tomcat-weaver.jar, META-INF/context.xml
   2. 톰캣에 스프링 2 컨텍스트 로더 리스너(context loader listener) 추가
   3. 톰캣에 DB2 JDBC 드라이버 복사
   4. 톰캣을 위해 JNDI DB2 데이터소스 구성

- 참고
스프링 2와 JPA 시작하기 - 에러해결
Spring -JPA-Tomcat

[todo] 이거 설정만 바꾸면 다른 JPA 구현체로 바꿀수 있나?(2.0에서는 다른 구현체를 지원하지 않음. 2.5 는 에러남. 결국은 에러를 해결해야 하는데...)
[todo] 직접 해보기...금방될거야

JPetStore 설치 - iBatis

- JPetStore-5.0/build/wars/jpetstore.war 로 배포할 수 있다.
또는
- Eclipse에서 구동시키기
  1. Dynamic Web Project 를 생성한다.
  2. Import
        src : JavaSource
        web : WebContent
        lib : WebContent/WEB-INF/lib

- 기본 설정이 hsqldb로 되어 있으므로 추가적인 설정이나 데이터베이스 없이 바로 구동할 수 있다.

- 다른 데이터베이스로 변경하는 경우에는
  1. JPetStore-5.0/src/ddl/ 의 스크립트를 사용하여 테이블을 생성하고 데이터를 입력한다.
  2. WEB-INF/classes/properties/database.properties 를 설정한다.
  3. Item.xml에서 getItem의 쿼리를 수정한다. : itemid 가 명확하지 않아 에러가 발생하므로 v.ITEMID로 변경한다.

Grails - 서버 재시작시 데이터 삭제되지 않게 하기

> grails prod run-app //prodDb.script 에 데이터가 저장된다.
grails-app/conf/DataSource.groovy에서 development 설정을 production 과 동일하게 둔다.
hsqldb를 사용하므로 파일에 저장되도록 한다.
dbCreate = "create-drop" //update 로 수정한다.
url = "jdbc:hsqldb:mem:devDB" //jdbc:hsqldb:file:devDB;shutdown=true 로 수정한다. devDB.script 에 데이터가 저장된다.

또는 서버 시작시 데이터를 넣는다.
conf/BootStrap.groovy
class BootStrap {

    def init = { servletContext ->
        new Book(author:"Stephen King",title:"The Shining").save()
        new Book(author:"James Patterson",title:"Along Came a Spider").save()
    }
    def destroy = {
    }
}

- 참고 : each문 사용




class BootStrap {

    def init = { servletContext ->
        if(GrailsUtil.environment == "development"){

            new Tag(name:"Work").save()
            new Tag(name:"Home").save()
            new Tag(name:"Study").save()

            def admin = new User(userId:"admin", password:"grails").save()
            def testUser = new User(userId:"test", password:"test").save()
            def testUser2 = new User(userId:"testA", password:"test").save()

            (1..11).each{
                new Entry(title:"$it", content:"content$it", user:admin).save()
            }
            new Entry(title:"test", content:"content", user:testUser).save()
            new Entry(title:"123", content:"456", user:testUser2).save()
        }
    }
    def destroy = {
    }
}