SQLJ 애플리케이션 배치
DB2®® 데이터베이스에 연결하는 데이터 액세스 애플리케이션을 개발하려면 SQLJ(Structured Query Language for Java™ Enterprise Edition)를 사용하십시오. SQLJ는 SQL(Structured Query Language) 데이터베이스 요청을 제공하는 명령문을 임베디드하기 위해 Java 프로그래밍 언어를 사용할 수 있도록 하는 프로그래밍 확장 세트입니다.
이 태스크 정보
애플리케이션에서 SQLJ를 사용하면 JDBC의 대안과 비교할 때
다음의 이점을 제공합니다.
- DB2 사용자 정의 및 바인드 단계를 사용하는 경우 성능을 개선할 수 있습니다.
- 애플리케이션이 정적 SQL을 실행할 수 있게 하므로 JDBC가 제공하는 동적 SQL보다 더 세분화된 보안 정책(예: PACKAGE 레벨 권한)을 사용할 수 있습니다.
프로시저
- 애플리케이션에 대한 데이터베이스 조작을 수행하려면 .sqlj
파일을 작성하십시오.
import java.sql.*; import javax.sql.*; import java.util.*; import javax.naming.; import sqlj.runtime.*; #sql context MyCtx; #sql iterator MyIter(String name); public class MyDB2SQLJProcedure { public static void myProcedure() throws Exception { DataSource ds = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/myDS"); Connection con = ds.getConnection(); con.setAutoCommit(false); MyCtx ctx = new MyCtx(con); try { // Insert some data into the 'mytable' table. // Note that the java variables 'key' and 'val' get substituted. int key = 1; String val = "one"; #sql [ctx] { INSERT into mytable VALUES (:key, :val) }; #sql [ctx] { COMMIT }; MyIter iter; #sql [ctx] iter = { SELECT name FROM mytable WHERE id=1 }; iter.next(); System.out.println("Found value: " + iter.name()); iter.close(); #sql [ctx] { COMMIT }; } finally { con.setAutoCommit(true); // When SQLJ performs transactional operations during context close, it assumes autocommit is true ctx.close(); } } }
- SQLJ 파일을 변환하기 위한 필수 드라이버를 획득하고 .sqlj 파일을
.java 파일로 변환하십시오. 추가 매개변수인 -db2optimize를 지정하여 성능을 향상시킬 수 있는 DB2 특정 변환을 수행할 수 있습니다.
java -cp .:/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar sqlj.tools.Sqlj -C-classpath=/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar -db2optimize MyDB2SQLJProcedure.sqlj
이 명령을 실행할 때 다음 출력 파일을 수신합니다.- MyDB2SQLJProcedure.class
- MyDB2SQLJProcedure.java
- MyDB2SQLJProcedure_SJProfile0.ser
- MyDB2SQLJProcedure_SJProfileKeys.class
- MyCtx.class
- MyIter.class
- 옵션: DB2 SQLJ Customizer 도구를 실행하여 이전에 생성된 .ser
파일을 사용자 정의 및 바인드하고 DB2가 런타임 시에 사용하는 데이터베이스에
정적 SQL을 작성하십시오. 사용자 정의 단계는 각 격리 레벨에 대해 하나씩
정적 SQL-- 을 포함하는 4개의 데이터베이스 패키지를 작성합니다.
java com.ibm.db2.jcc.sqlj.Customizer -url JDBC_URL -user USER_NAME -password PASSWORD [-rootpkgname PACKAGE_NAME] SERIALIZED_PROFILE1 SERIALIZED_PROFILE2...
여기서:사용 예제:- JDBC_URL은 테이블이 상주하는 DB2 시스템에 액세스하는 데 사용되는 JDBC URL이며, jdbc:db2://host-name:port/database-name 구문을 갖습니다.
- USER_NAME은 테이블이 상주하는 DB2 시스템의 유효한 사용자 이름입니다.
- PASSWORD는 지정된 USER_NAME에 대한 비밀번호입니다.
- PACKAGE_NAME은 최대 7자 길이의 유효한 파티션 데이터 세트(PDS) 멤버 이름입니다. 프로파일 사용자 정의기가 작성하는 네 개의 각 패키지는 이 이름으로 시작하고 앞에 1 - 4 숫자가 붙습니다. 직렬화된 프로파일을 하나만 사용자 정의하는 경우 이 값의 기본값은 직렬화된 프로파일 이름의 단축 버전이며 -rootpkgname 매개변수가 필요하지 않습니다. 동일한 명령으로 둘 이상의 직렬화된 프로파일을 사용자 정의하는 경우, 기본값이 없으며 -rootpkgname 매개변수가 필요합니다.
- SERIALIZED_PROFILE#는 사용자 정의하고 있는 직렬화된 프로파일의 이름입니다.
- 둘 이상의 직렬화된 프로파일을 동일한 명령으로 사용자 정의하려면 복수 파일을 공백으로 구분해서 나열하십시오.
- 또는 -rootpkgname 매개변수를 지정하여 동일한 명령으로 둘 이상의 직렬화된 프로파일을 사용자 정의할 수 있습니다.
java -cp .:/sqlj/sqlj4.zip:/sqlj/db2jcc4.jar com.ibm.db2.jcc.sqlj.Customizer -url jdbc:db2://localhost:50000/mydb -user dbuser1 -passworddbpass1 MyDB2SQLJProcedure_SJProfile0.ser
출력 예제:[jcc][sqlj] Begin Customization [jcc][sqlj] Loading profile: MyDB2SQLJProcedure_SJProfile0 [jcc][sqlj] Customization complete for profile MyDB2SQLJProcedure_SJProfile0.ser [jcc][sqlj] Begin Bind [jcc][sqlj] Loading profile:MyDB2SQLJProcedure_SJProfile0 [jcc][sqlj] Driver defaults(user may override): BLOCKING ALL VALIDATE BIND STATICREADONLY YES [jcc][sqlj] Fixed driver options: DATETIME ISO DYNAMICRULES BIND [jcc][sqlj] Binding package DB2SQL01 atisolation level UR [jcc][sqlj] Binding package DB2SQL02 at isolation level CS [jcc][sqlj] Binding package DB2SQL03 at isolation level RS [jcc][sqlj] Binding package DB2SQL04 at isolation level RR [jcc][sqlj] Bind complete for MyDB2SQLJProcedure_SJProfile0
- 애플리케이션 아카이브를 업데이트하여 2단계에서 생성되는 모든 파일을 포함하십시오.
반드시 프로파일이 존재하는 디렉토리 구조를 유지보수하십시오. 예를 들어, MyDB2SQLJProcedure 클래스가 com.company.MyDB2SQLJProcedure의
완전한 이름을 갖는 경우, 생성된 파일은 적절한 애플리케이션 모듈의
com/company/ 폴더에 위치해야 합니다.
참고: 사용자 정의된 파일은 애플리케이션 클래스 경로의 일부인 위치에 배치해야 하며, JAR 파일에 있는 사용자 정의되지 않은 직렬화된 프로파일 앞에 있어야 합니다. JAR 파일에서 직렬화된 프로파일을 바꾸도록 결정하는 경우, 프로파일이 존재하는 디렉토리 구조를 유지보수하십시오.
- Java EE 애플리케이션의 경우, 필수 기능을 사용으로 설정하고,
데이터 소스 구성을 정의하고 필요한 공유 라이브러리를 애플리케이션 클래스 로더에
적용하십시오. SQLJ를 사용하기 위해 jdbc-4.1 기능이
server.xml 파일에서 사용으로 설정되어야 합니다. 데이터 소스가 JNDI를 사용하여 발견되는
경우, jndi-1.0 기능도 사용으로 설정되어야 합니다. 다음 예제를 참조하십시오.
<server> <featureManager> <feature>jdbc-4.1</feature> <feature>jndi-1.0</feature> </featureManager> <application location="myapp.war"> <classloader commonLibraryRef="DB2Lib"/> </application> <library id="DB2Lib"> <fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/> </library> <dataSource id="myDS" jndiName="jdbc/myDS"> <jdbcDriver libraryRef="DB2Lib"/> <properties.db2.jcc databaseName="mydb" serverName="localhost" portNumber="50000" user="dbuser1" password="dbpass1"/> </dataSource> </server>
- OSGi 애플리케이션의 경우, OSGi 애플리케이션을 사용하려면 jdbc-4.1
및 wab-1.0 기능을 사용으로 설정하십시오. 애플리케이션이 JNDI를 사용하는 경우
jndi-1.0 기능도 사용으로 설정하십시오. SQLJ 라이브러리를 참조하는 <osgiLibrary>를
작성하십시오. 그런 다음, 필요한 SQLJ 패키지를 포함하는 OSGi 라이브러리를 참조하도록
애플리케이션을 구성하십시오. server.xml 파일의 다음 예를 참조하십시오.
<server> <featureManager> <feature>jdbc-4.1</feature> <feature>jndi-1.0</feature> <feature>wab-1.0</feature> </featureManager> <osgiApplication name="myapp" location="myapp.eba"/> <osgiLibrary libraryRef="DB2Lib"/> <library id="DB2Lib"> <fileset dir="C:/DB2/java" includes="db2jcc4.jar db2jcc_license_cisuz.jar"/> </library> <dataSource id="myDS" jndiName="jdbc/myDS"> <jdbcDriver libraryRef="DB2Lib"/> <properties.db2.jcc databaseName="mydb" serverName="localhost" portNumber="50000" user="dbuser1" password="dbpass1"/> </dataSource> </server>
'myapp'에 대한 애플리케이션 모듈의 MANIFEST.MF에서, 필요한 SQLJ 패키지를 가져오십시오. 이 패키지는 <osgiLibrary> 요소에 의해 제공됩니다.Import-Package: javax.annotation, javax.sql, javax.naming, com.ibm.db2.jcc, com.ibm.db2.jcc.sqlj, sqlj.runtime, sqlj.runtime.error, sqlj.runtime.profile, sqlj.runtime.profile.ref, sqlj.runtime.profile.util, sqlj.runtime.ref, sqlj.runtime.util
- WebSphere® Application Server Liberty가 각각의 풀링된 연결로 DB2를
캐싱하도록 할 수 있습니다. DB2 SQLJ 컨텍스트 캐싱으로 인해
애플리케이션이 처리완료하지 않은 자원의 정리와 같이 WebSphere Application Server Traditional에
더 일치하는 작동이 발생할 수 있습니다. 또한 SQLJ 경로에서 성능 개선을 가져올 수도
있습니다. DB2 SQLJ 컨텍스트 캐싱을 사용 가능하게 하려면
true 값을 갖는 enableConnectionCasting 데이터 소스
특성을 구성해야 합니다. 다음 예제를 참조하십시오.
<dataSource id="myDS" jndiName="jdbc/myDS" enableConnectionCasting="true">
상위 주제: Liberty에 데이터 액세스 애플리케이션 배치


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_deploy_sqlj
파일 이름: twlp_deploy_sqlj.html