메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

최신 DB2 Universal JDBC 드라이버의 새로운 JVM 종료 특성 이해

Sujan Ghosh, 소프트웨어 엔지니어, IBM
Sujan Ghosh
Sujan Ghosh는 인도에 있는 IBM 랩의 소프트웨어 엔지니어였으며 DB2 Java 공통 연결성 및 pureQuery 클라이언트 최적화 팀의 구성원으로 4년 이상 근무했다. 그가 수행한 프로젝트는 대부분 DB2 및 Java 기술을 기반으로 한다. 그는 DB2 for Linux, UNIX, and Windows, IBM 공인 데이터베이스 관리자이면서 IBM 공인 XML 솔루션 개발자이다.

요약:  새로운 글로벌 특성을 사용하면 db2sqljcustomize 및 db2sqljbind와 같은 SQLJ 도구가 완료되는 즉시 DB2® Universal JDBC 드라이버를 사용하여 JVM의 종료나 System.exit()를 추적할 수 있습니다. 이 기사에서는 DB2 Universal JDBC 드라이버의 글로벌 특성인 db2.jcc.sqljToolsExitJVMOnCompletion과 이 특성을 사용하는 방법을 설명합니다. 또한, 샘플 Java™ 애플리케이션을 통해 이 새로운 특성을 설정하는 방법을 설명합니다.

기사 게재일:  2011 년 9 월 06 일
난이도: 중급 원문:  보기 PDF:  A4 and Letter (29KB | 7 pages)Get Adobe® Reader®
페이지뷰:  1128 회
의견:  


소개

전형적인 엔터프라이즈 애플리케이션 환경에서는 DB2 애플리케이션에서 SQLJ 도구인 db2sqljcustomize와 db2sqljbind를 사용하는 경우가 많다. 이러한 SQLJ 도구는 SQLJ 애플리케이션을 사용자 정의하고 바인드하는 데 필요한 도구를 제공하는 Java 프로그램을 호출한다. 현재는 종료 코드를 사용하여 이러한 Java 프로그램이 쉘로 되돌아가도록 한다. 이렇게 하려면 JVM에서 지원하는 System.exit()를 호출해야 한다. 영(0)은 성공을 나타내는 반면에 0이 아닌 리턴 코드는 사용자 정의나 바인드 프로세스가 실패했음을 나타낸다.

System.exit()가 호출되면 JVM이 종료되므로 JVM이 계속해서 작동해야 하는 Ant나 Maven과 같은 특정 빌드 도구에는 System.exit()가 부적합하다. 과거에는 사용자 정의와 바인드 프로세스 이후에 System.exit나 JVM을 추적할 수 있는 대체 방법이 없었다. 그러한 경우에는 해당 애플리케이션을 다시 실행하여 나머지 비즈니스 논리를 계속 수행한다. 쉘 스크립트로 유틸리티를 실행하는 경우에는 이렇게 하는 것이 좋지만, Ant와 같은 특정 빌드 도구에서는 Java 프로그램이 System.exit()를 호출하면 문제가 발생한다. 예를 들어, Ant와 같은 빌드 도구가 System.exit를 추적하지 않고 Ant와 동일한 JVM에서 실행하는 기본 보안 관리자와 함께 작동하는 경우에는 사용자 정의나 바인드 프로세스 이후에 이 빌드 도구가 종료될 수 있다.

이 기사에서는 새로운 JDBC Universal 드라이버의 글로벌 특성인 db2.jcc.sqljToolsExitJVMOnCompletion과 이 특성을 사용하는 방법을 살펴본다.


선수조건

새로운 글로벌 특성을 사용하려면 다음과 같은 것들이 필요하다.

db2sqljcustomize는 임베디드 SQL문이 포함되어 있는 SQLJ 프로파일을 처리하는 데 사용되는 유틸리티이다. 기본적으로 이 사용자 정의 프로그램은 DB2 패키지를 바인드한다.

db2sqljbind는 이전에 사용자 정의한 SQLJ 프로파일을 데이터베이스에 바인드한다.

사용자 정의 및 바인드 프로세스에 관한 자세한 사항은 DB2 Information Center를 참조한다.

  • 간단한 SQLJ 애플리케이션 및 직렬화된 SQLJ 프로파일 — 임베디드 SQL문이 있는 Java 애플리케이션이다. SQLJ 애플리케이션을 변환하면 .class 파일과 하나 이상의 직렬화된 프로파일이 생성된다. 기본적으로 이 애플리케이션은 Java 컴파일러를 호출한다.
  • 간단한 JDBC 애플리케이션 — db2sqljcustomize 및 db2sqljbind와 같은 SQLJ 도구가 있는 간단한 Java 애플리케이션이다.
  • SQLJ 및 JDBC용 IBM DB2 Universal 드라이버 — 이 드라이버는 com.ibm.db2.jcc.DB2Driver이며, 여기에는 db2jcc.jar가 포함되어 있다. sqlj.zip에는 SQLJ 변환기가 포함되어 있다.
  • 글로벌 특성 파일인 DB2JccConfiguration.properties — 이 자원 파일은 db2.jcc.sqljToolsExitJVMOnCompletion 특성을 설정하기 위한 것이다. 이 특성은 DB2Configuration.properties에서 설정하거나 -D를 사용하여 Java 명령에 전달한다. 이 특성을 다른 방법으로 설정할 수도 있는데, 이 방법은 DB2 Information Center의 JDBC용 IBM Data Server Driver 사용자 정의 및 SQLJ 구성 특성 섹션을 참조한다.

새로운 JCC 특성의 장점

새로운 글로벌 JCC 특성인 db2.jcc.sqljToolsExitJVMOnCompletion에는 부울 리턴 유형이 있다. 이 특성의 기본값은 true이다. 따라서 모든 SQLJ 도구는 완료되는 즉시 System.exit()를 호출한다. SQLJ 도구를 실행하고 나서 System.exit()를 추적하려면 이 특성 값을 false로 설정해야 한다(db2.jcc.sqljToolsExitJVMOnCompletion=false).

오류 유무와 관계없이 기본적으로 JVM은 System.exit가 호출되면 종료된다. SQLJ 도구가 실행되면 오류와 관계없이 System.exit가 호출된다. 이 특성을 false로 설정하면 사용자 정의가 실패하는 경우에도 쉘은 리턴 코드 0을 얻는다. 해당 메소드로부터 리턴 코드를 얻기 위해 customizeMain을 프로그램 방식으로 사용할 수 있다.

이 특성 값을 db2.jcc.sqljToolsExitJVMOnCompletion=false로 설정하는 경우, 사용자 정의나 바인드 프로세스에서 오류가 발생하면 애플리케이션 리턴 코드가 0이 된다.

이 특성 값을 db2.jcc.sqljToolsExitJVMOnCompletion=true로 설정하는 경우, 사용자 정의나 바인드 프로세스에서 오류가 발생하면 애플리케이션 리턴 코드가 0이 아닌 값이 된다.


샘플 애플리케이션 유스 케이스 및 구성

1단계: 클래스 경로 설정

DB2 Universal Driver JAR 파일 db2jcc.jar와 sqlj.zip을 해당 클래스 경로에 삽입했는지 확인한다.

2단계: 간단한 SQLJ 애플리케이션 작성

이 SQLJ 애플리케이션은 데이터 소스 오브젝트 ds를 사용하여 데이터베이스와 연결되며 위치가 지정된 반복자를 사용하여 기존의 Employee 테이블에서 해당 행을 페치한다.


리스트 1. 기본 테이블에서 행을 페치하는 SQLJ 프로그램
			
import java.sql.*;

// Create connection context class DB2Connect
#sql context DB2Connect; 
			
// Declare positioned iterator ByPos
#sql  iterator ByPos(String,int);

public class sqljapp {

	public static void main(String[] args) throws Exception
	{ 
	// Create a DataSource object ds
	   javax.sql.DataSource ds = 
	    new com.ibm.db2.jcc.DB2SimpleDataSource();
					
	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
		setServerName("localhost");

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
		setPortNumber(50000);

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
	      setDatabaseName("SAMPLE");

	   ((com.ibm.db2.jcc.DB2BaseDataSource) ds).
	      setDriverType(4); 
				   
	   java.sql.Connection con = 
	   ds.getConnection("administrator", "passwd");

	   // Creating connection context object db2con
	   DB2Connect db2con = new DB2Connect(con);

	   // Declare the object of ByPos class 
	   ByPos positer;

	   // Use db2con for executing an SQL statement
         #sql[db2con] positer= { select * from EMPLOYEE }; 
    	}

}

3단계: SQLJ 애플리케이션 변환

애플리케이션을 변환하면 표준 Java 소스 파일과 직렬화된 SQLJ 프로파일(sqljapp_SJProfile0.ser)이 생성된다.


리스트 2. SQLJ 프로그램 변환
			
C:\jcc_home3\jcc>sqlj sqljapp.sqlj

4단계: Java 애플리케이션 실행

이것은 매개변수를 사용자 정의 유틸리티에 전달하는 간단한 Java 애플리케이션이다. 새로운 특성을 사용하지 않은 상태에서 단일 JVM에서 이 Java 애플리케이션을 실행하게 된다. 이 애플리케이션은 System.exit()를 사용하여 리턴 코드로 호출자를 종료한다. 사용자 정의가 성공적으로 실행되면 리턴 코드가 0이 된다. 이 애플리케이션은 db2sqljcustomize 유틸리티가 완료된 후에는 어떤 코드(함수 fun_checkJVM)도 호출하지 않는다.


리스트 3. db2.jcc.sqljToolsExitJVMOnCompletion 특성을 사용하지 않는 Java 애플리케이션
			
public class JVMexit {

	public static void main(String a[]) throws Exception {

		// Array of String as parameters to db2sqljcustomize
		String[] cmd = { "-url", "jdbc:db2://localhost:50000/SAMPLE", 
		"-user","administrator", "-password", "passwd", "-onlinecheck",
		"YES", "-rootPkgName", "BCB", "-collection", "COL18",
		"-tracefile", "trace_cust.txt", "-tracelevel", "TRACE_ALL",
		"sqljapp_SJProfile0.ser" };

		// Create an object of db2sqljcustomize
		com.ibm.db2.jcc.sqlj.Customizer cust = new 
		com.ibm.db2.jcc.sqlj.Customizer();

		// Execute the db2sqljcustomize with arguements
		cust.main(cmd);

		/* Function to check if JVM exited or not,if exited it will not call
		   below function or else it will. */
		fun_checkJVM();

	}

	private static void fun_checkJVM() {
		System.out.println("JVM didn't exit");

	}

}

이제까지 새로운 글로벌 특성을 사용하지 않고 단일 JVM에서 Java 애플리케이션을 실행하는 방법을 살펴보았다. (이 특성의 기본값은 true이다(db2.jcc.sqljToolsExitJVMOnCompletion=true). 이제 글로벌 특성 파일 DB2JccConfiguration.properties에서 특성 값을 db2.jcc.sqljToolsExitJVMOnCompletion=false로 설정하여 동일한 Java 애플리케이션을 실행하는 시나리오를 살펴보자.

5단계: 글로벌 파일 DB2JccConfiguration.properties

자원 파일 DB2JccConfiguration.properties를 작성하여 해당 클래스 경로에 삽입하고 아래와 같이 특성을 추가한다.


리스트 4. DB2JccConfiguration.properties
			
//Add the property value as false in file
db2.jcc.sqljToolsExitJVMOnCompletion=false
			

6단계: 해당 Java 애플리케이션 실행

사용자 정의 프로세스가 완료되면 애플리케이션이 해당 코드를 실행한다. fun_checkJVM() 함수가 호출될 것이며 이렇게 되면 사용자 정의 프로세스가 완료된 후에 애플리케이션이 System.exit()를 호출하지 않았다는 것이 입증된다.

이제 사용자 정의 프로세스에서 오류가 발생한 상태에서 전체 Java 애플리케이션을 실행하는 시나리오를 살펴보자. 이렇게 하려면 마찬가지로 특성 값을 false(db2.jcc.sqljToolsExitJVMOnCompletion=false)로 설정한다.

7단계: 잘못된 매개변수가 포함된 Java 애플리케이션 실행

잘못된 매개변수를 사용하는 애플리케이션 실행 예제에서는 애플리케이션이 function fun_checkJVM()을 호출하더라도 사용자 정의 프로그램이나 바인드 프로세스에서 오류가 발생하며 따라서 사용자 정의 프로세스가 완료된 후에 애플리케이션이 System.exit()를 호출하지 않았다는 것이 입증된다.


리스트 5. 잘못된 매개변수가 포함된 Java 애플리케이션
			
public class JVMexit {

	public static void main(String a[]) throws Exception {

		// Array of String with wrong port # as parameter to db2sqljcustomize
		
		String[] cmd = { "-url", "jdbc:db2://localhost:5000/SAMPLE", 
		"-user","administrator", "-password", "passwd", "-onlinecheck",
		"YES", "-rootPkgName", "BCB", "-collection", "COL18",
		"-tracefile", "trace_cust.txt", "-tracelevel", "TRACE_ALL",
		"sqljapp_SJProfile0.ser" };

		// Create an object of db2sqljcustomize
		com.ibm.db2.jcc.sqlj.Customizer cust = new 
		com.ibm.db2.jcc.sqlj.Customizer();

		// Execute the db2sqljcustomize with arguments
		cust.main(cmd);

		/* Function to check if JVM exited or not,if exited it will not call
		   below function or else it will. */
		fun_checkJVM();

	}

	private static void fun_checkJVM() {
		System.out.println("JVM didn't exit");

	}

}
			


결론

이 기사에서는 새로운 특성인 db2.jcc.sqljToolsExitJVMOnCompletion을 사용하여 사용자 정의 및 바인드와 같은 SQLJ 도구가 완료되는 즉시 System.exit()를 추적하는 방법을 살펴보았다. 이 특성 값을 false로 설정하면 SQLJ 도구를 실행하는 과정에서 오류가 발생하는 경우에도 애플리케이션이 JVM을 종료하지 않기 때문에 해당 애플리케이션이 계속 실행될 수 있다.


참고자료

교육

제품 및 기술

  • developerWorks에서 직접 다운로드할 수 있는 IBM 시험판 소프트웨어를 사용하여 후속 개발 프로젝트를 구현해 보자.

토론

필자소개

Sujan Ghosh

Sujan Ghosh는 인도에 있는 IBM 랩의 소프트웨어 엔지니어였으며 DB2 Java 공통 연결성 및 pureQuery 클라이언트 최적화 팀의 구성원으로 4년 이상 근무했다. 그가 수행한 프로젝트는 대부분 DB2 및 Java 기술을 기반으로 한다. 그는 DB2 for Linux, UNIX, and Windows, IBM 공인 데이터베이스 관리자이면서 IBM 공인 XML 솔루션 개발자이다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=Information Management, 자바
ArticleID=755505
ArticleTitle=최신 DB2 Universal JDBC 드라이버의 새로운 JVM 종료 특성 이해
publish-date=09062011
author1-email=sghosh.raj@in.ibm.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.