애플리케이션 서버에 SQLJ 애플리케이션을 설치하기 전에
SQLJ 프로파일을 db2sqljcustomize 도구로 사용자 정의하고 바인드하십시오.
시작하기 전에
이 태스크를 수행하려면 배치된 SQLJ 애플리케이션이 있어야 하지만
애플리케이션 서버에 애플리케이션이 설치되어 있으면 안됩니다.
애플리케이션이 애플리케이션 서버에 이미 설치되어 있는 경우에는 프로파일을
사용자 정의한 후 애플리케이션을 다시 설치해야 합니다. 또한 SQLJ 애플리케이션에 대한
프로파일도 직렬화해야 합니다.
CMP(Container-Managed Persistence)를 사용하는
SQLJ 애플리케이션은 다음 2가지 방법으로 배치할 수 있습니다.
- 애플리케이션 서버에 SQLJ 애플리케이션을 배치하십시오. 자세한 정보는
CMP(Container-Managed Persistence)를 사용하는 SQLJ 애플리케이션 배치 주제를 참조하십시오.
- ejbdeploy 도구를 사용하여 SQLJ 애플리케이션을 배치하십시오. 자세한 정보는
ejbdeploy 도구를 사용하여 CMP(Container-Managed Persistence)를 사용하는
SQLJ 애플리케이션 배치 주제를 참조하십시오.
Bean 관리 지속을 사용하는 SQLJ 애플리케이션의 경우,
"Bean 관리 지속, 서블릿 또는 세션 Bean을 사용하는 SQLJ 애플리케이션 배치" 주제를 참조하십시오.
이 태스크 정보
애플리케이션 서버에서 SQLJ 애플리케이션을 이용하려면 SQLJ 프로파일을
사용자 정의해야 합니다. 사용자 정의 프로세스는
DB2® 데이터베이스와
관련된 정보가 들어 있는 프로파일의 기능을 보강합니다. 데이터베이스는 런타임에
이 정보를 사용합니다. 기본적으로 데이터베이스에서는 네 개의
DB2 패키지가 작성되며
각 격리 레벨에 대해 하나의 패키지가 작성됩니다.
애플리케이션 서버는
관리 콘솔에서 또는 스크립팅으로 SQLJ 프로파일을 사용자 정의 및 바인드하도록
지원합니다.
- 관리 콘솔 지원에 대한 정보는 SQLJ(Structured Query
Language in Java™) 애플리케이션의 프로파일 사용자 정의 및 바인드에 대한
주제를 참조하십시오.
- 스크립트 지원은 AdminTask 오브젝트에 대한 애플리케이션 관리 명령 그룹에 대한 주제를 참조하십시오.
프로시저
- 데이터 액세스 애플리케이션 배치 주제에 설명된 바와 같이,
필요한 데이터베이스 테이블이 있는지 확인하십시오.
- 애플리케이션을 설치한 환경에 직렬화된 프로파일을 전송하십시오. 또는 Java jar 명령을 사용하여
설치된 EAR 디렉토리의 JAR 파일에서 직렬화된 프로파일을 추출하십시오.
- SQLJ 프로파일 및 애플리케이션의 JAR 파일에 대한 위치를 환경의
클래스 경로에 추가하십시오.
- 데이터 액세스 애플리케이션 배치 주제에 설명된 바와 같이,
필요한 데이터베이스 테이블이 있는지 확인하십시오.
- 옵션: 사용자 애플리케이션이 클러스터된 환경에서 실행되고 있지 않으면,
Ant 스크립트를 사용하여 보다 쉽게 사용자 정의할 수 있습니다. ejbdeploy 도구로 일괄처리 SQLJ 사용자 정의를 EAR 파일에 대해 실행하면
도구가 application_name.ear.xml이라는 Ant 스크립트를 생성합니다.
이 스크립트 파일을 사용하여 연관된 EAR 파일의 모든 엔터프라이즈 Bean JAR 파일에 있는 직렬화된 프로파일에 대해
DB2 사용자 정의 프로그램을 실행할 수 있습니다.
스크립트는 각각의 엔터프라이즈 Bean의 JAR 파일을 직렬화된 프로파일로 업데이트하고
기존 EAR 파일의 JAR 파일을 수정된 버전으로 바꿉니다.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
도구는 다음과 같습니다.
- ejbdeploy.sqlj.properties에 있는 데이터베이스 URL, 데이터베이스 사용자 및 비밀번호 특성의 값을 변경하십시오. 이 파일은
ejbdeploy 명령으로 생성된 모든 Ant 스크립트에 대한 공통 파일입니다.
ejbdeploy.sqlj.properties 스크립트는 다음과 같은 글로벌 특성을 정의합니다.
- 데이터베이스 URL - db.url
- 사용자 - db.user
- 비밀번호 - db.password
Ant 스크립트는 직렬화된 프로파일의 URL,
사용자 및 비밀번호 특성을 사용하여 프로파일을 사용자 정의합니다. 기본적으로 직렬화된 프로파일에 대한 특성은 글로벌 특성으로부터 작성됩니다.
- properties 대상을 지정하여 Ant 스크립트를 실행하십시오. 예를 들면, 다음과 같습니다.
ws_ant -buildfile application_name.ear.xml properties
이 스크립트는
application_name.ear.properties라는 특성 파일을 작성합니다.
application_name.ear.properties 파일에는 EAR 파일에 있는 각각의 직렬화된 프로파일에 해당하는
패키지의 기본 이름을 지정하는 특성이 포함되어 있습니다. 다음은 샘플 특성 파일입니다.
url.MyEJB1.jar.DB2UDBNT_V8_1=jdbc:db2://localhost:50000/MyDB1
user.MyEJB1.jar.DB2UDBNT_V8_1=dbuser
password.MyEJB1.jar.DB2UDBNT_V8_1=dbpassword
pkg.MyEJB1.jar.DB2UDBNT_V8_1=TEST
url.MyEJB2.jar.DB2UDBNT_V8_1=jdbc:db2://localhost:50000/MyDB2
user.MyEJB2.jar.DB2UDBNT_V8_1=dbuser
password.MyEJB2.jar.DB2UDBNT_V8_1=dbpassword
pkg.MyEJB2.jar.DB2UDBNT_V8_1=WORK
- DB2 제어 센터를 사용하여
데이터베이스에 설치된 패키지를 식별하십시오. DB2 SQLJ 사용자 정의 프로그램에는
다음 양식의 유형 4 데이터베이스 URL이 필요합니다.
jdbc:db2://host-name:port/database-name
또한 사용자와 비밀번호도 필요합니다. DB2 설치 시
포트 값을 변경하지 않았으면, 이 포트 값은 50000입니다.
- 스크립트 파일이 사용하는 이름을 변경하여 각 사용자 정의 프로파일에 대한 이름이 데이터베이스에 있는
기존 패키지 이름과 충돌하지 않도록 하십시오. 다른 EAR 파일용으로 생성된 Ant 스크립트는 이름을 변경하지 않으면 기본적으로 동일한 패키지 이름을 사용하며
스크립트가 기존 패키지를 겹쳐씁니다. 패키지를 겹쳐쓰면 런타임 시 오류가 발생합니다.
DB2는 패키지 이름의 처음 7자를 사용합니다. DB2 사용자 정의 프로그램은
이 이름을 사용하여 데이터베이스에 네 개의 패키지를 생성합니다. 예를 들어, TEST라는 이름을 지정하면
DB2 사용자 정의 프로그램은
TEST1, TEST2, TEST3 및 TEST4라는 패키지를 작성합니다.
- Ant 스크립트를 실행하십시오. Ant 스크립트는 원래의 EAR 파일을 수정된 직렬화 프로파일로 업데이트합니다.
문제점 방지: 클래스 경로에 db2jcc.jar이 있는지 확인하십시오. 이 파일은
DB2 V8 수정팩 1이 설치될 때 클래스 경로 환경 변수에 추가해야 합니다.
gotcha
샘플 Ant 명령은 다음과 같습니다.
ws_ant -Dwork.dir=tmp
-Dscript.property.file=other.properties
-buildfile application_name.ear.xml
여기서:- -buildfile은 작성할 XML 파일을 지정합니다.
- -Dscript.property.file은 다른 특성 파일을 지정합니다. 이 필드는 선택적입니다.
Ant 스크립트가
application_name.ear.properties 대신 다른 파일을 사용하게 하려면,
스크립트 실행 시 Dscript.property.file 특성을 지정하십시오.
- -Dwork.dir은 스크립트용 임시 작업 디렉토리를 지정합니다. 이 스크립트는 이 디렉토리에 있는 파일 및 하위 디렉토리를 작성하고 삭제합니다. 작업 디렉토리에
스크립트가 사용한 파일 및 디렉토리와 동일한 이름의 기존 파일 및 디렉토리가 포함되어 있으면,
스크립트가 파일 및 디렉토리를 지우거나 겹쳐씁니다. 이 스크립트는 작업 디렉토리로 tmp라는 디렉토리를 작성하여 사용합니다.
- 애플리케이션 서버에
애플리케이션 설치를 계속하십시오.
- db2sqljcustomize 도구를 실행하여 각 엔터프라이즈 Bean의 JAR 파일에 해당하는 SQLJ 프로파일을
사용자 정의하십시오. 배치 코드를 생성할 때
애플리케이션에 고유한 직렬화된 프로파일(.ser 확장자가 있는 파일)이 작성됩니다. 이러한 프로파일은 SQLJ 파일과 동일한 디렉토리에 존재하며,
파일을 사용하기 전에 환경에 사용자 정의해야 합니다. 직렬화된 프로파일에 대해
DB2 SQLJ 사용자 정의 프로그램을 실행할 때,
런타임 시에 DB2를 사용할 데이터베이스에
정적 SQL을 작성합니다. 사용자 정의 단계에서 격리 레벨 당 한 개씩 정적 SQL을 포함하는 네 개의
데이터베이스 패키지를 작성합니다.
- 옵션: 애플리케이션의 데이터 소스 연결에 대한 컨텍스트 캐싱을 사용할 수 있도록
SQLJ 사용자 정의 도구의 사용을 고려하십시오. DB2 V8.1 수정팩 6에서는
db2optimize라는 db2sqljcustomize 도구가 있는 새 캐싱 옵션을 제공합니다.
애플리케이션이 기본 컨텍스트 대신 확실한 연결 컨텍스트를 사용하는 경우, 이 옵션을 실행할 수 있습니다.
문제점 방지: - SQLJ 컨텍스트 캐싱 지원에는 APAR PQ87786이 적용된 IBM® JCC 드라이버 또는
버전 2.2 이상의 DB2 Universal JDBC 드라이버와 함께 DB2가 필요합니다.
- 트랜잭션 경계에서 연결을 캐시하는 BMP Bean이나 애플리케이션에 대한 컨텍스트 캐싱을 사용 가능하게 하려는 경우 공유 가능한 연결을 사용할 수 없습니다. db2optimize
옵션을 호출하거나 오브젝트 종료 예외가 발생할 때
get/use/close 패턴의 연결 사용법을 사용하십시오. 다음 코드는
컨텍스트 캐싱에 대해 잘못된 연결 사용법을 제공합니다.
utx.begin();
cons =ds.getConnection(
request.getParameter("db.user"),
request.getParameter("db.password"));
cmctx1 = new CM_context(cons);
#sql [cmctx1] {DELETE FROM cmtest WHERE id=1};
utx.commit();
//The next statement verifies the result:
#sql [cmctx1] cursor1 = {SELECT id, name FROM cmtest WHERE id=1};
이 경우
Select 문이 오브젝트 종료 예외를 유도해
냅니다. 이 예외의 발생을 차단하려면 트랜잭션을 커미트하기 전에 연결을
닫으십시오. 그런 다음 Select 문을
실행하기 전에 새 연결과 새 컨텍스트를 얻으십시오.
gotcha
다음 예제 코드는 직렬화된 프로파일의 옵션 실행에 대한 적절한 구문을 보여줍니다.
sqlj -db2optimize SQLJTransactionTest.sqlj
db2sqljcustomize -url jdbc:db2://localhost:50000/dbname -user USER_NAME -password PASSWORD
SQLJTransactionTest_SJProfile0.ser
- db2sqljcustomize 도구를 실행하여 SQLJ 프로파일을 사용자 정의하십시오. db2sqljcustomize 명령을 실행한 후에는 사용자 정의된 프로파일이 명령을 발행한 디렉토리에
있게 됩니다. 사용자 정의되지 않은 직렬화된 프로파일을 포함하는 디렉토리에서 db2sqljcustomize 명령을 실행하는 경우,
사용자 정의된 버전은 동일한 파일 이름이 있는 이전 버전을 겹쳐씁니다.
db2sqljcustomize 명령 실행에 대해 권장되는
구문은 다음과 같습니다.
db2sqljcustomize -url JDBC_URL -user USER_NAME -password PASSWORD
[-rootpkgname PACKAGE_NAME] SERIALIZED_PROFILE1 SERIALIZED_PROFILE2 ...
여기서
- JDBC_URL은 테이블이 있는 DB2 시스템에
액세스하는 데 사용되는 JDBC URL입니다.
- USER_NAME은 테이블이 있는 DB2 시스템의
올바른 사용자 이름입니다.
- PASSWORD는 지정된 사용자 이름의 비밀번호입니다.
- PACKAGE_NAME은 최대 7자의 유효한 파티션 데이터 세트(PDS) 구성원
이름입니다. 프로파일 사용자 정의기가 작성한 4개의 각 패키지는 이 이름으로 시작하며
1에서 4까지의 숫자로 부가됩니다. 하나의 직렬화된 프로파일만 사용자 정의하는 경우
이 값은 기본적으로 직렬화된 프로파일 이름의 축약 버전으로 설정되며
-rootpkgname 매개변수가 필요하지 않습니다. 동일한 명령으로 둘 이상의 직렬화된 프로파일을 사용자 정의하는 경우
기본값이 없으며 -rootpkgname 매개변수가 필요합니다.
- SERIALIZED_PROFILE#은 사용자 정의할 직렬화된 프로파일의
이름입니다.
- 동일한 명령으로 둘 이상의 직렬화된 프로파일을 사용자 정의하려면
공백으로 구분하여 여러 파일을 나열하십시오.
- 또는 -rootpkgname 매개변수를 지정하여 동일한 명령으로 둘 이상의
직렬화된 프로파일을 사용자 정의할 수 있습니다.
참고: 다음 옵션은
사용자 정의 프로세스에 대한 더 많은 제어를 제공합니다.
- -automaticbind yes은 직렬화된 프로파일에 대해 DB2 SQLJ 사용자 정의 프로그램을 실행하여
런타임 시에 데이터베이스를 사용할 데이터베이스에 정적 SQL을 작성하도록 지정합니다. 사용자 정의 단계에서 격리 레벨 당 한 개씩 정적 SQL을 포함하는 네 개의
데이터베이스 패키지를 작성합니다.
- -onlinecheck NO and -bindoptions "VALIDATE RUN"은 프로파일 사용자 정의 중 발생한 오류를 생략하고
사용자 정의를 성공적으로 완료합니다.
- 직렬화된 프로파일로 엔터프라이즈 Bean에 대한 JAR 파일을
업데이트하십시오.
- jar 명령을 사용하여 JAR 파일의 직렬화된 프로파일을
사용자 정의된 프로파일로 바꾸십시오.
문제점 방지: 사용자 정의된 파일은 애플리케이션 클래스 경로의 일부인 위치에 배치해야 하며,
JAR 파일에 있는 사용자 정의되지 않은 직렬화된 프로파일 앞에 있어야 합니다. JAR 파일에서 직렬화된 프로파일을 바꾸도록 결정하는 경우,
프로파일이 존재하는 디렉토리 구조를 유지보수하십시오.
gotcha
- 엔터프라이즈 Bean, 서블릿 및 직렬화된 프로파일에 대한 JAR 파일을
엔터프라이즈 아카이브(EAR) 파일로 패키지하십시오.
- 애플리케이션 서버에 애플리케이션을 설치하십시오.