'분류 전체보기'에 해당되는 글 2491건

  1. 2012.01.17 할일(ToDo) 관리를 효율적으로 - TODOList Resources
  2. 2012.01.17 cvs 메뉴얼
  3. 2012.01.05 winsxs
  4. 2012.01.03 IReport 개발자 메뉴얼 1
  5. 2012.01.03 iReport의 Parameter, Field, Variable
  6. 2012.01.03 iReport의 Elements 종류(2/2) 1
  7. 2012.01.03 iReport의 Elements 종류(1/2)
  8. 2012.01.03 iReport의 Elements정의 와 Common속성
  9. 2012.01.03 iReport의 구조(properties)
  10. 2012.01.03 iReport의 구조(band)
  11. 2012.01.03 iReport - 준비단계(Options-Setting)
  12. 2012.01.03 iReport - 준비단계(Database연결하기)
  13. 2012.01.03 iReport - 준비단계(Classpath설정)
  14. 2012.01.03 리포트 작성툴 인 iReport
  15. 2011.12.26 이클립스 svn에러 ~is not a working copy directory
  16. 2011.12.22 여러종류 wiki
  17. 2011.12.19 tomcat out of memory 메모리 설정
  18. 2011.12.13 [ibatis]동적 컬럼 생성시 컬럼정보를 제대로 가져오지 못하는 현상
  19. 2011.12.13 iBatis 실행구조
  20. 2011.12.13 iBatis CacheModel(캐시모델)
  21. 2011.12.13 JAVA] iBATIS + OSCACHE 사용 시 Cache Model에 대한 이해 5
  22. 2011.11.14 java.lang.OutOfMemoryError: Java heap space발생시 tomcat memory option
  23. 2011.10.29 serialVersionUID 기본 알고리즘
  24. 2011.09.14 flash builder4.5 Plug-in for eclipse(이클립스에 플래시빌더4.5 플러그인 설치법)
  25. 2011.08.25 eclipse. Java heap space 오류
  26. 2011.08.25 이클립스 console 창에 한글 깨질때
  27. 2011.08.18 불법소프트웨어 단속 대비... 프로그램 삭제 , 레지스터 삭제 2
  28. 2011.08.04 이클립스 메모리 늘리기
  29. 2011.08.03 [Eclipse Plugin]엄청 좋은 ~ ActionScript, MXML Code Formatter
  30. 2011.08.02 ERWin 사용법 동영상
98..Etc/Etc...2012. 1. 17. 15:37
반응형

한글판 :


한글판하고 오리지널 버전 같이 있습니다.


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

「TODOList Resources」는 할일(ToDo)을 하위 작업으로 구분하여 관리할 수있는 무료 프로그램으로 별도 설치 과정없이 압축을 푼 후 바로 사용가능합니다.

"+"버튼으로 쉽게 작업을 추가할 수 있으며 예정일 별, 중요도 별로 관리가 가능합니다.

세부항목은 하위 트리로 관리 가능하며 '우선 순위, 완료율(%), 예상 시간, 소요 시간'등을 지정하고 항목별 카데고리, 텍스트 색상, 관련 파일 링크등의 다양한 기능들을 제공합니다.

오리지널판은 영문판으로... 사용하기 까다로우니 여기 'ninja님의 블로그'를 방문하시어 한글판을 사용하시기 바랍니다.

또한, 사용법은 '해피포터의 행복한 프로그래밍'에 자세히 나와있으니 참고하세요.


■ ScreenShot



Posted by 1010
98..Etc/Etc...2012. 1. 17. 14:49
반응형


요즘은 워낙에 cvs 관련 툴이나 프로그램이 많아서 직접적으로 cvs 명령을 타이핑 하는 일은 줄어들었지만..
cvs에 대한 기본 개념을 잡기엔 이문서가 도움이 될것 같다.

출처 : http://www.apache-korea.org/zb41/view.php?id=struts&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=5
Posted by 1010
99.유용한정보/잡식2012. 1. 5. 13:10
반응형

Windonws 7 에 C 드라이브 용량이 하루가 멀다하고 줄어두는게 눈에 띄었다. 원인을 알아보니

C:\Windows\winsxs 이놈이 문제.

이게 뭐하는건지는 모르겠는데, 하드 정리할때 봐도 이게 없다!!!

뭐하는 놈인지는 모르겠지만 다음과 같이 하면 좀 된다고 한다.

1 . Window키 + R : 실행창이 뜸

2 . cmd 치고 엔터 : 도스창 띄움

3 . DISM /online /Cleanup-Image /SpSuperseded 치고 엔터(혹은 긁어서 카피하고 도스창 우클릭 붙여넣기)

4 . 기다린다.

5 . 완료..


아래와 같은 화면이 나옵니다.


Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\hyun>DISM /online /Cleanup-Image /SpSuperseded
배포 이미지 서비스 및 관리 도구
버전: 6.1.7600.16385
이미지 버전: 6.1.7600.16385
서비스 팩 설치 시 만들어진 백업 파일을 제거하는 중입니다.
[==========================100.0%==========================]
서비스 팩 정리 작업이 완료되었습니다.
작업을 완료했습니다.

[출처] C:Windowswinsxs 용량 정리.|작성자 님프



해당 글 링크

Servicing Stack (1) 부제: WinSxS 폴더를 이해하다


Servicing Stack (2) 부제: 커져만 가는 WinSxS 폴더 사이즈를 줄여보자!


이해하기 쉽게 간단히 줄여서 설명도 잘해주신것 같고 파일 링크에 대한 이해도 새롭게 알게되었고

또 잊어버릴까 해서 링크 남겨놓습니다.

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:59
반응형
Posted by 1010
53.jasper&ireport2012. 1. 3. 13:39
반응형

출처 : http://dalyal.tistory.com/entry/iReport의-Field-Parameter-Variable

이번에 알아볼것은 iReport에서 핵심을 이루고 있는 Text Field에 들어가는 것들 입니다.
DB에서 값을 가져오는 Field, 조건이나 가지고 있는 값 자체를 사용 할때 쓰는 Parameter,
Count나 Sum 등 연산에 자주사용되는 Variable 에 대해 알아 보겠습니다.

사용자 삽입 이미지


Document structure 부분입니다.
iReport에서 Default로 제공하는 부분을
빼고 (젤 아래부분 Filters에서 유무조절)
개발자가 작성한 부분만 표시되고 있습니다.

SUBREPORT_DIR은 subreport의 경로를
담고 있으며 연결에 사용됩니다

RCIV_DATE,RCIV_SEQ는 쿼리를 날려
얻어온 컬럼명입니다.

Variables는 얻어온 RCIV_SEQ의 합계를
얻기 위해 만든 변수입니다.











1. Parameters
사용자 삽입 이미지

- 실행시 외부에서 동적으로 Data를 받아오거나 Report끼리(특히 Subreport쓸떄) Data를
주고 받을때 사용됩니다. 자체적으로 제공하는 Parameter도 있습니다.
표기 형식은 $P{<parameter명>}이고 원하는 타입을 직접 설정해 줄 수 있습니다.
Use as a Prompt 부분에 체크를 해주면 실행시 Parameter값을 입력하는 창이 뜹니다.
Default Value Expression부분에는 Parameter값을 써줄수 있는데 값을 써줄때 그냥 값을
넣는게 아니라 위 그림처럼 그 타입에 맞게 생성해 주어야 한다.

2. Fields
사용자 삽입 이미지
- 개발자 임의로 생성하는게 아니라 SQL Query를 통해 받아온 Column명이 Fields입니다.
표기 형식은 $F{<column명>}이고 Type은 DB의 Table에 따릅니다.

3. Variables
사용자 삽입 이미지
- Variables는 보고서 내부에서 연산 결과 저장이나 특정 Data를 임시저장들을 할 때
사용합니다.
표기 형식은 $V{<variables name>} 이고 원하는 타입을 직접 설정해 줍니다.
Variable Expression에 값을 넣을수 있는데 Parameter에서 처럼 new BigDecimal(10)처럼
생성해주거나 위 그림 처럼 Fields을 써넣을 수도 있습니다.

그림을 보면 우측에 Variables속성 창에 Calculation Type' Option이 있는데
이 Option은 iReport에 내장되어 있는 내장 함수를 이용할 것인지를 선택하는 항목입니다.
만일 원치 않으면 'Nothing'을 선택하면 됩니다

* 내장함수 List:
Count - 입력 값의 수량 반환
Distinct Count - 입력 값의 수량 반환(중복x)
Sum - 입력 값의 합 반환
Average - 입력 값의 평균 반환
Lowest - 입력 값 중 가장 작은 값 반환
Highest - 입력 값 중 가장 큰 값 반환
Standard Deviation - 입력 값의 표준편차 반환
Variance - 입력 값 중 평방편차 반환
System - 연산에 사용되지 않지만 Memory에서 맨 마지막에 사용된 값을 반환
First - 맨 처음에 사용된 값을 반환

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:39
반응형
출처 : http://dalyal.tistory.com/entry/iReport의-Elements-종류22

6. Subreport - Mainreport 안에 다른 보고서를 포함하는 것으로 각 보고서간에
서로 Parameter를 주고 받을 수 있고 독립적으로 서로 다른 보고서 결과를
(한마디로 다른 쿼리) 작성할 때 사용합니다.
* Edit / InsertElement / Subreport 를 클릭하거나 Toolbar에서 아이콘을 클릭해서
Mainreport안에 만들어 준다. ( 이때 크기는 Subreport크기랑 맞추어 주는 걸 추천한다)

사용자 삽입 이미지
* Subreport Connection방법인데 전 그냥 Default로 제공되는 방법을 이용했습니다.
(Mainreport랑 같은 방법으로 접속하는 방법)

사용자 삽입 이미지

* Mainreport에 Subreport를 연결하는 방법은 앞 장에서 본 Image연결과 비슷합니다
* Subreport Expression Class 에서 Type을 설정하고 밑부분에 주소를 써줍니다.

- java.lang.String - "C:\\bea\\(주소~~).jasper" <- Subreport 경로써줌
- java.io.File - new File(System.getProperty("config.dir") + "/(주소~).jasper")
<- 파일위치에 경로를 찾아가는 방식

* Subreport parameters 부분은 Main에서 Sub로 값을 넘길때 사용합니다

사용자 삽입 이미지

* Subreport return values는 Sub에서 Main으로 값을 넘길떄 사용하는데
Subreport Variable은 Subreport쪽에 만드는 것이고 Destination variable은
Mainreport 쪽에 만들어 놓는 것이다. 두 군데 모두 변수가 만들어져 있어야 가능하고
이부분은 Subreport의 컬럼 수나 함계, 통계등 변수값을 쓸때 사용합니다.



7. Chart - iReport에서는 보고서에 나타낼 수 있는 여러종류의 Chart를 지원하고
Edit / InsertElement / chart 나 Toolbar에서 찾아 클릭해 드래그 하면 됩니다.
바로 그래픽을 선택하는 부분이 나오고 Properties에서 기타 설정을 해줍니다

사용자 삽입 이미지

* 위 그림은 Chart부분에서 pie 모양 Chart에서 어디 위치에 값이 나오는지 보여주기 위해
예로 만든 Chart입니다.

8. Barcode tool - 값을 바코드 형식으로 보여주고 출력합니다.
바코드 인식기계에 그 값이 나타납니다.

9. Frame - iReport에 Frame을 나누어 줄때 씁니다.

10. Crosstab - 표 형식으로 여러 값을 출력 할 때 유용하게 사용할 수 있습니다.

11. Hyper Link - iReport에서는 HypeLink를 허용합니다. Static text와 graphic Element를
제외한 Elements에서 모두 설정 할 수 있습니다.

사용자 삽입 이미지

* Hyperlink Type
1.None - 링크가 없는 상태
2.Reference - Website로 link
ex)”http://www.naver.com”
3. LocalAnchor - 보고서 내부 특정band로 link
ex)”summary”
4.LocalPage - 보고서 내부의 특정page로 link
ex)new Integer(4)
5. RemoteAnchor - 다른 파일 band로 link
6. RemotePage - 다른 파일 특정 page로 link
=> Hyperlink는 PDF에서는 잘 되지 않았고 explore에서 실행해 보았습니다.
Posted by 1010
53.jasper&ireport2012. 1. 3. 13:38
반응형
출처 : http://dalyal.tistory.com/entry/iReport의-Elements-종류


 iReport의 Elements 종류로는 선,사각형,타원,이미지삽입,텍스트 등이 있고.
그 외의 것들로 subReport, Chart, Barcode tool, Frame, Crosstab 등이 존재합니다.
'>iReport상단에 Menu아래에 존재하고 위에 그림처럼 직관적으로 잘나타나져 있습니다

1. 선

선을 나타낸다. Line Direction 옵션에서 Top-down(기본값) ,Bottom-up의 두가지 모양이
있는데 두가지는 각기 우측상단에서 좌측하단으로 좌측상단에서 우측하단으로의 모양을
가지고 있습니다.(높이를 0으로 해주면 직선이 됩니다)
또 Graphics Element옵션에서 Pen 속성값으로 굵기를 선택해줍니다(Dotted는 점선)

2. 사각형

사각형을 표현할 때 사용된다. 다른 iReport 메뉴얼이나 작성법을 보면 Layout를 나눌때
많이 사용한다고 합니다.
또 사각형Element는 Rectangle에서 Rectangle radius라는 옵션이 있다. 0일때는
그냥 사각형이고 숫자값이 커질수록 사각형 모서리 부분이 뭉퉁하게 됩니다.(타원이 됨)

3. 타원

별다른 옵션이 없다. 그냥 타원입니다..

4. 이미지

보고서에 사진이나 이미지를 추가할때 사용합니다. Image Expression부분에 이미지 경로와
파일명을 적어주면 되는데 지원타입으로는 gif,jpeg등 다양합니다.
이미지경로를 작성하는 방법으로는 Image Expression Class 부분에서 Type을 정해주는데
저는 String이랑 File 방법을 사용해 보았습니다

java.lang.String - "C:\\이미지.jpeg" <- 경로써줌
java.io.File - new File(System.getProperty("config.dir") + "/이미지.jpeg")
<- 파일위치에 경로를 찾아가는 방식
그 외에 다른 방법은 직접 사용해 보면서 익히길 바랍니다..

5. 텍스트

iReport를 하면서 가장 많이 사용하는 부분이다. iReport에 사용하는 텍스트는 2가지 종류가
있고 그외의 옵션에 대해서도 알아 보겠습니다.

1)Static Text - 문자를 단순히 표현하는 Elements

2)Text Field - DB에서 추출된 Field값이나 Parameter 나 Variables을 표현하는 Elements
Text Field Expression Class에서 문자의 Type을 정해줄수 있습니다
Evaluation Time와 Group옵션에 대해서는 잘 모르겠던데
아시는 분 있으면 댓글 좀 달아주시면 감사하겠습니다..
Stretch with overflow - Elements 의 길이가 넘었는데도 값이 남아있다면
다음줄에 값이 나타난다.
Blank when null - 값이 null일 때는 빈칸으로 나타내어 준다.
Pattern - 날짜나 숫자값일때 표현패턴을 지정해 준다 (ex) ##.# -> 32.2
Text Field Expression - 표현할 값을 적어준다 ($F{} , $P{}, $V{} 등등)

* Border옵션 - Padding - Element Box와 문자 사이에 거리를 설정해준다.
Border - Element Box의 선을 편집해 준다
( 저는 이런 방식으로 보고서에 줄과 칸을 나눕니다. )

* 기타 Text옵션 - 굵게(Bold),이태리체(italic),밑줄(Underline)등 제공하는 옵션들이 있다.
정렬의 위치와 Element Box에서의 위치도 조절 할 수 있다.

* Static Text와 Text Field 둘다 F2로 편집이 가능하고 Static Text는 F3키로 편집이 가능한데
이떄 Text Field로 변환이 되어 버리니 조심해야 한다.

* Font - iReport는 여러 종류의 Font를 지원하고 외부 Font(TTF)는 classpath설정을 통해
할수 있다.
보고서를 PDF형식으로 생성을 한다면 PDF 보고서를 위한 Font설정도 해주어야 함

사용자 삽입 이미지

* Report Font - Menu/ Format /Fonts를 클릭하면 원하는 Font를 설정해 놓을수 있다.
* Font Name - 화면 Font 설정
* PDF Font Name - PDF Font 설정
* Line Spacing - 출력 위치
* Horizontally Align - Text Box에서 가로,세로 위치
* Vertically align - Text Box에서 높이 위치
* Rotation - 출력 각도
* PDF Encoding - PDF 인코딩
Posted by 1010
53.jasper&ireport2012. 1. 3. 13:37
반응형

출처 : http://dalyal.tistory.com/entry/iReport의-Elements

iReport에서는 선이나 네모,원, 텍스트박스등을 다 Elements란 개념으로 표현합니다.
각각의 Elements들은 상단에 존재하는 Toolbar를 이용하거나 Menu에 Edit부분을 보면
Insert Elements를 이용해서 삽입해 줄 수 있습니다
또 화면에 삽입한 Elements들은 아래의 그림과 같이 트리 형식으로 나타납니다.

사용자 삽입 이미지


-각 Elements에 대한
자세한 설명은
차차 하도록 하고
이런것이 있구나 하고
그냥 넘어가시면 됩니다.










-각 band에 위치하는 Elements는
tree형태로 존재하고 되고
상단에 위치하는 Elements일수록
화면 아래쪽에 위치합니다.





-마지막에 Filters부분이 있는데
이부분은 기본적으로 제공되는
Parameter와 Variables부분을
보여주나 안보여주나를 설정해
줍니다.


그리고 Elements는 화면에서
사용자 삽입 이미지
위치에 따라 에러가 나는 경우가 있습니다.







Elements의 테두리색을 보면 알수 있는데 3가지 색깔로 표현됩니다,
-파란색 : 가장 최적의 위치입니다,
-녹색 : 겹치는 Elements가 있는 경우입니다. 출력은 되지만 겹쳐서 나타납니다.
-빨강색 : 자신의 band를 벗어나는 경우입니다. 에러가 나고 출력되지 않습니다
(아래에서 위쪽 band로 이동시에는 에러가 나지 않지만 짤려서 나옵니다.)
최대한 파란색이 될 수있도록 해주시고 글자의 크기보다 Elements의 크기가 커야만
제대로된 출력물을 볼수 있습니다

그럼 다음으로는 Elements의 Common속성에 대해 알아 보겠습니다.
Common부분은 모든 Elements에서 공통으로 포함하고 있는 속성입니다.

사용자 삽입 이미지
























*Band : 이 Elements가 위치한 band를 말합니다
*Top : 위치한 band의 최상단에서부터 떨어진 거리를 말합니다
*Left : 위치한 band의 좌단에서부터 떨어진 거리를 말합니다
*Width,Height : Elements의 넓이와 높이를 말합니다
*Foreground : Elements의 나타나는 값의 색깔을 말한다, Text라면 글자색을
선이라면 선의 색깔을 말합니다
*Background : Elements의 배경색을 말합니다
*Transparent : Background를 투명하게 채운다.(배경색 없어짐)
*Remove line when blank : 빈칸일때 그 줄을 지웁니다

그 외의 것은 사용해 보아도 뭐가 변하는지 잘 모르겠고 해서..
그냥 넘어가도록 하겠습니다. (죄송합니다)

그럼 다음장에서는 Element의 종류에 대해 알아보겠습니다.

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:36
반응형

출처 : http://dalyal.tistory.com/entry/iReport의-구조properties

Report Properties는 보고서 생성시 보고서의 Page size나 출력할 방향, Page Margins 등의
여러가지 속성들을 설정 하는 창으로 Menu에서 File-New Document를 누르거나 툴바에서
흰색 종이모양을 클릭해 주시면 아래와 같은 보고서 속성 설정창을 볼 수 있을 것이다.

사용자 삽입 이미지

Report Name : 뭐 당연히 보고서의 파일명을 정하는 곳 입니다.
Preset sizes : pixel단위로 여러 종류의 표준 용지를 처리 할 수 있도록 지원 합니다.
Orientation : iReport의 표시 방향을 조정해 주는 것입니다.
- Portrait : 세로 방향
- Landscape : 가로 방향

그리고 아래 쪽 탭 부분에 대한 설명 입니다.

* Page Margin : Page의 상/하/좌/우의 여백을 조정합니다

* Columns : 보고서는 기본적으로 가로 방향으로 나뉘어져 있는데 간혹 세로방향으로
나눌때는 Columns값을 증가 시켜서 쓰면 됩니다.
(Columns의 수만큼 Width의 크기에 따라 레코드 값이 표시 됩니다)
사용자 삽입 이미지
(Columns 크기 변경시 예)

* Scriptlet Class : 보고서 생성시 새 페이지를 시작하거나 그룹의 끝 등에 다 달았을때
특별한 이벤트 처리를 하고자 할 때 scriptlet을 사용합니다.
옵션에 따라 사용을 원치 않으면 'Don't use scriptlet'을 선택 하거나
취향에 따라 옵션을 선택해 준다.
Language는 script의 표현식을 나타내기 위한 언어로 JAVA와
GROOVY를 지원한다.
솔찍히 이부분은 써보지 않아서 대략적인 의미만 알고 있다.
*More...
- Title on a new page : 보고서에 독립적인 Title 페이지를 추가해 출력한다
- Summaray on a new page : 위 옵션과 동일한데 Summary를 추가하는 것이다.
이 옵션을 체크 하면 만약 10장의 보고서 내용이 있다면
모두 11장의 보고서가 출력 된다
- Floating column footer : 이 옵션을 체크 해주면 Detail band 끝에 column footer가
연결되고 체크 안해주면 Page footer band위에 위치 한다.
- Ignore pagination : 체크시 전체페이지가 아닌 출력 부분만 보여준다.
- Print Order : 다중 column 출력 시 출력 방향을 설정한다.
- When no date : 만약 출력 데이터 값이 없을 때 출력 방법을 선택한다.
NoPages(출력없음) Blank Page(빈페이지 출력) AllSelectionNoDetail(Detail만 제외)
,No-data Section(No-data band부분의 내용을 출력) <- 가장 추천한다.

* i18n
- Format Factory Class
- Resource Bundle Base Name : 다국어를 지원하는 보고서 생성시 사용하는 Option
- When resource missing type : resource를 분실하거나 문제가 있을시 출력 방법
- XML encoding : XML 인코딩 방법을 선택한다.

오늘은 iReport의 Page속성에 대해 알아 보았습니다..
개인적으로 다른 리포트툴보다 기능이 적지만 충분이 쓸만하다고 생각합니다..(무료니깐..)
버전이 바뀌면서 점점 지원하는 것도 많아져서 몇달 지나지 않아
내가 작성한 메뉴얼은 쓸모가 없어 질지도 모르겠네요..

다음에는 iReport안에 들어갈 Element에 대해서 알아 보겠습니다..
Posted by 1010
53.jasper&ireport2012. 1. 3. 13:35
반응형

출처 : http://dalyal.tistory.com/entry/iReport의-구조band


band란 가로 방향으로 나뉘어 각각에 고유한 이름을 가지고 일정한 영역을 가지는 iReport의
화면을 나누는 개념입니다.

기본적으로 band는 Title, LastPaheFooter, Summary band를 제외하고 나머지 band들은
Detail band를 기준으로 상하로 구분되어 Header와 Footer로 구분되어 짝을 이루고 있습니다
각각의 band들은 특징을 가지는데 아래에서 그 특징을 알아보겠습니다.

1. Background band
- 보고서의 배경 설정을 할 수 있다.

2. Title band
- 가장 먼저 보여주는 band로 보고서 전체 페이지중 단 한번만 출력되는 band로 주로
보고서의 Title을 기재하는데 사용된다.

3. Page header band (Page footer band)
- 한번 정의되면 보고서 전체 페이지의 헤더 부분에 똑같은 위치와 크기로 페이지마다
반복 출력 된다.(Page footer band는 전체 페이지의 하단에 반복 출력된다.)

4. Column header band (Column footer band)
- 각 Detail band의 column 항목의 Title 영역으로 사용된다. 역시 페이지마다 출력 된다.

5. Group header band (Group footer band)
- 사용자가 임의로 만든 band로 0개 이상을 만들수 있다. Detail band 상하에 위치한다.

6. Detail band
- 가장 핵심이 되는 band. 다른 band에서도 Query를 이용해 수집된 데이터를 나열해
출력 할 수 있지만 detail에서는 한개 이상의 모든 Rows를 출력 할 수 있다.

7. Last Page Footer
- 다른 일반 footer와 다르게 보고서의 맨 마지막 페이지에만 결과를 나타내고자 할 때
사용하는 band로 Title band와 유사하게 딱 한번만 출력 된다.

8. Summary band
- 보고서 전체 페이지중에 맨 마지막 페이지에 출력되는 band로 주로 총 합계 등을
나타내고자 할 때 사용 한다.

사용자 삽입 이미지

iReport band

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:35
반응형

출처 : http://dalyal.tistory.com/entry/iReport-준비단계Options-Setting

이번 단계에서는 iReport사용에 대해 전반적인 설정을 해보겠습니다.

iReport를 실행시키고 위에 메뉴바에 보면 Options에서 Settings..를 클릭합니다.
그럼 밑에 보이는 그림과 같은 Options창이 뜹니다.

사용자 삽입 이미지


1. General

iReport에 대한 기본적인 Option을 선택해 주는 부분이다.
이부분은 저도 그냥 그대로 썼습니다.

2. Compiler

iReport의 Compile에 대한 Option을 정해주는 부분인데 Dafault compilation directory에
자신의 컴파일하거나 실행한 파일들을 저장해 줍니다.
(ex : *.jasper(컴파일시) , *.pdf , *.excel 등등)

사용자 삽입 이미지


참고로 저는 iReport 폴더 안에 compile이란 새폴더를 만들어서 거기에 저장을 했습니다.

3. Backup

저장시 백업에 대한 option을 선택해 주는 부분입니다.
- No Backup : 말그래도 백업 안하는거죠
- Replace Extension with .bak : 파일명에 확장자가 bak으로 저장됩니다. (xxx.bak)
- Append .bak to existing extension : 파일명.jasper에 bak이 붙습니다. (xxx.jasper.bak)

사용자 삽입 이미지


4. External Programs

이 부분은 출력시 나타낼 수 있는 Viewer들을 연결해 주는 부분입니다.
저는 PDF랑 HTML이랑 XLS부분만 연결했습니다.
연결방법은 그냥 Browse를 선택해서 연결해 주면 됩니다.

사용자 삽입 이미지


위에 External Editor는 외부 에디터 프로그램을 연결하는거 같은데..
해보지 않아서 잘 모르겠습니다.

우선 여기까지만 해주셨다면 iReport의 기본적인 준비 단계는 완료 되었습니다.
다양한 출력방식중에서 하나를 고르실때는 상단 메뉴바에서 Build 를 클릭후에
나오는 것들 중에 하나를 고르시면 됩니다. 그중 JRViewer는 기본적으로 제공되는
preview로 jasper파일 이외에 실행 파일은 남기지 않습니다.
다른 preview선택시 예를들어 PDF preview를 선택하셨다면 실행후 아까 설정하신
저장 폴더에 PDF파일이 저장이 됩니다.

다음장부터는 iReport 화면에 대해 알아보겠습니다.

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:34
반응형

출처 : http://dalyal.tistory.com/entry/iReport-준비단계Database연결하기

iReport는 default로 MySQL을 지원합니다.
저는 Oracle을 쓰기 때문에 따로 Oracle드라이버를 추가 시켜주었습니다.

사용자 삽입 이미지










저처럼 따로 LIB를 만들어 주신다면 그쪽에도 추가 시켜주어야 합니다.

자. jar파일을 추가 해 주셨다면 다음은 iReport 화면으로 돌아갑니다.
상단 메뉴바에서 Data - Connections/Data Source를 클릭하거나
Toolbar 2번째 줄 맨끝에 있는 원통에 플러그 꼽는 아이콘을 클릭합니다(;;)

그러면 다음과 같은 화면이 나옵니다.
사용자 삽입 이미지


여기서 NEW를 클릭하게 되면 datasource type을 고르라고 하는데
Database JDBC connection을 선택하고 NEXT를 클릭 합니다. (다른것은 안해봣음;;)

자 이제 Connections properties란 창이 하나뜨는게 보이네요.
여기서 자신이 연결한 Database에 대한 설정을 해줍니다.

* Name - 앞으로 표시 될 이 Database의 이름을 말합니다.
* JDBC Driver - 전 오라클 사용을 위해 oracle.jdbc.driver.OracleDriver를 선택합니다.
* JDBC URL - 이부분은 직접 써넣어도 되지만 자동 세팅 할수 있기 때문에 스킵합니다.
* Server Address - 자신이 연결한 Database의 주소를 써줍니다 (ex. 192.68.41.1)
* Database - 자신이 연결한 Database의 이름을 써줍니다.(ex: ora92)
=> 주소와 Database 이름 써넣은후 Wizard를 클릭하면 URL이 세팅 됩니다.
* User Name - Database 연결 하는 User ID를 말합니다.
* Password - Database 연결 하는 비밀번호를 말합니다.
(Save password를 체크 하지 않으면 Database 연결시 마다 비번를 입력해야 합니다.)

자 다 설정 하셨으면 Test버튼을 클릭해서 Connection test successful!이 뜨면
제대로 연결이 된것 입니다.
Save 하면 추가된 Datasource를 확인 할수 있습니다.
여러개를 추가할 수 있고 그 중 하나를 Default로 지정해야 합니다
(따로 Default를 지정하지 않으면 가장 마지막에 만든 Datasource가 default가 됩니다.)

이로써 iReport에 Database를 연결하는 방법은 끝났습니다.
다음 장에서는 여러 Option들에 대해 알아보겠습니다.

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:33
반응형
출처 : http://dalyal.tistory.com/entry/iReport-준비단계

iReport를 사용하기 위해서는 자신의 jdk-lib 안에 있는 jar파일(dt.jar , tools.jar)과
한국어를 사용하기 위해서 iTextAsian.jar를 Classpath에 추가해 줘야 합니다.
(iTextAsian.jar는 맨 밑에 첨부 파일로 올렸습니다)


사용자 삽입 이미지



제가 쓰는 환경에 맞게 Weblogic(웹서버)에서 제공하는 JDK을 이용하였고
Weblogic에서 iReport를 사용하기 위해서 임의로 ireport-lib라는 폴더를 새로만들어
폴더 안에 iReport의 library들과 함께 iTextAsian를 추가 했습니다.

Posted by 1010
53.jasper&ireport2012. 1. 3. 13:32
반응형
출처 : http://dalyal.tistory.com/entry/OpenSource-Report-작성tool-인-iReport

회사에서 진행하는 프로젝트에 사용하게 된 리포트툴입니다.
깔끔한 UI와 오픈소스로 무료배포인게 가장 큰 매력이었구요..
국내에 제대로 된 자료를 찾기 어려워서(버전이 낮은 것은 있더군요.)
직접 익힌 iReport 사용법을 소개하고자 합니다.
사용한 버전이 1.3.1 이지만 최근에 릴리즈된 2.0.1버전이랑 별 차이가 없어서
사용했던 버전에 2.0.1버전에 추가한 내용을 합해서 설명하겠습니다.

iReport 를 사용하기 위해서는 Sun Java 2 SDK 1.5 이상의 버전과
Runtime Environment (JRE) 필요하고 jasper 파일을 컴파일 하기 위해서는
Java 2(JDK)가 필요합니다.

우선은 아래 링크를 따라가서 iReport를 다운 받습니다.

http://sourceforge.net/projects/ireport/
2007년9월12일 현재 가장 최근에 릴리즈된 버전이 2.0.1버전 이네요
파일명 : iReport-2.0.1.tar.gz

적당한 위치에 다운 받으시면 됩니다.(전 그냥 바탕화면에 다운 받았습니다)
1.3 대 버전때는 인스톨을 해야 했는데
2.0 대 버전으로 넘어오면서는 인스톨 하지않고 실행이 되더군요.

자 여기까지 제대로 하셨다면 iReport 로딩 화면(분홍색꽃무늬) 보실수 있을겁니다.

사용자 삽입 이미지










Posted by 1010
98..Etc/SVN2011. 12. 26. 10:47
반응형

svn에서 commit을 하다보면 ~~is not a working copy directory 어쩌구 하면서 에러가 뜰때가 있는데
이럴땐 package explorer에 해당폴더 오른쪽클릭해서 team->clean up을 눌러주면된다.

클립업을 할때 ~locked 어쩌구라고 에러문구가 뜬다면
해당소스경로 .svn파일안에 lock이라는 파일을 삭제하면된다.!!
Posted by 1010
98..Etc/Etc...2011. 12. 22. 18:05
반응형

Wiki Engines

This is the canonical list of WikiEngines. See also TheWikiWay (a book). The engines are listed twice, by language and by name.

Overwhelmed by this long list? Try TopTenWikiEngines, ChoosingaWiki, or WikiChoicetree. See WikiFarms for hosted wiki options.

Further discussion and requests are at the end of this page.


Publicly Available Wiki Software sorted by language of implementation

ActiveServerPages (ASP):
  • AspWiki -- Uses MS-Access for the store.
  • ArtificialMemory (www.artificialmemory.net) -- Uses Semantic Web technology based on SQL-Server.
  • FpWiki -- Uses MS-Access and easy to install with Frontpage, without admin priv.
  • JassWiki -- Based on DolphinWikiWeb. Free source [GPL].
  • LimitedWiki (LIKI) -- MS-Access powered wiki with account access controls.
  • NoodleWiki - Basic wiki using ASP and either Access or file system.
  • OpenWiki -- Based on UseModWiki and MoinMoin, has a unique difference engine. BSD license.
  • WikiAsp -- Uses MS-Access. No GPL. Based on AspWiki engine. RSS and Table support.


AdaLanguage:
  • CasBah -- Collective Authoring System Based on Hypertext


AwkLanguage:
  • AwkiAwki -- tiny and fast wiki, RCS, BSD compatible license
  • YawkWiki -- Tiny customizable wiki. Requires GNU Awk (gawk) and Apache. Free Software [GNU GPL].


Bash:

Cheshire:
  • CheshireWiki -- CheshireTwo? based wiki for any SGML DTD and Z39.50 access


CeeLanguage (C):
  • CVSTrac -- Bug and patch-set tracking tool for CVS that also includes a built-in wiki engine (http://www.cvstrac.org/)
  • EdouardsWiki -- A CGI written in ANSI C (see also my note on WritingMyOwnWiki)
  • Fossil -- Distributed software version control system that includes an integrated distributed wiki and an integrated distributed bug-tracking system. All in a single, easy-to-use, stand-alone executable. Both CGI and built-in http server (http://www.fossil-scm.org/)
  • whiki -- http://whiki.wanderinghorse.net -- A CGI-based wiki back-end, written in C, which serves arbitrary wiki formats in JSON format and leaves rendering to the client. It includes a JavaScript client.
  • WikicWeb -- C language based
  • DidiWiki -- A small and simple C wiki with built in http server


CeePlusPlus (C++):

CsharpLanguage (C#):
  • ConclaveDotNet -- Written in C# using its own TopicMaps datastore.
  • DotNetWiki -- Written in C# for the DotNetNuke portal system.
  • FlexWiki -- Nice C# Wiki for .NET; supports file system and SQL Server; nice namespace support
  • FutureWikis -- C# Wiki for .NET; SQL Server only; User-friendly oriented and one-install-many-wikis engine
  • PerSpective? -- Wiki with WYSIWYG editing, attachments, full searching (including MS Office docs) and security.
  • ScrewTurnWiki? (http://www.screwturn.eu) -- Lightweight and simple wiki, with no need for a database backend
  • SushiWiki -- C# Wiki for .NET. Uses XML files,SQL Server or MSDE.
  • WikiDotNet ( Now Deceased )-- Written in C# for ASP.NET, with a SQL Server 2000 back-end.
  • KInKI (http://profnano.org/) -- Written in C# for ASP.NET and MSAccess, very young.
  • MVCwiki -- Written in C# using asp.net MVC framework
  • ASP.NET Wiki Control (http://wikicontrol.codeplex.com) -- An ASP.NET user control to incorporate wiki into an existing website. Utilises Markdown.

ColdFusion (see AllaireColdFusion):

CommonLisp:

BorlandDelphi:

EasyLanguage:

EmacsLisp:

See also http://www.emacswiki.org/cgi-bin/wiki/WikiModeDiscussion


ErlangLanguage:
  • ErlangWiki -- 'Wikie', a standalone wiki and Web server written in Erlang. Supports partially protected and append only pages.


Haskell:

HtagLanguage:
  • HtagWiki -- A wiki written in the HtagLanguage, started only recently, currently adding basic features.


IBasic:
  • WikiWriter -- Jerry Muelvers standalone wiki for Windows


IoLanguage (Io):
  • IoWiki -- a wiki engine written in IoLanguage, showing off PrototypeBasedProgramming. Simplicity is emphasized over power, although it has most of the basics such as page history. Page templates are editable from within the wiki itself -- I don't know why more wikis don't have this feature. No longer in development, but the code is available at https://github.com/tumble/iowiki.


JavaLanguage (Java): also see JavaWikiEngines


JavaScript:

LuaLanguage:

LotusNotes/Domino:
  • DominoWiki? -- a full-featured native wiki for Domino. Put one file on the server, sign the database, and you're up and running. At http://www.openntf.org/


MlLanguage (ML)
  • MiLki -- a wiki written using ML Server Pages.


newLISP

ObjectiveCaml:
  • CocanWiki -- a fully featured wiki written in Objective CAML (GPL license).
  • GikiWiki -- a minimalist wiki that aims to be simple and fast.


PerlLanguage: Retired or no longer maintained:

PhpLanguage (PHP):

PrologLanguage:

PythonLanguage:

Rc Shell (from PlanNine)


RebolLanguage:

Rexx:

RubyLanguage:

SchemeLanguage:

SmalltalkLanguage:

ToolCommandLanguage (Tcl):
  • WiKit -- Based on Tcl, built-in Metakit database, runs almost everywhere, has a local mode, has web-server mode.
  • ProjectForum -- Very self-contained, easy to setup, lots of advanced features.

The Tcl/Tk wiki has a list of all known Tcl-language wiki ( http://wiki.tcl.tk/3747 ).


SuneidoPlatform:

VisualBasic:
  • VbWiki -- Written in Visual Basic, runs under Win95, NT
  • NoteWiki -- Standalone application Wiki that is editable on the fly
  • DotWiki (VB.NET)
  • SdiDesk -- Another stand-alone Wikilike notebook, with some basic diagramming. (Win9X +)


VisualFoxPro:

Vim Script:
  • VimKi -- Written in Vim's native scripting language, runs under console *nix.
  • VimViki -- A personal wiki for vim


Unknown:
  • IronWiki -- Iron Wiki is an experimental wiki incorporating new ideas about user interfacing and scripting.
  • TcbWorks -- Free to certain organizations
  • WikiDoc -- Macro to make MicrosoftWord wiki-like


Publicly Available Wiki Software sorted by name


By feature:

See http://www.wikimatrix.org/ for a full breakdown of wikis by feature. See also http://www.wikiindex.com/Category:Wiki_Engine for alpha listing and WikiEngineTree?


Comments

I think this list should also be categorized by the requirements. Requirements vary. See ChoosingaWiki and look for your favorite features. Other pages may exist that do some breakdown by features. Make it a SimpleWiki - those very simple with no database required or use only textfile db. Or PortalWiki - those not only a wiki but also integrated other things to setup a web portal, like TikiWiki does.

RandyKramer started this page as a "master list" of all known WikiEngines, WikiFarms, and maybe WikiForums at WikiEngineReviewWikiLists. He copied and merged several lists to make this one.


Hello. I want to write my own Wiki engine basically from scratch. Are there any usable modules out there that I can import? I noticed that "GNU Diffutils for Windows" would be good for managing diffs. I'm planning to use a flatfile organization scheme rather than a database/MySQL scheme. I'm also looking for a good "Wiki text to HTML" converter. I was thinking of "OutPage?", but are there any alternatives?

It pretty much has to be a from-scratch organization, because I want it to be a major overhaul. I'm planning to introduce a Wiki moderation system that will eliminate all edit/revert wars and make spamming the Wiki a waste of time. I figure it's simpler for me to roll-my-own than understand other people's code, but modules that could be used as-is would be very helpful.

By definition, a true wiki allows immediate updates, so it can't have a moderation system.

So then make up a separate name for this program. That still doesn't mean it isn't worth writing. There still would be immediate updates. They just wouldn't be promoted to the "main" version of a page until they were moderated. People could browse the "moderated" version by default or say "show me everything, including spam and rubbish".

Yes, a lot of people believe that it's faster/simpler to roll their own code than to understand other people's code. Permit me to cast some doubt.

Some "Wiki text to HTML" converters: "libtext-wikiformat-perl", "libwiki-toolkit-perl", some of the MoinMoin plugins, parsewiki, python-textile, stx2any, and probably a few others I'm forgetting. I think these are all open-source.

I hear that some versions of MediaWiki have a "patrolled button" that sounds similar. Some pages on MeatBall don't go live until they have had no edits for 3 (?) days, which is assumed to indicate community agreement and consensus.

How can something go live after three days when no one has ever had the chance on seeing any content, lest editing it? --CarstenKlein


Hey there, here is very nice article about the beginning of Wiki-Systems in german language. It's called "Tanz der Gehirne", in english: "Dance of the Brains": http://humanist.de/erik/tdg/


CategoryWikiImplementation

EditText of this page (last edited November 18, 2011) or FindPage with title or text search

Meatball 
Posted by 1010
98..Etc/Tomcat2011. 12. 19. 11:37
반응형

윈도우용 설정

%root%\bin
setenv.bat 파일 생성후

set JAVA_OPTS=-Xms256m -Xmx512m

이거 적어줌..

그리고 startup.bat 실행

질답.

1. 어플리케이션 서버에서 필요한 메모리 계산 방법
- 계산식 : (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
- 메모리 계산 예
가정 : Java 1.5를 사용중이며 OS가 120MB를, 디폴트 스택사이즈는 0.5M
  • JVM에 1.5GB할당되었을 경우 : (2GB-1.5Gb-120MB)/(1MB) = ~380 threads
  • JVM에 1.0GB할당되었을 경우 : (2GB-1.0Gb-120MB)/(1MB) = ~880 threads
통계적으로 대략 200명의 동시 사용자 수용할 경우 300MB정도 필요하합니다. 이것을 고려해서 메모리를 계산하면 됩니다.

2. Application Server 에러 대처 방안(java.lang.OutOfMemoryError: PermGen space 현상)
  • Tomcat의 경우 v6.0.14이상의 안정적 릴리즈 된것을 선택
  • JDK1.4보다는 1.5, 1.6의 사용을 권고함
  • -XXMaxPermSize 설정을 통해 perm 사이즈를 증가시킴
  • JHat으로 메모리릭 원인을 찾고 JConsole, Lambda probe 등을 통해 메모리 모니터링을 함
  • Application Server운영자는 Garbage Collection에 대한 이해가 있어야 함

3. Tomcat에서 설정 예시

  • 힙메모리 정보를 출력 : -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC

위 설정을 통해 출력되는 로그를 보고 New Generation의 eden 영역, Old Generation 영역, Permanent 영역을 확인하여 각 영역이 작으면 아래와 같은 설정으로 적당 사이즈를 확보해 줍니다.

  • 도출된 설정 : -Xms256m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m -XX:SurvivorRatio=5
    -Xms : 최소 힙 싸이즈
    -Xmx : 최대 힙 싸이즈
    -XX:NewSize : New Generation의 최소 싸이즈
    -XX:MaxNewSize : New Generation의 최대 싸이즈
    -XX:MaxPermSize : Permanent Generation의 최대 싸이즈 가 되겠다.
    -XX:SurvivorRatio : 영역비율(New Generation)

결론적으로 적용할 설정은 아래와 같습니다.

  • CATALINA_OPTS="-server -Xss256k -Xms256m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m -XX:SurvivorRatio=5 -XX:ReservedCodeCacheSize=128m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true "

Open Soure는 100% 안정적이지 않기 때문에 가장 최신의 안정적인 버젼이 릴리즈되는지 항상 예의 주시하여 버전업에 게을러서는 안됩니다

출처 : http://kiboom.tistory.com/7

Posted by 1010
54.iBATIS, MyBatis2011. 12. 13. 11:39
반응형

이번에 프로젝트를 하면서 동일한 성격의 테이블이 여러개라 하나의 쿼리를 두고 테이블 명과 몇가지 다른 컬럼에 대해서는 동적으로 생성해서 가져오게 했다..
하지만 몇번 재대로 실행이 되는가 싶더니 테스트 진행 과정에서 컬럼을 가져오지 못하는 현상이 발생했다.

일단은 혹시나 모를 문제가 있지 않을까 해서 쿼리를 분리하고 동적으로 생성되어야 되는 부분은 쿼리를 따로 작성해서 select 하도록 하였다.

후에 이 문제에 대해서 살펴봤더니 원인은 ibatis가 매핑 정보를 캐싱하기 때문이라고 한다.

이문제를 해결하려면 다음과 같이 사용할수가 있다.

<select id="select" remapResults="true" parameterClass="dataMap" resultClass="dataMap">
SELECT
bbs_seq
,title
,contents
,register_date
<isEqual property="table" compareValue="photo_gallery">
,image_name
,image_path
,image_size
</isEqual>
FROM $table$
<include refid="globalWhere" />
</select>

다음 코드는 일반적으로 같은 내용을 담고 있지만 photo_gallery 테이블인 경우는 image_name, image_path, image_size 컬럼을 동적으로 생성해서 가져오는 쿼리이다.
일반적으로는 파일 테이블을 따로 두겠지만 예제를 설명하기 위해서 위와 같이 하였다..

위에 테이블에서 remapResults="true" 부분이 없을 경우 위에서 설명한 에러가 발생할수가 있다 하지만 이부분을 넣어 주면서 쿼리를 가져올때 매번 새로 생성한 쿼리를 가져오기 때문에 다음부터는 동적으로 컬럼을 가져오면서 발생한 에러를 해결 할 수가 있다.

출처 : http://hmjkor.tistory.com/164
Posted by 1010
54.iBATIS, MyBatis2011. 12. 13. 11:36
반응형

iBatis 실행구조
  • 개발자에게 JavaBeans objects를 PreparedStatement parameters와 ResultMaps로 쉽게 매핑을 할 수 있도록 한다.
  • 이를 통하여 database에 접근하기 위한 자바 코드의 양을 줄일 수 있다.
iBatis 실행구조
iBatis 실행구조

[편집] 실행절차

  • 객체를 파라미터로 전달
    • JavaBeans, Map or primitive wrapper
  • 매핑되는 SQL문장을 수행
    • SQL Maps 프레임워크는 PreparedStatment 인스턴스 생성
    • 객체로부터 제공되는 값들을 파라미터로 설정
  • SQL 문장을 수행하고 ResultSet으로부터 결과 객체를 생성.
    • Update의 경우에는 영향을 받은 rows 수가 반환
    • 쿼리의 경우 하나 혹은 여러 객체들이 반환

[편집] iBatis관련 파일구성

  • SQL Map Configuration XML 파일
    • 설정 관련 정보 제공
  • SQL Map XML 파일
    • SQL 문장들을 제공
  • ibatis 라이브러리
    • 런타임 엔진 제공

[편집] slqmap 위치설정(sqlmap-config.xml)

  • src 의 config 안에 sql-map. xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
		"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
 
<sqlMapConfig>
	<!--cacheMap namespace="GlobalCache"> //new definition
     <cacheModel id="cache" readOnly="true" serialize="true" type="LRU">
         <flushOnExecute statement="insert*"/>
         <flushOnExecute statement="update*"/>
         <flushOnExecute statement="delete*"/>
         <property name="size" value="100000"/>
         <flushInterval hours="24"/>
     </cacheModel>  
	</cacheMap-->
 
	<!--settings cacheModelsEnabled="true" /-->
	<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="false"/>
	
	//Dao의 xml을 등록.
	<!-- ==========Framework Configuration Section============= -->
	<sqlMap resource="com/daewoobrenic/com/menu/dao/sqlmap/Menu.xml"/>
	<sqlMap resource="com/daewoobrenic/com/program/dao/sqlmap/Program.xml"/>
	<sqlMap resource="com/daewoobrenic/com/menu/authority/dao/sqlmap/Auth.xml"/>
	<sqlMap resource="com/daewoobrenic/com/user/dao/sqlmap/User.xml"/>
	<sqlMap resource="com/daewoobrenic/com/code/dao/sqlmap/Code.xml"/>
	<sqlMap resource="com/daewoobrenic/com/term/dao/sqlmap/Term.xml"/>
	
</sqlMapConfig>

[편집] SQL Map XML 파일

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Program">
 
			
	<typeAlias alias="program" type="com.daewoobrenic.com.program.model.Program"/>
 
	<resultMap id="program-resultMap" class="program" >
		<result property="id" column="program_id"/>
		<result property="name" column="program_name"/>
		<result property="path" column="program_path"/>
		<result property="desc" column="program_desc"/>
		<result property="div" column="div_code"/>
		<result property="scrtgrad" column="scrtgrad_code"/>
	</resultMap>	
<statement id="insertProgram" parameterClass="program" >
		INSERT INTO
		PROGRAM( program_id, program_name, program_path, program_desc, div_code, scrtgrad_code, first_insert_time, last_update_time )
		VALUES( #id#, #name#, #path#, #desc#, #div#, #scrtgrad#, SYSTIMESTAMP, SYSTIMESTAMP )
	</statement>
	  	
	<statement id="selectProgram" parameterClass="string" resultMap="program-resultMap" cacheModel="program-cache">
		SELECT program_id, program_name, program_path, program_desc, div_code, scrtgrad_code FROM PROGRAM
		WHERE program_id = #id#
	</statement>
	 
	<statement id="selectProgramList" parameterClass="program" resultMap="program-resultMap" cacheModel="program-cache">
		SELECT  program_id, program_name, program_path, program_desc, div_code, scrtgrad_code FROM PROGRAM
		ORDER BY program_id
	</statement>
	 
	<statement id="updateProgram" parameterClass="program">
		UPDATE PROGRAM SET
			program_id 			= #id#,
			program_name		= #name#,
			program_path		= #path#,
			program_desc		= #desc#,
			div_code            = #div#,
			scrtgrad_code       = #scrtgrad#,
			last_update_time	= SYSTIMESTAMP
		WHERE program_id = #id#
	</statement>
					
	<statement id="deleteProgram" parameterClass="string">
		DELETE FROM PROGRAM WHERE program_id = #id#
	</statement>
	</statement>
</sqlMap>
  • namespace
  • typeAlias - SQL maping을 할 model의 이름
  • resultMap
    • Query 컬럼명과 result 클래스의 property가 동일 할 경우에 ResultMap 생략 가능
    • class
      • resultMap 의 class 유형
      • JavaBean과 java.util.Map 모두 사용 가능
      • JavaBean 일 때
        • Query 조회결과 Row별로 JavaBean을 생성
        • Result element 속성에 Column 값을 저장
      • java.util.HashMap일때
        • Query 조회결과 Row별로 HashMap 생성
        • Result element의 id를 Key, Column 값을 Value로 HashMap에 저장
    • property : model
    • program_id : db의 column
    • ParameterClass, ParameterMap - db에 데이터가 들어갈 때
    • resultMap,resultClass- db에서 데이터를 꺼내올때
    • 여기서 #id# 는 id를 resultMap에서 정한 db에 컬럼에 맞는 값으로 binding 한다는 의미
  • ParameterMap
    • ?를 사용하여 순서대로 바인딩
<parameterMap id="insert-product-param" class="com.domain.Product">
  <parameter property="id"/>
  <parameter property="description"/>
</parameterMap>
<statement id="insertProduct" parameterMap="insert-product-param">
  insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (?,?);
</statement>

[편집] <![CDATA[ …. ]]>의 사용법

<statement id="getPersonsByAge" parameterClass="int" resultClass="examples.domain.Person">
<![CDATA[
  SELECT *
  FROM PERSON
  WHERE AGE > #value#
]]>
</statement>

[편집] cache 사용법

  • cacheModel
<cacheModel id="product-cache" imlementation="LRU">
  <flushInterval hours="24"/>
  <flushOnExecute statement="insertProduct"/>
  <flushOnExecute statement="updateProduct"/>
  <flushOnExecute statement="deleteProduct"/>
  <property name="size" value="1000" />
</cacheModel>
<statement id="getProductList" parameterClass="int" cacheModel="product-cache">
	select * from PRODUCT where PRD_CAT_ID = #value#
</statement>
  • Statement의 where조건을 기준으로 데이터 cache
    • imlementation: cache-types
      • memory : MEMORY cache는 reference type 을 이용하여 cache behavior 를 관리한다. 즉 garbage collector가 효출적으로 cache내에서의 저장여부를 결정한다.
      • LRU :Least Recently Used algorithm
      • FIFO : First In First Out algorithm
      • OSCACHE : OSCaching framework
    • 매 24시간 주기로 갱신
    • insertProduct, updateProduct, deleteProduct 문이 실행 시 갱신
    • Cache 사이즈: 1000 Kbyte
  • Dynamic Query
Binary Condition UnBinary Condition Loop
<isEqual>
<isNotEqual>
<isGreaterThan>
<isLessThan>
<isLessEqual>
<isPropertyAvailable>
<isNotPropertyAvailable>
<isNull>
<isNotNull>
<isEmpty>
<isNotEmpty>

<iterate>


<select id="dynamicGetAccountList“ cacheModel="account-cache"
    resultMap="account-result" >
  select * from ACCOUNT
    <isGreaterThan prepend="and" property="id" compareValue="0">
    where ACC_ID = #id#
    </isGreaterThan>
  order by ACC_LAST_NAME
</select>



[편집] Dao 구조

package com.daewoobrenic.com.program.dao;
 
import java.util.List;
 
import com.daewoobrenic.com.program.model.Program;
import com.daewoobrenic.jcf.dao.BaseSqlMapClientDAO;
 
public class ProgramDAOImpl extends BaseSqlMapClientDAO implements ProgramDAO {
 
	public int deleteProgram(String programId) {
		return executeDelete("deleteProgram", programId);
	}
 
	public int insertProgram(Program program) {
		return executeUpdate("insertProgram", program);
	}
 
	public Program selectProgram(String programId) {
		return (Program) executeQueryForObject("selectProgram", programId);
	}
 
	public List selectProgramList() {
		return executeQueryForList("selectProgramList", null);
	}
 
	public int updateProgram(Program program) {
		return executeUpdate("updateProgram", program);
	}
	
}
  • jcf.dao.ibatis.BaseSqlMapClientDAO을 상속받음.
  • sqlmap 설정파일에서 받을 수 있는 parameter형태를 넘겨야함.
  • executeQueryForObject 는 1건의 조회시 사용하며 반드시 어떤타입으로 받을지 ClassCasting을 하도록 함
  • executeQueryForList는 여러건 조회시 사용하며 List형태로 리턴함.
  • executeUpdate는 insert/update와 같이 데이터에 변경을 가할 때 사용함.


출처 : http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/IBatis_Framework

Posted by 1010
54.iBATIS, MyBatis2011. 12. 13. 11:18
반응형

iBatis CacheModel(캐시모델)

개발자들이 Application에 도입하는 대부분의 캐싱은 오랜 시간동안 변경되지 않는 데이터를 위한 것이다. 그러나 의외로 캐싱된 데이터가 쓰기에 의해 변경되는 경우도 있다.

개발자들은 나름대로 캐싱모델을 정의하고, 구현하여 사용한다. 그러나 캐싱 될 데이터를 추가하고, 더 이상 사용되지 않는 데이터는 삭제하고, 정해진 시간별로 캐싱 된 데이터를 삭제하는 등의 많은 기능들을 정의하고 구현하여 사용하려고 하는 솔직히 쉬운 일도 아니고, "노력 대비 성능" 또한 보장할 수가 없다.

그래서 요즘 많은 ORM 솔루션들이 데이터 캐싱을 지원한다. iBatis 또한 여타 ORM 솔루션과 같이 데이터 캐싱을 지원한다. 그러나 iBatis의 데이터 캐싱은 다른 ORM 솔루션의 데이터 캐싱과는 조금 개념이 다르다. 여타의 ORM 솔루션들은 주로 DataBase Table 객체에 매핑하는 데 중점을 두고, iBatis는 SQL 구문을 객체에 매핑하도록 되어 있다.


-- CacheModel 이해하기

CacheModel은 iBatis의 모든 캐시 구현체를 정의하는 기반이 되는 곳이다. SQL Maps 설정 안에서 캐시 모델 설정을 정의하고 하나 이상의 쿼리 매핑 구문이 이를 사용할 수 있다.


* CacheModel 속성들 *

id (필수) : 유일한 ID를 지정. CacheModel에 설정 된 캐시를 사용하고 하는 쿼리 매핑 구문에서 ID를 참조한다.

type (필수) : 이 값은 CacheModel이 설정하는 캐시의 타입을 의미한다. 사용 가능한 값으로 MEMORY, LRU, FIFO, OSCACHE가 있다. 이 속성은 사용자 정의 CacheController 구현체의 완전한 클래스 이름으로 지정해도 된다.

readOnly (선택) : 읽기전용 여부. 이 값을 true로 지정하면 캐시가 읽기 전용 캐시로 사용될 것임을 의미한다. 읽기 전용 캐시에서 가져온 객체는 객체의 Property들을 변경할 수 없다.

serialize (선택) : 캐시의 내용을 가져올 때 객체의 모든 값을 복사하여 새로운 객체를 생성하여 전달할지 여부를 지정한다.


여기서 readOnly 속성 값에 대해 좀더 알아보면 readOnly 속성은 단순히 CcheModel에게 캐시된 객체를 어떻게 가져와서 저장할지 알려주는 지시자이다. 이 속성값이 true이면 가져온 내용을 변경해도 CacheModel은 변경되지 않는다. 만약 false로 지정되면 주의해야 하는데 두 명 이상의 사용자가 캐시된 참조의 동일한 인스턴스를 가져갈 수 없음을 의미한다.


* 내장 CacheModel 타입들 *

MEMORY : 단순하게 캐시된 데이터를 가비지 컬렉터가 삭제할 때까지 메모리에 저장한다.

FIFO : 고정 된 크기의 모델로 "first in first out (먼저 들어간 값을 먼저 삭제)" 알고리즘을 사용하여 메모리에서 캐시 항목들을 삭제한다.

LRU : FIFO와 다른 고정 된 크기의 모델로 "least recently used (최근에 가장 오랜동안 사용하지 않은 값을 캐시에서 먼저 삭제)" 알고리즘을 사용하여 메모리에서 캐시 항목들을 삭제한다.

OSCACHE : OpenSymphony Cache를 사용한다. (OSCashe Lib와 설정이 함께해야 한다.)


* readOnly와 serialize 속성의 조합에 대한 요약 *

readOnly (true) / serialize(false) : 성능 좋음. 캐시 된 객체를 가장 빠르게 가져온다. 캐시 된 객체의 공유 인스턴스를 반환하며, 잘못 사용하면 문제를 일으킬 수도 있다.

readOnly (false) / serialize(true) : 성능 좋음. 캐시 된 객체를 빠르게 가져온다. 캐시 된 객체를 깊은 복사 작업을 통해 가져온다.

readOnly (false) / serialize(false) : 주의요망! 캐시는 오직 호출하는 스레드의 세션이 살아있는 동안에만 관련되고, 다른 쓰레드는 사용할 수 없다.

readOnly (true) / serialize(true) : 성능 나쁨. 무의미한 설정이라는 점을 제외하면 readOnly (true) / serialize(true)와 동일하게 작동한다.


readOnly=true이고 serialize=false이면 캐시 된 객체가 전역적으로 공유되기 때문에 모든 사용자는 다른 세션에서 부적절하게 변경 된 객체를 가져오게 될 수 있는 문제의 소지가 있다. readOnly=false이고 serialze=true를 사용하면 캐시에서 가져온 객체의 깊은 복사작업의 결과를 가져오기 때문에 캐시에서 가져온 객체가 값은 비록 같지만 동일한 인스턴스가 아니라는 의미이다. 이것은 캐시에서 가져온 객체의 변경사항이 호출한 세션 안에서만 작용된다.


-- 캐시 비우기 (Cache Flushing)

사용자가 정의 한 CacheModel은 캐시된 데이터를 모두 비울때 사용하는 공통적인 요소를 가지고 있다. 이것은 이전에 캐시된 모든 데이터를 비우고 새롭게 데이터를 캐시하게 된다.


* 캐시를 비우는 flush 요소들 *

<flushOnExecute> : 지정 된 쿼리 매핑 구문이 실행되면 캐시의 모든 데이터를 비운다.

<flushInterval> : 캐시를 비우는 시간 간격을 정의한다.


<flushOnExecute>

속성으로 statement 하나만을 가지며, 이 속성에 지정된 매핑 구문이 실행이 될 때 자동으로 캐시의 데이터를 모두 비운다. 예를 들어 상품카테고리의 카테고리가 추가, 수정, 삭제 될면 이전에 캐시된 신빙성이 떨어지는 데이터를 모두 비우게 할 수 있다.

그러나, 이 속성은 캐시된 데이터를 모두 비우고 새롭게 캐시를 하게 되므로 데이터를 자주 변경하는 매핑 구문에 의존하게 되면 캐시의 효율성이 떨어지게 된다.


<SqlMap namespace="category">

<cacheModel id="categoryCache" type="MEMORY">

...

<flushOnExecute statement="category.insert" />

</cacheModel>

...

<insert id="insert" parameterClass="java.util.Map">

...

</insert>


<flushInterval>

<flushOnExecute> 보다 좀더 간편하게 사용할 수 있는 요소로 시간에 의존하여 지정한 시간이 경과되면 반복적으로 캐시된 데이터를 모두 비운다. 가격은 시(hours),분(minutes),초(seconds) 또는 밀리초(milliseconds)로 지정할 수 있다. <flushInterval>은 하나의 속성만을 허용하기 때문에 5시간 13분 40초와 같이 지정하고 싶다면 초로 계산하여 지정해야 한다. 그리고, 특정 시간을 지정할 수는 없다.


<cacheModel id="categoryCache" type="MEMORY">

...

<flushInterval hours="12" />

</cacheModel>


-- CacheModel Properties 설정하기

CacheModel은 플러그인의 형태로 제공되기 때문에 임의의 설정 값을 제공할 수 있는 방법이 필요한데 <property>를 이용하여 처리한다.


* <property> 요소의 속성들 *

name : 필수입력으로 설정할 프로퍼티의 이름

value : 필수입력으로 설정할 프로퍼티의 값


-- CacheModel Type

앞에서 언급했듯이 iBatis에서 사용할 수 있는 CacheModel Type은 MEMORY, LRU, FIFO, OSCACHE 4가지가 있다.


MEMORY

객체 참조를 기반으로 한 캐시이다. 캐시 내의 각 객체의 참조 타입(<reference-type>) 속성을 갖고 있다. 객체의 참조 타입은 가비지 켈렉터에게 객체를 어떻게 다룰지에 대한 힌트를 제공한다. MEMORY CacheModel은 객체에 접근하는 방식보다는 메모리 관리에 중점을 둔 Application에 적합하다.


* MEMORY CacheModel 참조 타입 *

WEAK : 캐시된 데이터를 빨리 비운다. 기본설정 값이며 가비지 켈렉터에 의해 수거되는 것을 막지않고 놔둔다. 이 방식은 일관성 있게 객체에 접근하는 캐시를 사용할 때 잘 적동한다. 캐시를 비우는 비율이 빠른편이기 때문에 메모리 제한을 넘기지 못하도록 보장은 하나 DataBase 접근확률이 높아진다.

SOFT : 메모리 용량이 허락하는 한 캐시된 객체를 보관한다. 가비지 켈렉터는 더 많은 메모리가 필요하다고 판단되기 전까지는 이 객체들을 수거하지 않는다. 메모리 제한을 넘기지 못하도록 보장하며, WEAK 참조보다 DataBase 접근확률은 적은 편이다.

STRONG : 메모리의 한계가 얼마든지 관계없이 객체를 계속 보관한다. 가비지 켈렉터에 의한 수거는 없다. 이 참조타입은 정적이고 작고 장기적으로 사용할 객체를 캐시할 때 유용하다. DataBase 접근확률은 최소할 수 있으나, 캐시되는 객체의 용량이 너무 커져서 메모리 부족이 발생될 수 있다.


<cacheModel id="categoryCache" type="MEMORY">

<flushInterval hours="12" />

<flushOnExecute statement="insert" />

<property name="reference-type" value="WEAK" />

</cacheModel>


LRU

가장 최근에 가장 오랫동안 사용되자 않은 것을 제거하는 방식으로 캐시를 관리한다. 캐시의 객체를 제거하는 것은 오직 캐시의 용량이 제한을 넘겼을 때 한번만 발생된다. 특정 객체에 아주 빈번하게 접근하는 캐시를 관리할 때 매우 적합하다. <property> 요소를 사용하여 지정할 수 있는 프로퍼티는 size 하나로 캐시에 저장될 수 있는 최대 개수를 지정한다.


<cacheModel id="categoryCache" type="LRU">

<flushInterval hours="12" />

<flushOnExecute statement="insert" />

<property name="size" value="200" />

</cacheModel>


FIFO

먼저 캐시 된 객체를 먼저 삭제한다. 캐시의 객체를 제거하는 것은 오직 캐시의 용량이 제한을 넘겼을 때 한번만 발생된다. 생존기간에 기반을 두고 있기 때문에 초기에 캐시에 저장되는 그 순간에 더 많이 사용되는 객체를 캐싱할때 효과적이다. <property> 요소를 사용하여 지정할 수 있는 프로퍼티는 size 하나로 캐시에 저장될 수 있는 최대 개수를 지정한다.


<cacheModel id="categoryCache" type="FIFO">

<flushInterval hours="12" />

<flushOnExecute statement="insert" />

<property name="size" value="200" />

</cacheModel>


OSCACHE

Open Symphoy(http://www.opensymphony.com/oscache)의 OSCache를 사용한다.OSCACHE를 사용하기 위해서는 OSCache 라이브러리와 설정정보가 필요하다.


<cacheModel id="categoryCache" type="OSCACHE">

<flushInterval hours="12" />

<flushOnExecute statement="insert" />

</cacheModel>


사용자가 만든 캐시 모델

앞에서 언급했듯이 iBatis의 캐시 모델은 플러그인되는 형태여서 사용자가 캐시모델을 만들어서 사용할 수 있다. 사용자가 자신의 캐시모델을 만들기 위해서는 com.ibatis.sqlmap.engine.cache.CacheController 인터페이스를 구현하면 되고, 이름은 alias를 사용하면 된다.


출처 : http://saintjohn.egloos.com/10563593

Posted by 1010
54.iBATIS, MyBatis2011. 12. 13. 11:17
반응형

출처 : http://theeye.pe.kr/entry/knowing-oscache-model-on-integrated-ibatis

iBATIS는 공식적으로 캐시를 할때에 OSCache를 사용할 수 있도록 되어있습니다. 하지만 그 기능이 매우 자동적이며 제한적이고 세세한 설정을 개발자가 할수가 없습니다. 그래서 다음을 한번 알아 보기로 할까요. 다음의 예시는 [이곳]에 언급된 내용을 살짝 수정하였습니다.

<cacheModel type="OSCACHE" id="cacheModel" readOnly="true"> 
<flushInterval hours="24"/>
<flushOnExecute statement="flushCache"/>
</cacheModel>
<resultMap class="kr.pe.theeye.Cache" id="CacheResult">
...
</resultMap>

<insert id="flushCache" resultClass="string">
INSERT ...
</insert>

<select id="makeCache1" resultMap="CacheResult" cacheModel="cacheModel">
SELECT ...
</select>

<select id="makeCache2" resultMap="CacheResult" cacheModel="cacheModel">
SELECT ...
</select>

<select id="makeCache3" resultMap="CacheResult" parameterClass="int"
cacheModel="cacheModel">
SELECT ... WHERE PAGE = #value#
</select>

위의 SQL맵 예제에서는 INSERT문 한개와 SELECT문 3개가 존재합니다. 모두 cacheModel이라는 id의 캐시모델과 연관되어집니다. 이것을 간단하게 그림으로 그려보면 다음과 같은 모양을 가지고 있습니다.

사용자 삽입 이미지

그려놓고 보니깐 좀 말이 안되는 그림 같아 보이네요;; 아무튼 하나의 캐시 모델에 3가지의 캐시를 생성할 수 있는 조건이 있고 2가지 캐시를 삭제할 수 있는 조건이 있다고 봐주시면 되겠습니다. 둥근 사각형은 개발자가 임의로 호출을 해야만 하는 기능들이고 위의 동그라미는 캐시 유지 시간 설정으로 봐주시면 되겠습니다.

이제 다음의 몇가지 예시 상황들에 대한 캐시의 처리 과정에 대해 알아보겠습니다.

1. 한개의 캐시 처리 (makeCache1 → flushCache)
makeCache1이 수행되면 cacheModel에 하나의 캐시가 생성됩니다. 앞으로 makeCache1이 호출될때마다 캐시가 존재하는한 DB에 접근없이 캐시결과값을 제공하게 됩니다. flushCache를 수행하면 캐시가 삭제됩니다. 다시 makeCache1을 호출하면 DB에서 결과를 가져와서 반환함과 동시에 캐시를 생성하게 됩니다. 캐시가 생성된 시점에서 flushInterval에 설정된 시간이 경과하도록 flushCache가 호출되지 않는다면 시간 만료로 자동 삭제됩니다.

2. 두개의 캐시 처리 (makeCache1 → makeCache2 → flushCache)
makeCache1이 호출되면 cacheModel에 하나의 캐시가 생성됩니다. makeCache2가 호출되면 마찬가지로 cacheModel에 또다른 하나의 캐시가 생성됩니다. 이 두개의 캐시는 엄연히 다르며 각각의 makeCacheX가 호출될때 해당하는 만들어진 캐시값을 반환하게 됩니다. 하지만 둘다 모두 동일하게 cacheModel안에 소속됩니다. 이어서 flushCache를 호출하게 되면 두 캐시가 모두 삭제됩니다. 정확히는 flush에 대한 설정을 해두면 해당 캐시모델의 모든 캐시를 소거한다고 보시면 됩니다. 그러므로 이런 부분에 주의하여 캐시모델을 함께 사용할지 따로 다른 캐시모델을 만들지를 결정하셔야 합니다.

3. 인자값의 차이에 따른 처리 (makeCache3[1] -> makeCache3[2] -> flushCache)
makeCache3에는 parameterClass를 사용하여 동적인 쿼리를 수행하도록 되어있습니다. 예시로 간단하게 int값을 받도록 하였는데요. 캐시를 생성할때의 키값에는 이 인자값들이 모두 포함되어 키를 이룹니다. 그러므로 paramterClass로 넘어오는 값이 1일때와 2일때는 다른 쿼리(키)가 됩니다. 그러므로 1이라는 값의 인자를 받아 실행되는 makeCache3의 캐시와 2라는 값을 받아 실행되는 makeCache3는 각각 별개의 캐시가 생성됩니다. 마찬가지로 하나의 cacheModel안에서 호출되지만요. flushCache를 호출하면 이 두캐시가 모두 삭제됩니다.


결론을 내보자면 위와 같은 iBATIS에서 제공하는 기본적인 캐시모델로는 같은 쿼리지만 다른 결과가 나올 수 있는 부분에는 사용할 수 없습니다. SNS 서비스에서 볼 수 있을 다음을 생각해 봅시다.

1. 친구들의 최근근황을 모아서 볼 수 있는 기능이 있다고 가정한다.
2. 사용자가 접속하여 친구들의 최근근황을 확인하였다. [캐시 생성됨]
3. 친구중 한명이 최근 근황을 업데이트 하였다.
4. 사용자가 다시한번 친구들의 최근근황을 확인하였다. [캐시값 반환됨]

위를 수행하였을 때 친구들의 정보가 바뀌어도 사용자는 계속 캐시된 값을 받게됨을 알 수 있습니다. 그러므로 친구들의 업데이트 된 정보를 적시에 얻기가 힘듭니다. 하지만 그렇다고 친구의 정보가 업데이트 될때 다른 사용자의 캐시를 삭제하는데도 무리가 있습니다. 왜냐하면 캐시 키 값을 모르기 때문이죠. 이부분을 해결하려면 iBATIS의 SQL맵 캐시 기능을 사용하지 말고 자체적인 알고리즘으로 구현을 해야 할 것 같습니다.
Posted by 1010
56. Eclipse Etc.../Eclipse2011. 11. 14. 16:16
반응형

java.lang.OutOfMemoryError: Java heap space발생시 tomcat memory option

이클립스에서 여러개의 프로젝트를 동시에 올리고, 개발을 해야 할일이 꽤 많다.

여러개의 서비스를 띄우다가 보면, 다음과 같이 메모리 에러가 종종 발생을 한다.

메모리를 많이 사용하는 프로젝트는 서비스 하나만 띄우도 발생을 한다.

2008-04-08 08:45:19 [ERROR](StandardWrapperValve.java:253) Servlet.service() for servlet action threw exception
java.lang.OutOfMemoryError: Java heap space



servers tab에서 해당 server를 더블클릭을 한다.
User inserted image


다음과 같은 화면이 나온다.
User inserted image

open launch configuration을 클릭을 하고, argument tab에서 다음과 같은 옵션을 추가해야 한다.

MaxPermSize는 spring이나 여러가지 framework에서 내부적으로 reflection을 많이 사용하기때문에 반드시 메모리를 늘려줘야 한다.

tomcat memory option
-XX:MaxPermSize=128m -Xms128m -Xmx512m


User inserted image



출처 : http://www.ologist.co.kr/866
Posted by 1010
01.JAVA/Java2011. 10. 29. 16:15
반응형

serialVersionUID 기본 알고리즘

자바에서 serial version uid를 생성하는 것은 기본적으로 서로 다른 클래스들 간의 구별을 하기 위한 것이다.
동일한 이름을 가진 클래스라 하더라도 메소드나 필드가 다를 경우 서로 다른 것으로 인식하는 것이 기본이기 때문에 Object Serialization을 할 때 import/export 등에서 버전에 따라 종종 불일치 에러가 발생하는 것을 만나게 된다.

클래스가 바뀌었다는 것을 기본 serial version uid 계산 알고리즘을 통해서 검출했기 때문이다.
물론
private static final long serialVersionUID = -6120832682080437368L;
와 같이 클래스에 직접 serial version uid 값을 지정해버리면 기본 uid 계산 알고리즘을 사용하지 않고 이 값을 사용하게 되므로 버전에 따른 불일치 에러는 막을 수 있다.

이렇게 하지 않은 경우 사소한 메소드 시그너처 변경으로도 불일치가 발생하게 된다.

기본 uid 값 계산에 사용되는 정보들은 다음과 같다.

1. 클래스 이름 (fully qualified)
2. 클래스의 접근 제한자 (public, final, abstract, 또 interface 여부)
3. 각 멤버 필드의 시그너처 (이름과 접근 제한자, 타입)
4. 각 멤버 메소드의 시그너처 (이름과 접근 제한자, 각 인자별 정보, 리턴 타입)
4. 각 생성자의 시그너처 (접근 제한자, 각 인자별 정보)
5. static initializer block 존재 유무

이러한 값들을 사용하여 적당한 문자열을 만든 다음 SHA 알고리즘을 사용하여 해시값을 계산한 값이 기본 UID 값이 된다.
이때 필드나 메소드, 생성자의 선언 순서는 바뀌더라도 상관없도록 sort를 한다음 계산을 한다.

여기에서 알 수 있듯이 사소한 변경만으로도 기본 suid 값은 변경되게 마련이다.
따라서 serializable 객체로 객체 통신에 사용되는 클래스들은 가능하면 명시적으로 suid 값을 지정해주는 것이 버전 관리의 문제를 피할 수 있는 가장 깨끗한 방법이다.


출처 : http://logonjava.blogspot.com/2006/05/serialversionuid.html





serialversionutil-civan.zip

데이타의 전송은 객체건 뭐건 결국 바이트의 흐름으로 전송하게 된다. 저장도 그렇고...
다시 읽었을 때 객체의 자료구조를 그대로 보존하지 않으면 않된다.(일명 Serialzation)
자바에선 Serializable 인터페이스만 구현하면 알아서 이를 보장해주기에 단지 implements Serializable 만 추가하면 된다.

일전에도 언급한 적이 있지만 5.0 이후부터는 Serialzable 인터페이스를 구현한 클래스에서
static final long 타입의 serialVersionUID 상수를 선언하라는 경고문구를
이클립스의 노란 warning 아이콘과 더불어 확인 할 수 있다.

만일 serialVersionUID를 지정하지 않으면 실행시점에서 JVM이 디폴트 값을 산정하게 되며,
그 알고리즘은 Java(TM) Object Serialization Specification 정의된 것을 따른다고 한다.
한마디로 굳이 신경 쓸필요는 없다는 뜻이고 이클립스내에서 이 경고아이콘을 제외하도록 설정할 수도 있다.

그러나 모든 serialization이 필요한 클래스에는 명시적으로 serialVersionUID를 선언해줄것을 강력하게 권유하고 있는데
그 이유는 디폴트 serialVersionUID 계산은 클래스의 세부 사항을 매우 민감하게 반영하기 때문에 컴파일러 구현체에 따라서 달라질 수 있어 deserialization(serialization 했던 객체를 복구하는 과정)과정에서 예상하지 못한 InvalidClassExceptions을 유발할 수 있다.
라는 것이 그 이유란다.

즉 서로 다른 자바 컴파일러 구현체 사이에서도 동일한 serialVersionUID값을 얻기 위해서는 명시적으로 serialVersionUID값을 선언해야 하며 가능한 serialVersionUID을 private으로 선언하라는 것이다.
(상속되어 쓰여지는 것은 유용하지 않고, 해당 클래스에서만 쓰일 것이기 때문에....)

이궁 이렇게 이야기하는데 한줄 더 써주지 머...
ㅋ 말은 이리 하지만 무진장 귀찮다. serialver.exe를 이용하면 된다는데 다른 건 없나 찾아보게 되었다

첨부파일을 압축을 풀고 이클립스 플러그인 디렉토리에 넣어두면 자동생성 플러그인 설치는 끝
3.3에서도 이상없이 작동한다. 사용방법은 다음과 같다.
파일을 선택 마우스 오른클릭하면
Add serialVersionUID 라는 메뉴가 추가 되어 있는것을 확인할 수 있다.

그러면 다음과 같이 클래스에 serialVersionUID가 자동 생성되었슴을 확인할 수 있다.

간단히 private 만 적어주면 끝...



출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0LU4x&articleno=5216095#ajax_history_home



이클립스를 쓰다보면 코드엔 이상이 없는데 왠 노란색 warining 표시가 쭈욱 표시되어 있다.

표시되는것이 눈에 거슬려도 빨간색 Error도 아니고 실행엔 문제가 없기에 무시하고 넘어가곤 했는데 알고 지나가는거랑 모르고 지나는건 틀리기에 함 살펴보기로 했다


메시지를 살펴보니

warning: [serial] serializable class <CLASSNAME> has no definition of serialVersionUID 라고 되어 있다.


해석하면 직렬화 가능 클래스에서 long 유형의 static final serialVersionUID 필드를 선언하지 않습니다 라는데 serialVersionUID? 이게 머지? 이런걸 쓰이는 곳이 없는데...


알아보니 java beans 객체는 serialVersionUID 를 가지게 되는데 이것은 또한

jvm 에서 특정 객체를 인식하기 위한 UID 이기도 하다라는걸 찾게 되었다.


1.4까지는 java beans 에서 serialVersionUID를 명시하지 않아도 JVM에서 serialVersionUID 를 제네레이션 해서 관리하고 있지만 1.5 부턴 serialVersionUID를 명시하길 권고하고 있다고 하니 생각해볼 문제인듯(머 권고사항이라고 하니 기냥 무시할까나..-_-)


해결방법은 serialVersionUID 은 롱 타입의 값으로 다음과 같이 유일한 값을 지정해주면된다.

private static final long serialVersionUID = 1222179582713735628L;


단순히 이클립스 내에서 해당 warning메시지를 표시하지 않기를 원한다면

Window -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Potential programming problems -> Serializable class without
serialVersionUID -> Ignore.


한글 언어팩 적용시에는
창 -> 환경설정 -> Java -> 오류/경고 -> 잠재적 프로그래밍 문제점 ->
serialVersionUID가 없는 직렬화 가능 클래스 -> 무시


를 통해서 해당 메시지를 표시하지 않게 설정할 수 있다.


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

데이타의 전송은 객체건 뭐건 결국 바이트의 흐름으로 전송하게 된다. 저장도 그렇고...
다시 읽었을 때 객체의 자료구조를 그대로 보존하지 않으면 않된다.(일명 Serialzation)
자바에선 Serializable 인터페이스만 구현하면 알아서 이를 보장해주기에 단지 implements Serializable 만 추가하면 된다.
일전에도 언급한 적이 있지만 5.0 이후부터는 Serialzable 인터페이스를 구현한 클래스에서
static final long 타입의 serialVersionUID 상수를 선언하라는 경고문구를
이클립스의 노란 warning 아이콘과 더불어 확인 할 수 있다.
만일 serialVersionUID를 지정하지 않으면 실행시점에서 JVM이 디폴트 값을 산정하게 되며,
그 알고리즘은 Java(TM) Object Serialization Specification 정의된 것을 따른다고 한다.
한마디로 굳이 신경 쓸필요는 없다는 뜻이고 이클립스내에서 이 경고아이콘을 제외하도록 설정할 수도 있다.
그러나 모든 serialization이 필요한 클래스에는 명시적으로 serialVersionUID를 선언해줄것을 강력하게 권유하고 있는데
그 이유는 디폴트 serialVersionUID 계산은 클래스의 세부 사항을 매우 민감하게 반영하기 때문에 컴파일러 구현체에 따라서 달라질 수 있어 deserialization(serialization 했던 객체를 복구하는 과정)과정에서 예상하지 못한 InvalidClassExceptions을 유발할 수 있다.
라는 것이 그 이유란다.
즉 서로 다른 자바 컴파일러 구현체 사이에서도 동일한 serialVersionUID값을 얻기 위해서는 명시적으로 serialVersionUID값을 선언해야 하며 가능한 serialVersionUID을 private으로 선언하라는 것이다.
(상속되어 쓰여지는 것은 유용하지 않고, 해당 클래스에서만 쓰일 것이기 때문에....)


class의 warning이 뜬 부분을 클릭 해보면 [ + Add generated serial version ID ] 나타난다 클릭하면
eclipse에서 알아서 생성 해준다.

[출처]
java warning: no definition of serialVersionUID |작성자 시반
Posted by 1010
반응형
 
flash builder4.5 Plug-in for eclipse(이클립스에 플래시빌더4.5 플러그인 설치법)

1. JRE(Java Runtime Environment, Java 런타임 실행 소프트웨어) 설치

http://www.java.com/ko/download/windows_ie.jsp?locale=ko

or

JDK(Java Development Kit) SE 버전 설치(JRE설치후 이클립스 실행시 에러가 나면 JDK설치)

http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html

2. eclipse 3.6.1(Helios)이상 설치, 3.6.2 권장

Eclipse IDE for Java Developers(standard버전), Eclipse IDE for Java EE Developers(enterprise버전, 웹용플러그인 같이설치됨, 권장),

Eclipse Classic 3.6.2(플러그인없이 설치됨)

3. Flash Builder 4.5 설치

standalone으로 설치한후 플러그인으로 변경합니다.

https://www.adobe.com/cfusion/tdrc/index.cfm?product=flash_builder

All downloads can be installed as a standalone version if you do not have Eclipse™ already installed or as a plug-in version if you do. See the release notes to learn how to install the Flash Builder 4.5 trial as a plug-in

이클립스가 없으면 standalone으로 설치되고 있으면 플러그인으로 설치됩니다.

Flash Builder 4.5가 설치된 경로로 가서 utilities폴더안의 Adobe Flash Builder 4.5 Plug-in Utility.exe실행

Flash Builder 4.5 설치경로 지정, 이클립스 폴더 지정(주의사항 : 이클립스버전은 3.6.1이상 32bit, dropins폴더를 포함하고 있어야합니다)

4. eclipse.ini 수정

-vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m 추가

/==================flash builder 설치후 이클립스 메뉴가 한글로 바뀔때 영문으로 바꾸는 방법=====================/

이클립스가 설치된 경로에서 eclipse.ini를 수정합니다.

-vmargs 아래에 사용할 언어추가
-Duser.language=en
-Duser.country=US

-Duser.language=ko
-Duser.country=KR

위는 영문 아래는 한글메뉴가 나오겠죠

Posted by 1010
56. Eclipse Etc.../Eclipse2011. 8. 25. 09:41
반응형

-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.java.product
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vm C:\Program Files (x86)\Java\jdk1.6.0_16\bin\javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms512m
-Xmx1024m
Posted by 1010
56. Eclipse Etc.../Eclipse2011. 8. 25. 08:59
반응형
이클립스 종료후

eclipse.ini 파일 열어서 맨 마지막줄에

-Dfile.encoding=UTF-8

추가
Posted by 1010
반응형




1. 첨부파일(Stand_alone.zip)로 체크하고
2. 프로그램(revouninstaller-portable.zip) 언인스톨하고 ( 삭제옵션은 Advanced로 하시고.. 레지스터도 같이 삭제)
3. 휴지통 비우고
4. 레지스트리 청소(CCleaner_3.05.zip)하고
5.디스크 조각 모음써서 하드 물리 공간을 초기화 하는 편이 더 좋습니다.

WATCleanInstall.exe <- 레지스터 흔적삭제
Posted by 1010
반응형


=== 이클립스 JVM 메모리 늘리기 ===

이클립스 실행파일 바로가기를 만들고 속성에

실행 파일 뒤에  -clean -vmargs -Xms32m -Xmx512m 을 붙인다.

ex)J:\eclipse\eclipse.exe -clean -vmargs -Xms32m -Xmx512m

-Xms32m = 최소 메모리 32(중요하지 않음.)

-Xmx512m = 최대 메모리


블로그에서 퍼온글...


==== Eclipse실행시 주의사항 ====

    [4-1] Eclipse는 java로 구동되기 때문에 java process가 생성된다.

    [4-2] GUI로 만들어져 있기 때문에 상당한 메모리를 차지한다.

    [4-3] 메모리를 효율적으로 관리하기 위해서 아래와 같이 작업을 수행한다.

       [4-3-1] Eclipse.exe 아이콘의 오른쪽 버튼을 누른 후

                  [보내기]-[바탕화면에 바로가기 만들기]누른후 바탕화면으로 이동해서

                  바탕화면의 Eclipse바로가기 아이콘에서 오른쪽 마우스를 누른 후

                  [등록정보]를 클릭한후 “대상” 항목에 “설치디렉토리\eclipse.exe”라고
                  되어 있다. 이 내용을 아래와 같이 변경한다.

                  설치디렉토리\eclipse.exe -vmargs -Xms256m -Xmx512m

                  -Xms : Start memory를 설정

                  -Xmx : Extends memory를 설정




이클립스가 쓰는 메모리 늘리기

1G로 늘립니다.
javaw.exe는 JDK안의 JRE에 들어있는 겁니다.



이클립스실행파일을 바로가기로 하나 만든다음
바로가기에서 오른쪽 속성에 들어가면 대상에 입력할수 있게 나온다
거기에 실행파일경로 .exe 뒤에  -vmargs -Xms256m -Xmx1024m 를 추가해준다
-Xms256m  은 최소메모리가 256이라는 거다(다른 수치로 수정가능)
-Xmx1 024m 은 최대메모리로 다른 수치로 지정 가능한데 컴퓨터 사양에 따라
약간씩 다르지만 1024m(=1G)정도가 이클립스가 가장 부드럽게 움직이는데
도움이 된다고 한다








이클립스 는 뛰어난 코드어시스트 및 구조화에 대한 연계성을 제공하지만,
Java 태생적으로 속도적 한계로 인하여 메모리에 대한 부담이 많이 되는것이 사실이다.

이클립스 에 대한 메모리 관리는 eclipse.ini의 설정값을 통해서 배분 할 수 있지만,
이클립스 의 현재 상태의 메모리뷰 및 메모리 가비지 콜렉션 등은 이클립스 실행 중에도
제어가 가능하다.

Windows->Preferences->General->Show heap Status 체크
image

Posted by 1010
반응형

만들어 놓은 포멧 형식....

 



같은 팀에서 일하는 동료가 소개해준 이클립스 플러그인인데 요즘 이넘 때문에 일할맛 납니다~
철아 ~ 고맙따~ :)

Sourceforge에 등록된 프로젝트입니다.
http://sourceforge.net/projects/flexformatter



이클립스 플로그인으로 설치를 하면 다음과 같이 이클립스 환경설정에 flex_formatting이라는 항목이 생깁니다.



이 환경설정에서 액션스크립트나 MXML 포맷을 설정하고 그림처럼 설정하면 끝납니다.


자 이제 소스에 적용해 볼까요?

이렇게 짰던 코드가~




이렇게 변했습니다~



차이점을 찾아 보세요~.. 연산자나 메소드 인자 값들이 변했죠? 이 외에도 몇가지 설정을 했습니다..
MXML에도 적용을 해보고 ...

근데 괜찮죠?~ ㅋㅋ
소스 개판으로 짜도 이넘 때문에 걱정없네요..
이제 거의 flashdevelop은 쓰지 않는 지경이 되어 가고 있다는...
다음번엔 flashdevelop의 alt+shift+1 이 단축키를 능가하는 이클립스를 보여드리도록 하졍~

좋은 하루 되세요



출처 : http://lovedev.tistory.com/432
Posted by 1010
반응형

ERWin 사용법 동영상
 
 
ERWin01
ERWin02
ERWin03
ERWin04
ERWin05
ERWin06
ERWin07
Posted by 1010