JDBCWriterPattern

JDBCWriterPattern 패턴은 JDBC 연결을 사용하여 데이터를 데이터베이스에 쓰는 데 사용됩니다.

클래스 지원

  • JDBCWriter
  • LocalJDBCWriter

필수 특성

다음 특성은 패턴에 필요합니다.
표 1. 필수 특성. 테이블은 패턴에 필요한 각 특성의 이름과 값을 포함합니다.
특성 이름 LocalJDBCWriter JDBCWriter
PATTERN_IMPL_CLASS JDBCWriterPattern 인터페이스를 구현하는 클래스 적용 가능 적용 가능
ds_jndi_name 데이터 소스 JNDI 이름 적용 가능 적용 불가능
jdbc_url JDBC URL. 예를 들어, jdbc:derby:C:\\mysample\\CREDITREPORT입니다. 적용 가능 적용 불가능
jdbc_driver JDBC 드라이버. 예를 들어, org.apache.derby.jdbc.EmbeddedDriver입니다. 적용 가능 적용 불가능
user_id 데이터베이스의 사용자 ID. 예를 들어, Myid입니다. 적용 가능 적용 불가능
pswd 사용자 비밀번호. 예를 들어, mypwd입니다. LocalJDBCReader 전용입니다. 적용 가능 적용 불가능

선택적 특성

다음 특성은 패턴에 대해 선택사항입니다.
표 2. 선택적 특성. 테이블은 패턴에 대한 선택적 각 특성의 이름, 값 및 설명을 포함합니다.
특성 이름 설명 LocalJDBCReader JDBCWriter
디버그 true 또는 false(기본값은 false) 이 일괄처리 데이터 스트림에 대한 자세한 추적을 사용으로 설정합니다. 적용 가능 적용 가능
EnablePerformanceMeasurement true 또는 false(기본값은 false) GenericXDBatchStep을 사용 중인 경우, 일괄처리 데이터 스트림과 processRecord 메소드에서 소요된 전체 시간을 계산합니다. 적용 가능 적용 가능
EnableDetailedPerformanceMeasurement true 또는 false(기본값은 false) 일괄처리 데이터 스트림의 각 메소드에서 소요된 시간의 자세한 추가 분석을 제공합니다. 적용 가능 적용 가능
batch_interval 기본값은 20입니다. 레코드 기반 체크포인트의 체크포인트 간격보다 작은 값을 작성합니다. 커미트 전 일괄처리할 SQL 업데이트의 수를 표시합니다. 적용 가능 적용 가능

인터페이스 정의

public interface JDBCWriterPattern {

	public void initialize(Properties props);
	
	/**
	 * This is typically an Update query used to write data into the DB
	 * @return
	 */
	public String getSQLQuery();
	
	/**
	 * The parent class BDSJDBCWriter creates a new preparedstatement and
	 * passes it to this method. This method populates the preparedstatement
	 * with appropriate values and returns it to the parent class for execution
	 * @param pstmt
	 * @param record
	 * @return
	 */
	public PreparedStatement writeRecord(PreparedStatement pstmt, Object record);
}

JDBCWriter xJCL 예

<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="ds_jndi_name" value="jdbc/fvtdb"/>
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.JDBCWriter</impl-class>
</bds>
</batch-data-streams>

LocalJDCBWriter xJCL 예

<batch-data-streams>
<bds>
<logical-name>outputStream</logical-name>
<props>
<prop name="PATTERN_IMPL_CLASS" value="com.ibm.websphere.batch.samples.tests.bds.EchoWriter"/>
<prop name="jdbc_url" value="jdbc:derby:C:\\mysample\\CREDITREPORT"/>
<prop name="jdbc_driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<prop name="user_id" value="myuserid"/>
<prop name="pswd" value="mypswd"/>
<prop name="debug" value="true"/>
</props>
<impl-class>com.ibm.websphere.batch.devframework.datastreams.patterns.LocalJDBCWriter</impl-class>
</bds>
</batch-data-streams>

JDBCWriterPattern으로 건너뛰기 레코드 처리

JDBCWriter/LocalJDBCWriter는 건너뛰기 레코드 처리로 사용되는 특수한 경우를 나타냅니다. 기록기는 SQL문의 시퀀스를 일괄처리하고 데이터베이스에 대해 한 번에 모두 실행하여 동작하며, 실행 시 문제가 발생하면 단일 BatchUpdateException을 처리합니다. 일반 건너뛰기 레코드 처리의 세분성과 일치시키기 위해, 단일 BatchUpdateException을 구문 분석을 시도하여 어떤 예외로 어떤 명령문의 실행이 실패했는지 판별할 뿐 아니라 기록기에 전달된 개별 및 해당 레코드를 판별합니다.

예를 들어, 10개 레코드의 일괄처리가 있는 경우, 레코드 #2의 경우 사용자의 JDBCWriterPattern은 결과가 java.sql.SQLIntegrityConstraintViolationException인 SQL문을 생성하고, 레코드 #9의 경우 해당 SQL문의 결과는 java.sql.DataTruncation입니다.

비-일괄처리 기록기의 경우 건너뛰기 레코드 처리에 가장 근접한 맵핑을 제공하려면, 다음을 수행하십시오.
  • 레코드 #2를 패스하면 건너뛰기 핸들러 메소드 onSkippedWrite(Object o, Throwable t) 및 SQLIntegrityConstraintViolationException 인스턴스를 호출합니다.
  • 두 번째로 레코드 #9를 패스하면 건너뛰기 핸들러 메소드 onSkippedWrite(Object o, Throwable t) 및 DataTruncation 인스턴스를 호출합니다.
  • 건너뛰기 개수를 2만큼 늘립니다(두 예외가 명시적으로 또는 내재적으로 포함 목록의 일부라고 가정함).

구성되는 명령문에 대해 체인된 SQLException을 추출하도록 BatchUpdateException을 구문 분석하는 프로세스는 JDBC 드라이버와 구성에서 표준화되지 않습니다. 또한 일부 드라이버는 전체 일괄처리를 실행하지 않고 첫 번째 실패 시 중단됩니다.

드라이버 구성(일부 드라이버는 다른 구성의 이 영역에서 다르게 동작)이 원자적 또는 비-원자적 일괄처리 실행 스타일을 수행하는지 여부에 주의하십시오. 일반적으로 원자적 스타일에 대해 일괄처리 실행은 첫 번째 실패 시 중단되며, 비-원자적 스타일의 경우 나머지 일괄처리가 실행됩니다.

원자적 스타일의 경우, 런타임은 단계 실행 루프를 중단합니다(현재 트랜잭션으로 다시 롤링되는 예외를 처리). 이 경우, 실행되지 않은 명령문의 레코드와 연관될 의미있는 예외는 없습니다. 실행되지 않기 때문에 건너뛰지 않습니다.

비-원자적 스타일의 경우, 런타임 추론은 BatchUpdateException을 분석하여 체인된 SQLException을 찾는 데 사용됩니다. 결과가 오류인 일괄처리 실행 내 명령문을 판별하려고 시도하고 다시 해당 레코드로 맵핑하여, 해당 레코드와 해당 체인된 SQLException으로 건너뛰기 리스너를 호출합니다. 또한 각 레코드마다 한 번 건너뛰기 개수를 늘리면 전체 일괄처리에 대해서 한 번만이 아닌 일괄처리 내 예외가 발생합니다.

이 맵핑을 작성할 수 없고(비-원자적 스타일의 경우) 건너뛰기 리스너가 구성되어 있는 경우, 런타임은 각 문제 레코드에 대해 한 번 건너뛰기 리스너를 호출하지만 최상위 레벨 BatchUpdateException을 패스합니다. 맵핑을 작성할 수 없고 건너뛰기 리스너가 구성되어 있지 않은 경우, 런타임은 예외를 처리하여 단계 실행 루프를 중단합니다.


주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rgrid_btchpttrn2
파일 이름:rgrid_btchpttrn2.html