JCF3 id

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : JCF3.0™ 공통모듈-id 관리 가이드
  • 작성자: 송희정
  • 작성일 : 2007/12/13

Copyright © 2007 Daewoo Information Systems Co., Ltd.

목차

[편집] 채번 관리

어플리케이션에서 일관되게 id나 번호 관리를 하기 위해 DB의 sequence를 사용하듯 어플리케이션 레벨에서 시퀀셜한 번호를 관리하도록 한다.

채번을 위한 테이블을 따로 두고, 각 어플리케이션의 모듈명과 현재 max id 값을 저장하도록 하며, 요청이 있을 때 번호를 1씩 증가시킨다.

[편집] 구조

Sequence 모듈은 단순하다. 모델은 테이블과 마찬가지로 모듈명을 위한 property와 id 값을 위한 property로 이루어져 있다.

그림:Sequence model.jpg

SequenceDao는 두 개의 메소드가 있다.

  • getNextId(String name):단순하게 일련번호로 id를 처리하는 경우 사용
  • getNextId(String name, String prefix):일련번호의 앞에 특정 코드를 붙여 id 관리하는 경우 사용

그림:Sequence dao model.jpg

[편집] 테이블 생성

SEQUENCE라는 테이블을 생성한다. 이 테이블은 두 개의 컬럼을 가지며 각 컬럼은 다음과 같다.

  • NAME : 모듈명, varchar2(30)
  • NEXT_ID : 현재 MAX ID 값, number
 CREATE TABLE SEQUENCE(
   NAME varchar2(30) PRIMARY KEY NOT NULL,
   NEXT_ID number(10) NOT NULL);

[편집] Application 설정

Sequence dao와 statement xml은 jar내에 포함되어 있으므로 이를 사용하기 위해 다음과 같이 Applicationcontext파일에 추가하도록 한다.

[편집] ApplicationContext

	<bean id="sequenceDAO" class="jcf.commons.id.dao.SequenceDaoIbatis">
		<property name="sqlMapClient"><ref local="sqlMapClient"/></property>
	</bean>

[편집] sqlmap-config.xml

<sqlMapConfig>
...
  <sqlMap resource="jcf/dao/sqlmap/sql/Sequence.xml"/>  
...
</sqlMapConfig>

[편집] Sample Code

  • 채번 모듈을 사용하기 위해서는 Service 클래스에 private 속성으로 SequenceDao를 선언하고, 이에 대한 setter 메소드를 구현한다.

그림:bbs service.jpg

[편집] ApplicationContext

  • Service 클래스의 ApplicationContext bean 선언시 sequenceDao를 누락시키지 않도록 주의한다.
	<bean name="bbsService" class="jcf.bbs.service.BBSService">
		<property name="bbsDao" ref="bbsDao" />
<property name="sequenceDao" ref="sequenceDao" />
<property name="fileDao" ref="fileDao" /> </bean>

[편집] Service 에서의 호출

  • private 변수 선언
  • setSequenceDao 메소드 생성
  • sequenceDao.getNextId 메소드를 호출하고 parameter로 고유한 모듈명 넘김
public class BBSService {
	private BBSDao bbsDao;
private SequenceDao sequenceDao;
private AttachmentManager attachmentManager;

private IFileDao fileDao;   public int insertBBS(BBS bbs) throws ParseException { int id = 0; int attachmentId = 0;

id = sequenceDao.getNextId("bbs");
bbs.setId(id);

bbs.setParentId(id); List files = bbs.getFiles(); if ((files != null) && (files.size() > 0)) { attachmentId = sequenceDao.getNextId("attachment"); bbs.setAttachmentId(Integer.toString(attachmentId)); } bbsDao.insertBBS(bbs); if ((files != null) && (files.size() > 0)) { attachmentManager.saveFileInfo(files, attachmentId); } return id; }   public void setBbsDao(BBSDao bbsDao) { this.bbsDao = bbsDao; }   public void setFileDao(IFileDao fileDao) { this.fileDao = fileDao; }  

public void setSequenceDao(ISequenceDao sequenceDao) {
this.sequenceDao = sequenceDao;

}   public void setAttachmentManager(AttachmentManager attachmentManager) { this.attachmentManager = attachmentManager; }  

...