Embed
Email

2.JDWAP - Google Code

Document Sample

Shared by: ajizai
Categories
Tags
Stats
views:
0
posted:
12/5/2011
language:
English
pages:
53
JDesigner® Web Application Development Platform



Document for Developer & Architect



Version 1.0.0









Sangboo Lee (leesangboo@gmail.com)

Contents

1. JDesigner® Web Application Development Platform Summary

2. Install And Configuration

3. IDE(Eclipse) Integration And Project Setting

4. Web Application Development Using Framework

A. Web Framework

- Overview And Class Diagram

- MVC Development Using Struts 1.3.10 Extension Framework

- JAVA 1.5 Annotation Configuration

- Web Domain Example

- Framework Tag Library

- Mootools 1.4.2 & Java Script UI Widget

- Create View Using Java Script Framework And UI Widget And Tag library

- Internationalize / i18n

- Theme

- Filters

B. DB Framework

- Overview And Class Diagram

- PersistenceManager API

- Select Query Using NamedQuery

- Insert/Update/Delete Query Using TableQuery

- Management Transaction

- Database Provider

C. Utilities

- StringUtils

- DateUtils

- FileUtils

- Etc

5. Reusable Common Service Components

6. Web Application Template Introduction

7. Best Practices

1. JDesigner® Web Application Development Platform 소개



JDesigner(R) Web Application Development Platform(이하 JDesigner) 는 웹 프레임워크(Extends

Struts) 및 UI 프레임워크(AJAX Enabled Custom Tag Library), 재사용 가능한 공통 서비스

컴포넌트(Reusable Common services out-of-box), 어플리케이션 템플릿 그리고 통합된 Eclipse IDE,

CBD(Component Based Development) 방법론 지원으로 표준 J2EE 어플리케이션 개발 프로젝트를

5 분 이내에 바로 시작 가능하게 합니다. JDESIGNER 는 J2EE 엔터프라이즈 어플리케이션

빠르고 쉬우며 안정성, 확장성, 성능, 가용성 있는 국제 표준(Global Standard)에 부합하는 개발을

가능하게 합니다. JDESIGNER 지속적으로 업그레이드가 가능하고, 플랫폼 설계 유형 (시스템 O/S

및 클라이언트의 브라우저 환경) 에 따른 의존성이 없어 유연성이 뛰어 납니다. JDESIGNER 는

빠르게 변화하는 비즈니스 프로세스, 빠른 납기주기, 낮은 개발 비용을 요구하는 산업용

어플리케이션을 Rapid 하게 개발할 수 있는 최적의 솔루션을 제공합니다.





A) JDesigner Architecture









요약

1.Struts 기반의 웹 프레임워크는 학습이 쉬우며, 빠르고 안전한 웹 어플리케이션을 개발할 수

있도록 합니다. 이는 MVC 패턴의 구현, POJO 기반의 개발, 폼 검증, 다중 전송 검증, 보안(보안

가이드라인 준수),국제화 (i18n), 테마 기능 등 현 시대가 요구하는 웹 프레임워크의 기능을 모두

이용 가능하며, 추가 기능을 플러그인 형태로 적용 (Adapt) 가능하게 합니다.데이터 악세스

프레임워크(Extends Commons DBUtils )는 Named Parameter Statement 기반의 Native SQL 을 적극

활용 할 수 있으며, 자동화된 SQL 생성을 통한 테이터 핸들러 구성이 편리하며, 분산

트랜잭션(Distribute Transaction)을 지원하여 분산환경의 이기종 데이터베이스에서도 사용

가능하여 Persistence Layer / DAO 개발 생산성을 향상시킵니다.





2.재사용한 가능한 서비스 컴포넌트는 컴포넌트의 조합으로 신규 모듈을 빠르게 개발 가능하게

하며, 테스트 및 유지/보수 비용을 감소시킬 수 있습니다.





3.웹 UI 프레임워크는 Composite View Pattern 의 구현을 위해 Template 기반 AJAX 통합 JSP

Tag Library 를 사용하여 다이나믹 하고 일관성 있는 UI 를 빠르게 구성할 수 있어 사용자

친화적인 사용자 경험(UX:User Experience) 을 가능하게 합니다.









제공되는 기능





프레임워크:





 혁신적인 생산성을 보장하는 Web Application Framework

 Zero Risk, Zero Cost, Zero Learning Curve

 Apache Struts 기반의 확장 Framework

 POJO 기반의 개발

 테마 및 국제화(i18n) 지원

 Template 기반의 JSP Tag Library 와 통합된 AJAX UI Widget Set 제공

 Grid, Chart, Table, Window, Dialog, Alerts, Tab, Tree, Panel, Portlet, Single/Multi File Upload

등 다양한 웹 UI 컴포넌트 제공

 심플한 설정 관리

 혁신적인 DAO 개발 생산성을 위한 SQL Mapper Framework 제공

 단순하고 직관적인 Profiling/Monitoring 도구 제공





재사용 가능한 공통 서비스 컴포넌트:





 공통코드 : 응용프로그램에서 사용되는 공통 코드 관리 컴포넌트

 사용자 : 사용자의 정보 및 권한을 관리하는 컴포넌트

 메뉴 : 웹 어플리케이션의 메뉴 관리 및 메뉴에 대한 접근 권한, 자동 BreadCrumbs 관리

컴포넌트

 보안 : Role 기반의 권한 관리 및 URL/Menu 에 대한 접근 권한 관리 컴포넌트

 국제화(i18n) : 국제화 관련 컴포넌트

 Excel : MS Excel Read & Export 관련 컴포넌트

 File Upload : File Upload 관련 컴포넌트

 Scheduling : 배치성 Job 실행을 위한 Scheduling 컴포넌트

 Cache : 캐쉬 컴포넌트

 Mail : Send Mail 컴포넌트

 FTP : FTP 컨트롤 컴포넌트









버전



Version Note



3.0.0 Java 1.5 Annoation 및 추가 기능 개선

2. Install And Configuration(설치 및 환경설정)

- 이 페이지에서는 JDesinger를 설치하고, 환경 설정을 하는 방법에 대해 알아봅니다.









가) Install





1. JDesinger 설치에 앞서 아래 필수 프로그램 조건을 확인하십시오. 설치되지 않은 프로그램은

URL 을 참조하여 다운로드 받으셔서 설치하십시오.









필수 프로그램 및 버전(사양)

프로그램 URL 비고

Windows 2000/XP/Vista/7

J2SE 1.4 + http://java.sun.com

Oracle Client 9i + http://www.oracle.com









2. 위 필수 프로그램을 모두 설치하셨으면, 아래 주소를 참조하여 JDESIGNER 팩키지를 다운로

드 하십시오.

구글코드: http://code.google.com/p/jdesigner-platform/downloads/





3. 다운로드 된 ZIP파일을 [C:/] 디렉토리에서 압축해제 하십시오. 압축 해제가 완료되면

[C:/JDesigner/] 디렉토리가 생성되며 그안에 [server, store, tool, workspace] 이름의 4개의 디렉토

리가 존재 합니다.





디렉토리 명 설명

server Tomcat 5.5 Server (JOTM JTA Enabled)

store 저장소 (File, Temp, Log 등)

tool Eclipse IDE

workspace Framework/Common Service/Web Application Template In Eclipse

Workspace

4. 위 과정으로 설치가 모두 완료되었으며, 이클립스(C:/JDesigner/tool/eclipse/eclipse.exe)를 실행

하여 Workspace에 오류가 없는지 확인합니다.

A) Eclipse Workspace









나) Configuration





1. 설치가 완료되었으며, 웹 어플리케이션 템플릿 실행을 위한 환경을 설정합니다.





설정해야 할 설정 파일 목록(*:필수 수정 파일)

/WEB-INF/classes/ 에 설정해야 하는 파일

설정 파일명 Description

*platform.properties 프레임워크 기본 설정 파일

commons-logging.properties Commons Logging 설정 파일

document.properties 문서 관련 설정 파일

drm-serverinfo.properties DRM 서버 관련 설정 파일

ehcache.xml EHCache 기본 설정 파일

*log4j.properties Apache Log4j 설정 파일

logging-jdbc-oracle.properties Log Database 저장 설정 파일

oracle-sso.properties Oracle Single Sign On 관련 설정파일

template-service.properties 공통 서비스 관련 설정 파일

/WEB-INF/ 에 설정해야 하는 파일

cache-config.xml 캐쉬 설정 파일

scheduler-config.xml 스케쥴러 설정 파일

security-config.xml 보안 설정 파일

web.xml web.xml

2. 먼저 프레임워크 설정 파일인 [platform.properties]를 수정합니다.

(위치: C:\JDesigner\workspace\plms-template-web\src\JDesigner.properties)





A) Web Properties

Property Default Value Description

platform.web.parameter. UTF-8 Request/Response Parameter Encoding

encoding

platform.web.i18n.local ko Client의 Default Locale

e

platform.web.theme.them design Client의 Default Theme

e

platform.web.multipart. 100M Multipart 파일 업로드 : 최대 업로드 가능한

maxsize

파일 사이즈

platform.web.multipart. 250K Multipart 파일 업로드 : Threshold Sizes

thresholdsize

platform.web.multipart. C:/JDesigner/stor Multipart 파일 업로드 : 파일 저장소

repository

e/file

platform.web.multipart. .jsp,.java.,.exe,.sh Multipart 파일 업로드 : 업로드 제한 파일

limittype

확장자 명





B) Database Properties

Property Default Value Description

platform.db.database Oracle 데이터 베이스 제품 명

platform.db.datasource. jdbc/OracleDataS WAS에 설정된 DataSource JNDI 명

jndi

ource

platform.db.transaction Java:comp/UserT WAS에 설정된 UserTransaction JNDI 명

.jta.jndi

ransaction

platform.db.transaction JDBC 트랜잭션을 관리하는 타입 / JDBC일 경우

.type

Connection으로 트랜잭션 관리

JTA일경우 UserTransaction으로 트랜잭션

관리

platform.db.transaction 2 트랜잭션 격리 레벨

.isolation

NONE = 0

READ_UNCOMMITTED = 1

READ_COMMITTED = 2

REPEATABLE_READ = 4

SERIALIZABLE = 8

platform.db.query.xml.b SQL XML을 파일을 찾는 기본경로

asepath

platform.db.table.schem PORTALM 테이블 기본 스키마

a

platform.db.sql.logging true SQL 로깅 여부

platform.db.sql.cache true SQL 캐쉬 여부





C) Data Properties

Property Default Value Description

platform.data.number.gr false 숫자형일 경우 3자리마다 ,를 찍어줄지 여

ouping



platform.data.pattern.d yyyy-MM-dd 기본 날짜 포맷

ate

platform.data.pattern.t HH:mm:ss 기본 시간 포맷

ime

platform.data.pattern.d yyyy-MM-dd 기본 날짜/시간 포맷

atetime

HH:mm:ss









3. 로그 관련 설정 파일 [commons-logging.properties / log4j.properties]을 환경에 맞게 수정하십시

오.

(Common Logging 설정 파일위치: C:\JDesigner\workspace\plms-template-web\src\commons-

logging.properties

Log4j 설정 파일위치: C:\JDesigner\workspace\plms-template-web\src\log4j.properties)





- Common Logging Properties





logger=org.apache.commons.logging.impl.Log4JLogger

logger.configuration.name=log4j.configuration

logger.configuration.value=log4j.properties









- Log4j Propeties

### CONSOLE 에 로그 출력 설정###

log4j.appender.info=org.apache.log4j.ConsoleAppender

log4j.appender.info.Target=System.out

log4j.appender.info.layout=org.apache.log4j.PatternLayout

log4j.appender.info.layout.ConversionPattern=

[%X{process_id}] [%X{username}] [%p] [%C:%L]- %m%n



log4j.appender.debug=org.apache.log4j.ConsoleAppender

log4j.appender.debug.Target=System.out

log4j.appender.debug.layout=org.apache.log4j.PatternLayout

log4j.appender.debug.layout.ConversionPattern=

[%X{process_id}] [%X{username}] [%p] [%C:%L]- %m%n



log4j.appender.warn=org.apache.log4j.ConsoleAppender

log4j.appender.warn.Target=System.err

log4j.appender.warn.layout=org.apache.log4j.PatternLayout

log4j.appender.warn.layout.ConversionPattern=

[%X{process_id}] [%X{username}] [%p] [%C:%L]- %m%n



### FILE 파일에 로그 정보 저장 설정###

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

log4j.appender.file.File=c:/jdesinger-platform/store/log/jdesigner-

web.log

log4j.appender.file.Append=true

log4j.appender.file.DatePattern='.'yyyy-MM-dd

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=

[%X{process_id}] [%X{username}] [%p] [%C:%M:%L]- %m%n





### JDBC 데이터베이스에 로그 정보 저장 설정###

log4j.appender.jdbc=org.apache.log4j.jdbcplus.JDBCAppender

log4j.appender.jdbc.connector

=org.jdesigner.application.template.logging.OracleConnectionHandler

log4j.appender.jdbc.sqlhandler=org.jdesigner.application.template.loggin

g.OracleSQLHandler

log4j.appender.jdbc.dbclass=oracle.jdbc.driver.OracleDriver

log4j.appender.jdbc.buffer=1

log4j.appender.jdbc.commit=true

log4j.appender.jdbc.layout=org.apache.log4j.PatternLayout

log4j.appender.jdbc.layout.ConversionPattern=%m



### MAIL 에러 로깅시 메일 발송 설정###

log4j.appender.mail=org.apache.log4j.net.SMTPAppender

log4j.appender.mail.Threshold=ERROR

log4j.appender.mail.BufferSize=512

log4j.appender.mail.SMTPHost=127.0.0.1

log4j.appender.mail.From=logging@gamil.com

log4j.appender.mail.To=leesangboo@gmail.com

log4j.appender.mail.Subject=[DDMS] Log4j Error Report

log4j.appender.mail.layout=org.apache.log4j.PatternLayout

log4j.appender.mail.layout.ConversionPattern=

[%X{process_id}] [%X{username}] [%p] [%C:%M:%L]- %m%n





## LAYOUTS ##

# assign a SimpleLayout to console appender

log4j.appender.console.layout=org.apache.log4j.SimpleLayout



### set log levels - for more verbose logging change 'info' to 'debug'

### , jdbc

log4j.rootLogger=warn, info

- Log4j MDC Filter 설정시 아래의 추가 로그 정보를 Logging할 수 있습니다.

Log4jMDCFilter 정보는 목차에서 Filter 섹션을 참조하십시오.

Property Description

%X{jsession_id} HTTP 세션 - JSESSION_ID

%X{remorte_host} 접속자의 호스트

%X{remorte_address} 접속자의 IP

%X{username} 접속자의 유저명(로그인ID)









5. 설정 완료 후, Eclipse에서 Tomcat 서버를 시작하십시오.

시작 후 Console에서 아래 로그를 확인하면 정상적으로 응용 프로그램이 실행 된 것입니다.





A)서버 시작









B)Console 메시지 확인









6. 웹 응용프로그램 템플릿 URL[http://localhost:8080/template/]이 정상적으로 호출되는지 확인합

니다.

1)웹 템플릿 로그인 페이지









3. IDE(Eclipse) Integration And Project Setting

- 이 페이지에서는 JDESIGNER를 Eclipse와 통합하고, 프로젝트를 설정하는 방법에 대해 알아봅

니다.

기본적으로 JDESIGNER는 Eclipse와 통합된 형태로 배포되고 있으나, 프로젝트 특성에 따라

조정할 부분에 대한 추가 설명입니다.







가) IDE(Eclipse) Integration





1. Eclipse를 실행하십시오. 기본 작업 환경을 [JavaEE] 퍼시펙티브로 설정하면, 왼쪽 네비게이션

[Project Explorer]에 4개의 프로젝트가 표시 됩니다.



A)Project Explorer

B)Project Description Table

Project Description

jdesigner-application J2EE 어플리케이션 프로젝트

jdesigner-codegenerator-web 코드 제너레이터 프로젝트

jdesigner-lib 의존 라이브러리 묶음 프로젝트

Jdesigner-platform 플랫폼(프레임워크) 프로젝트

Jdesigner-template-service 공통 기술 서비스 프로젝트

Jdesigner-template-sql 기본 테이블 및 데이터 생성 SQL 프로젝트

Jdesigner-template-web 웹 템플릿 프로젝트

Servers 서버(Tomcat 5.5) 설정 프로젝트







나) Project Setting



1. 프로젝트 표준에 근거하여 아래 설정 사항들을 조정하십시오. Server 프로젝트를 제외한

7개의 프로젝트가 대상입니다.

- Code Formatter 설정

- Java Complier 설정

- Project Facets 설정

- Project Reference 설정

- Target Runtime 설정

- Validation 설정

4. Web Application Development Using Framework

- 이 페이지에서는 Framework를 사용하여 웹 어플리케이션을 개발하는 방법에 대해 설명합니다.

Framework는 내부적으로 Web Framework 및 Database(Persistence) Framework로 나눠집니다.





JDESIGNER / Framework Technologies Stack

---------------------------------------------------------------------------------------------------------

- Apache Struts 1.3.10 MVC Framework

- Mootools 1.4.2 Java Script Framework

- Freemaker Template Engine

- Apache Commons

- EHCache







가) Web Framework







A. Overview And Class Diagram



1. JDESIGNER의 Web Framework는 Apache Struts 1.3.10을 확장한 프레임워크입니다.





A) Class Diagram

B) Sequence Diagram

B) Web App Process Flow

B. MVC Development Using Struts 1.3.10 Extension Framework





1. JDESIGNER의 Web Framework는 Apache Struts 1.3.10을 확장하여 단점을 보완하였습니다.

JDESIGNER는 POJO기반의 개발, 쉬운 데이터 바인딩, 클라이언트&서버사이드 검증,

레이아웃(Tiles). 국제화(i18n), 테마 기능을 제공합니다.





A) Class Diagram









B)MVC 개발 순차





1) Configuration Struts

- Base (기본 Struts의 액션 설정 및 Tiles의 기본 View 설정을 합니다.)

/WEB-INF/config/base-*.xml

































































































































































-->































-----------------------------------------------------------------------------------------------------------



















































































































































































































































































































































2) ActionBean (Front Controller) Code Example

-------------------------------------------------------------------------------------------------------------

package …;



import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;





import org.JDesigner.common.util.DateUtils;

import org.JDesigner.common.web.fileupload.MultiFileUpload;

import org.JDesigner.common.web.fileupload.SingleFileUpload;

import org.JDesigner.common.web.form.Form;

import org.JDesigner.common.web.form.FormMode;

import org.JDesigner.common.web.form.InputsList;

import org.JDesigner.common.web.grid.Grid;

import org.JDesigner.common.web.json.JSONResult;





import org.jdesigner.application.template.service.test.TestService;

import org.jdesigner.application.template.web.BaseActionBean;





/**

* TestBean

*

* @author SangBoo Lee

* @date 2010. 1. 27.

* @since 1.0

*

*/

public class TestBean extends BaseActionBean {





private static final long serialVersionUID = 1L;





private static final Log log = LogFactory.getLog(TestBean.class);





private TestService test_service;





private Form form;

private Form search;

private Grid grid;

private InputsList list;

private JSONResult json;





private SingleFileUpload sfile;

private MultiFileUpload mfile;





public TestBean(){

init();//

}





public void init() {

//

log.info("ActionBean[" + this.getClass() + "] initialize...");

//

test_service = new TestService();

//

search = new Form();

form = new Form();

list = new InputsList();

grid = new Grid();

json = new JSONResult();

//

sfile = new SingleFileUpload();

mfile = new MultiFileUpload();

}





public void reset() {

search.put("from_insert_date", DateUtils.getToDate());

search.put("to_insert_date", DateUtils.getToDate() );

}





public String index() throws Exception {

reset();

return SUCCESS;

}





public String grid() throws Exception {

grid = new Grid(test_service.selectTestPage(search, grid.getStart(), grid.getRange(), grid.getSort(),

grid.isDesc()));

return Grid.FORWARD;

}





public String add() throws Exception {

form.setMode(FormMode.INSERT);

return SUCCESS;

}

public String edit() throws Exception {

form = new Form(test_service.selectTestMap(form));

form.setMode(FormMode.UPDATE);

return SUCCESS;

}





public String insert() throws Exception {

test_service.insertTest(form);

//

super.setServerMessage("common.insert.success");

init();

return SUCCESS;

}





public String update() throws Exception {

test_service.updateTest(form);

//

super.setServerMessage("common.update.success");

init();

return SUCCESS;

}





public String delete() throws Exception {

test_service.deleteTest(form);

//

super.setServerMessage("common.delete.success");

init();

return SUCCESS;

}





public String apiTest() throws Exception {





//Form 처리

form.getString("username");

form.getInt("age");

form.print();





//InputArrays 처리

log.info("inputs list=" + list.toString());

list.print();





//JSON 결과 설정

json.setStatus(JSONResult.SUCCESS);

json.setMessage(",,,,,");

json.put("my_key", "my_value");





log.error("my_error!!!!!!");





//

return SUCCESS;

}





/**

* @return the search

*/

public Form getSearch() {

return search;

}





/**

* @param search the search to set

*/

public void setSearch(Form search) {

this.search = search;

}





/**

* @return the form

*/

public Form getForm() {

return form;

}





/**

* @param form the form to set

*/

public void setForm(Form form) {

this.form = form;

}





public Grid getGrid() {

return grid;

}





public void setGrid(Grid grid) {

this.grid = grid;

}





public TestService getTest_service() {

return test_service;

}





public void setTest_service(TestService testService) {

test_service = testService;

}





public InputsList getList() {

return list;

}





public void setList(InputsList list) {

this.list = list;

}





public JSONResult getJson() {

return json;

}





public void setJson(JSONResult json) {

this.json = json;

}





public SingleFileUpload getSfile() {

return sfile;

}





public void setSfile(SingleFileUpload sfile) {

this.sfile = sfile;

}





public MultiFileUpload getMfile() {

return mfile;

}





public void setMfile(MultiFileUpload mfile) {

this.mfile = mfile;

}





}

-------------------------------------------------------------------------------------------------------------

















































































































































































































B-1). JAVA 1.5 Annotation 활용





1) 3.0.0 버전부터 JAVA 1.5 Annotation 을 사용하시면 XML 설정 없이 빠르고 직관적인 코딩

가능합니다.

예제)

@Action(path = "/annotation/index")

@Forward(name = View.SUCCESS, layout = ".main.layout", content =

"/introduction/index.jsp")

public String index() throws Exception {

//Here Your Logic

return View.SUCCESS;

}







C. Web Domain Example



1. JDESIGNER의 웹 UI와 쉽게 데이터 바인딩 가능한 Web Domain을 제공합니다.





Class Description

Org.JDesigner.common.web.form.For Form 전송과 Binding되는 도매인

m

Org.JDesigner.common.web.form. List 형태의 전송과 바인딩되는 도매인

InputsList

Org.JDesigner.common.web.grid. Grid와 Binding 되는 도매인

Grid

Org.JDesigner.common.web.json. JSON결과값 전달과 바인딩 되는 도매인

JSONResult

Org.JDesigner.common.web.fileuplo 1개 파일 업로드와 바인딩 되는 도매인

ad. SingleFileUpload

Org.JDesigner.common.web.fileuplo 멀티 파일 업로드와 바인딩 되는 도매인

ad. MultiFileUpload









D. Framework Tag Library

1. JDESIGNER는 Struts Tag Extension Tag 및 Composite UI 구성을 위한 Custom tag

Library를 제공합니다.

- JDesigner-html-ex.tld

Class Description

HTML Form확장 태그, Client Validation 옵션을 제공합니다.

HTML Text 확장 태그, Mask 및 검증 추가 옵션을 제공합니다.



HTML Text 의 숫자형 확장 태그, Number 포맷 및 검증 옵션을 제공합니

다.

HTML Text 의 달력형 입력의 포맷 및 검증, 달력 선택기 옵션을 제공합

니다.

HTML Text 의 금액형 입력의 포맷 및 검증 옵션을 제공합니다.







- JDesigner-ui.tld

Class Description

JavaScript 구문 코드 커버를 생성합니다.

Framework 사용에 필요한 스타일 쉬트 및 자바스크립트를

삽입합니다.





Theme에 해당하는 Image를 표시합니다.





Content 영역 경계를 설정합니다.



Content Header를 표시합니다.



Page Navigation을 표시합니다.

Button을 표시합니다.

경계 라인을 표시합니다.

Button의 경계 라인을 표시합니다.

Checkbox의 경계 라인을 표사합니다.

Header Link를 표시합니다.

Header Menu를 표시합니다.

Header 경계 라인을 표시합니다.

Pane 을 표시합니다.

Pane의 헤더를 표시합니다.

Pane의 Body 영역을 표시합니다.

Tip을 표시합니다.

라벨을 표시합니다.

데이터 그리드를 표시합니다.

데이터 그리드의 컬럼을 정의합니다.

E. Mootools 1.4.2 & Java Script UI Widget

1. JDESIGNER에서 제공되는 자바스크립트 UI 컴포넌트는 Mootools1.4.2 버전으로 개발되었으며,

UI Libaray 묶음, 국제화용 Messages, Support, include, API를 delegate하는 class, Utilities class로

구성되어 있습니다.



A)Directory Structure.









B)Classes









F. Create View Using Java Script Framework And UI Widget And

TagLibrary



A)Code Example



Sample 디렉토리 이동하면, 샘플을 보실 수 있습니다.









G. Internationalize / i18n

1. JDESIGNER에서 국제화를 지원합니다. 웹 응용프로그램에서 국제화

(Language,Formatting,Currency)를 사용하기 위해서는 아래 순서를 참조하십시오.





1) web.xml에서 LocaleFilter를 설정하십시오.





LocaleFilter

org.JDesigner.common.web.filter.LocaleFilter



parameter

_change_locale











2) C:\JDesigner\workspace\plms-template-web\src\resources\message에 언어별 메시지 파일(XML)

을 정의하십시오.







3) JSP 페이지 및 ActionBean에서 메시지 처리해야 할 부분을 수정합니다.







4) URL[ *,do?_change_locale=ko]을 호출하여 언어가 변경되는지 확인합니다.

H. Theme

1. JDESIGNER에서 Theme를 지원합니다. 웹 응용프로그램에서 Theme를 사용하기 위해서는 아

래 순서를 참조하십시오.







1) web.xml에서 ThemeFilter를 설정하십시오.







ThemeFilter

org.JDesigner.common.web.filter.ThemeFilter



parameter

_change_theme







2) Theme를 추가합니다.









3) URL[ *,do?_change_theme=oracle]을 호출하여 Theme가 적용되는지 확인합니다.

Theme의 LifceCycle은 Cookie로 관리됩니다.

H. Usable Filters

1. JDESIGNER에서 다수의 유용한 필터를 제공합니다.

Filter 목록은 /jdesigner-platform/src/org/jdesigner-platform/common/web/filter/ 팩키지를 참조하십

시오.









EncodingFilter.java MDCFilter.java JSCompres sionResStream.java







ParameterLoggingFilter.java JSCompressionFilter.java







JSCompressionResWrapper.java LocaleFilter.java ThemeFilter.java







ThreadLoc alFilter.java FilterHelpers.java GZIPResponseStream.java







GZIPRes ponseW rapper.java JsCss Minify Filter.java JSMin.java GZIPFilter.java

3. Database Access (Persistence) Framework

- 이 페이지에서는 Database Access Framework를 사용하여, 데이터를 가공하는 방법과 트랜잭션

처리에 대해 알아봅니다.





A. Overview And Class Diagram



1. JDESIGNER의 Web Framework는 Commons DBUtils을 확장한 프레임워크입니다.

최상위에 Persistence Manager가 있으며, 접근 유형에 따라 NamedQuery와 TableQuery 두가지

형태의 데이터 접근 클래스로 나눠집니다.





A) Class Diagram

A. PersistenceManager And Persistnce API





1.데이터베이스 처리를 위한 Persistence 생성



-----------------------------------------------------------------------------

PersistenceManager .getPersistence();

- PersistenceManager .getPersistence(String id);

- PersistenceManager .getPersistence(String id, String jdbcJNDIName, int

transactionType);

-



-----------------------------------------------------------------------------



2. Source

-------------------------------------------------------------------------------------------------------------

package org.JDesigner.common.db;





import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.jdesigner.common.core.threadlocal.ThreadLocalProperties;





/**

* Persistence Manager

*

* @author love

*

*/

public class PersistenceManager {





private static final Log log = LogFactory.getLog(PersistenceManager.class);





private static final String DEFAULT_PERSISTENCE_ID = "org.jdesigner.common.db.DEFAULT_PERSISTENCE";





/**

* 기본 Persistence 를 반환한다.

* @return

*/

public static Persistence getPersistence() {

return getPersistence(DEFAULT_PERSISTENCE_ID);

}





/**

* Persistence 를 반환한다.

* @param id

* @return

*/

public static Persistence getPersistence(String id) {

Persistence persistence = (Persistence) ThreadLocalProperties.get(id);

if(persistence == null){

log.info("Create new persistence : persistenceID=[" + id + "]");

persistence = PersistenceFactory.createPersistence(id);

ThreadLocalProperties.put(id, persistence);

}

return persistence;

}





}









-------------------------------------------------------------------------------------------------------------

package org.JDesigner.common.db;





import java.sql.Connection;

import java.util.List;

import java.util.Map;





import org.JDesigner.common.db.query.NamedQuery;

import org.JDesigner.common.db.query.Query;

import org.JDesigner.common.db.query.TableQuery;

import org.JDesigner.common.db.session.Session;

import org.JDesigner.common.db.transaction.Transaction;





/**

* Persistence

*

* Persistence 는 데이터베이스 연결 및 트랜잭션 생성, 쿼리의 실행을 처리합니다.

*

*

* @author love

*

*/

public interface Persistence {





/**

* ID를 반환한다.

* @return

*/

public String getId();





/**

* 세션을 반환한다.

*

* @return

*/

public Session getOpenedSession();





/**

* 트랜잭션을 반환한다.

* @return

*/

public Transaction getTransaction();





/**

* 현재 JDBC 커넥션을 반환한다.

* @return

*/

public Connection getConnection();





/**

* 현재 JDBC 커넥션을 반환한다.

* @return

*/

public void changeConnection(String datasourceJNDIName);





/**

* 트랜잭션을 시작한다.

*/

public void startTransaction();





/**

* 트랜잭션을 커밋한다.

*/

public void commitTransaction();





/**

* 트랜잭션을 종료한다.

*/

public void endTransaction();





/**

* Query를 생성한다.

*

* @param path

* @return

*/

public Query newQuery(String path);





/**

* Query를 생성한다.

*

* @param path

* @param parameters

* @return

*/

public Query newQuery(String path, List parameters);





/**

* NamedQuery를 생성한다.

*

* @param path

* @return

*/

public NamedQuery newNamedQuery(String path);





/**

* NamedQuery를 생성한다.

*

* @param path

* @param parameters

* @return

*/

public NamedQuery newNamedQuery(String path, Map parameters);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @return

*/

public TableQuery newTableQuery(String tableName);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param parameters

* @return

*/

public TableQuery newTableQuery(String tableName, Map parameters);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param parameters

* @param onlyParamKeyBinding

* @return

*/

public TableQuery newTableQuery(String tableName, Map parameters, boolean onlyParamKeyBinding);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param parameters

* @param processTargetColumns

* @return

*/

public TableQuery newTableQuery(String tableName, Map parameters, String[] processTargetColumns);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param primaryKeys

* @param parameters

* @return

*/

public TableQuery newTableQuery(String tableName, String[] primaryKeys, Map parameters);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param primaryKeys

* @param parameters

* @param onlyParamKeyBinding

* @return

*/

public TableQuery newTableQuery(String tableName, String[] primaryKeys, Map parameters, boolean

onlyParamKeyBinding);





/**

* TableQuery를 생성한다.

*

* @param tableName

* @param primaryKeys

* @param parameters

* @param processTargetColumns

* @return

*/

public TableQuery newTableQuery(String tableName, String[] primaryKeys, Map parameters, String[]

processTargetColumns);





}

B. Select Query Using NamedQuery

1. SELECT 쿼리를 통한 데이터 조회시 NamedQuery를 사용할 수 있습니다.

NamedQuery는 자동 페이징된 데이터 조회, 일반 데이터 조회, 데이터 입력/수정/삭제를 처리

할 수 있습니다. NamedQuery는 Key/Value의 Map 형태 데이터와 편리하게 파라메터를 바인딩

가능합니다.





1)XML Code



















2)DAO Code







public Page selectTestPage(Map params, int start, int range, String sort,

boolean desc) throws DatabaseException {

NamedQuery query =

getPersistence().newNamedQuery(“classpath://com/test/dao/T00001.xml",

params);

return query.processor().selectPage(start, range, sort, desc); //

}









Binding Types and Conversions



Parameter Map for Oracle

Java type(Map value) ResultSet.get method PreparedStatement.set method

Boolean/boolean getBoolean setBoolean

Byte/byte getByte setByte

Short/short getShort setShort

Integer/int getInt setInt

Long/long getLong setLong

Float/float getFloat setFloat

Double/double getDouble setDouble

Character/char getString setString

Character[]/char[] getString setString

Byte[]/byte[] getBytes setBytes

String setString setString

java.math.BigDecimal getBigDecimal setBigDecimal

java.io.Reader getCharacterStream setCharacterStream

java.io.InputStream getBinaryStream setBinaryStream

java.util.Date getTimestamp setTimestamp

java.sql.Date getDate setDate

java.sql.Time getTime setTime

java.sql.Timestamp getTimestamp setTimestamp

java.sql.Clob getClob setClob

java.sql.Blob getBlob setBlob





Result Map for Oracle

SQL type ResultSet.get method

ARRAY getArray

BIGINT getLong

BIT getBoolean

BLOB getBytes

BOOLEAN getBoolean

CHAR getString

CLOB getString

DATALINK getBinaryStream

DATE getDate

DECIMAL getBigDecimal

DOUBLE getDouble

FLOAT getFloat

INTEGER getInt

JAVA_OBJECT getObject

LONGVARBINARY getBytes

LONGVARCHAR getString

NULL getNull

NCHAR getString

NUMERIC getBigDecimal

OTHER getObject

REAL getDouble

REF getRef

SMALLINT getInt

TIME getTime

TIMESTAMP getTimestamp

TINYINT getInt

VARBINARY getBytes

VARCHAR getString

100 (Oracle specific) getFloat

101 (Oracle specific) getDouble







C. Insert/Update/Delete Query Using TableQuery

1. INSERT/UPDATE/DELETE 쿼리를 통한 데이터 수정시 TableQuery를 사용할 수 있습니다.

TableQuery는 자동화된 SQL구문 생성 및 Identity 생성, Primary Key에 따른 자동 SQL 변환을

지원합니다.









2)DAO Code





A) insert/update/delete

public void insertTest(Map params) throws DatabaseException {

params.put("insert_date", DateUtils.getToTimestamp());

TableQuery query = getPersistence().newTableQuery("TEST_TABLE", params);

query.processor().insert(); //입력

query.processor().update(); //수정

query.processor().delete(); //삭제



query.processor().selectByPrimaryKey(); //PK로 조회

query.processor().selectAll(); //전체 조회

………..

}

B) Primary Keys 재 정의

TableQuery query = getPersistence().newTableQuery("TEST_TABLE", new

String[]{“my_pk”}, params);

query.processor().insert();





C) 대상 컬럼만 처리

TableQuery query = getPersistence().newTableQuery("TEST_TABLE", new

String[]{“my_pk”},params, new String[]{username, password});

query.processor().insert();









C) Identity 생성

params.put("my_id",

IdentityGenerator.generateSequenceType(“sequenceName”)); //시퀀스를 통한 ID

생성시



params.put("my_id", generateColumnMaxValueType(tableName,

columnName));//대상 테이블의 컬럼 최고 값 ID 생성시



params.put("my_id", IdentityGenerator. generateNativeSQLType("SELECT 'E'

|| (SUBSTR(MAX(CUS_REG),-3) + 1) FROM PORTALM.PT_TBL_CUS_REG WHERE

CUS_REG LIKE 'E' || '%'")); //SQL을 통한 ID 생성시









D. Management Transaction

1. JDESIGNER는 자동화된 트랜잭션 스위칭(JDBC/JTA) 및 이기종 분산 데이터베이스에 대한

트랜잭션(XA)을 지원합니다. 트랜잭션 격리 레벨(Transaction Isolation Level) 조정을 지원합니다.









A)Code Example





public void transactionTestForCommit(Map params) throws DatabaseException {

try {



getPersistence().startTransaction();

TableQuery query = getPersistence().newTableQuery("SAMPLE_TABLE", params);

query.processor().delete();



TableQuery query2 = getPersistence().newTableQuery("SAMPLE_TABLE", params);

query2.processor().delete();



getPersistence().commitTransaction();



}catch(Exception ex){

throw new DatabaseException("Transaction failed.");

}finally{

getPersistence().endTransaction();

}

}





B)Isolation Level 설정





getPersistence().getTransaction().setIsolationLevel(Isolation.TRANSACTION_S

ERIALIZABLE);









D. Database Provider

1. JDESIGNER는 데이터베이스 제공자의 제품 및 버전에 따른 지원자를 구성할 수 있습니다.

이는 여러 제품의 데이터베이스를 지원할 수 있으며, 개발 환경에 따른 커스터 마이징 할 수

있습니다.







1) 신규 데이터베이스 제품 지원을 위해서는 아래 Interface를 구현하십시오.



ColumnTypeResultObjectHandler.java

DataMapListResultSetHandler.java

DataMapResultSetHandler.java

DataObjectResultSetHandler.java

IdentityHandler.java

LOBHandler.java

PagingSQLHandler.java

ParameterBinder.java

SQLLogFormatter.java



2) TableTypeMaker.java현재 Oracle만 지원하고 있으며, Oracle Provider의

팩키지는 org.jdesigner.common.db.provider.rdbms.

OracleRDBMSProvider입니다.









C. Utilities

- 이 페이지에서는 Utilities에 대해 알아봅니다.





- StringUtils

- DateUtils

- FileUtils

- Etc

5. Usable Common Service Components

- 이 페이지에서는 재사용 가능한 공통 서비스 컴포넌트에 대해 알아봅니다.

공통 서비스 컴포넌트를 이용하여, 사용자 서비스 개발 시 컴포넌트의 조합으로 신규 서비스를

빠르게 개발 할 수 있습니다.

공통 서비스 컴포넌트의 팩키지는 [org.jdesigner.application.template.*] 입니다.





목록:

- Common Code Management Component

- User Management Component

- Menu & Bread Crumbs Management Component

- Security Component

- I18n(국제화) Component

- Excel Read/Write Component

- File I/O Component

- FTP Component

- Scheduling Component

- Cache Component

- Mail Component

- Analysis Component









A)Architecutre

B)서비스를 사용하기 위해 CommonServiceFactory로 부터 서비스를 생성할 수 있습니다.







CommonServiceFactory.get*Service();



*은 해당 서비스 명입니다.

6. Web Application Template Introduction

- Jdesinger는 빠른 웹 개발을 위해 미리 최적화된 웹 어플리케이션을 템플릿을 제공합니다.

이 템플릿은 위에 프로젝트 설치 후, 실행한 사이트입니다. 사이트를 기반으로 제반 설계 작업업

이 바로 프로그램개발을 위한 코딩을 시작할 수 있습니다.





A) 웹 어플리케이션 템플릿 스크린샷

Reference Website



http://www.apache.org

http://www.ibatis.com

http://opensymphony.org/

http://ehcache.org/

http://freemaker.org

http://mootools.net

END)



Other docs by ajizai
Fall 2010
Views: 0  |  Downloads: 0
Math 111
Views: 0  |  Downloads: 0
Training_listing_275360_7
Views: 1  |  Downloads: 0
C4-051739
Views: 0  |  Downloads: 0
DEFINITIONS
Views: 0  |  Downloads: 0
Unit POPULATIONS
Views: 0  |  Downloads: 0
albhed
Views: 0  |  Downloads: 0
price_list
Views: 9  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!