|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
public interface SyncResolver
어플리케이션이, 수동의 의지결정 트리를 사용해 동기 경합이 발생했을 때의 대처 방법을 결정할 수 있도록(듯이) 하는 시스템를 정의합니다. 어플리케이션이 동기 경합을 수동으로 해결하는 것은 필수가 아닙니다만, 이 시스템는 경합이 발생했을 때에 어플리케이션에 위양 하는 수단을 제공합니다.
경합이란,RowSet
객체의 원의 행의 값이 데이터 소스내의 값과 일치하지 않는 상태이며, 전회의 동기 이후에 데이터 소스행이 변경된 것을 나타냅니다. RowSet
객체의 원의 값은, 전회의 동기의 직전의 값이며, 반드시 초기치가 아닙니다.
SyncResolver
객체의 설명SyncResolver
객체는,SyncResolver
인터페이스를 구현하는 특수한 RowSet
객체입니다. 이것은 접속된 RowSet
객체 (JdbcRowSet
인터페이스의 구현) 또는 미접속의 RowSet
객체 (CachedRowSet
인터페이스 또는 그 서브 인터페이스의 구현)로서 동작할 수 있습니다. 서브 인터페이스에 대해서는,javax.sql.rowset
패키지의 설명을 참조해 주세요. SyncResolver
의 레퍼런스 구현은 CachedRowSet
인터페이스를 구현합니다만, 다른 구현에서는,JdbcRowSet
인터페이스를 구현해, 특정의 필요를 채울 수가 있습니다.
어플리케이션이 (CachedRowSet
의 acceptChanges
메소드를 호출해) RowSet
객체와 데이터 소스를 동기 시키려고 한 후, 몇개의 경합이 발견되면(자), 행 세트의 SyncProvider
객체는 SyncResolver
의 인스턴스를 작성합니다. 이 새로운 SyncResolver
객체는 동기를 시도한 RowSet
객체와 같은 행수 및 렬수가 됩니다. SyncResolver
객체에는, 경합이 발생한 데이터 소스의 값이 포함되어 다른 모든 값에는 null
가 포함됩니다. 게다가 각 경합의 정보도 포함됩니다.
SyncResolver
객체의 취득과 사용acceptChanges
메소드가 경합을 검출하면(자),SyncProvider
객체는 SyncProviderException
객체를 작성해, 거기에 새로운 SyncResolver
객체를 설정합니다. acceptChanges
메소드는 이 예외를 throw 해, 그것을 어플리케이션이 캐치 해, 포함되고 있는 SyncResolver
객체의 취득에 사용합니다. 다음의 코드 부분에서는,SyncProviderException
의 getSyncResolver
메소드를 사용해,SyncResolver
객체 resolver를 가져옵니다.
} catch (SyncProviderException spe) { SyncResolver resolver = spe.getSyncResolver(); ... }
어플리케이션은,resolver 를 사용해, 거기에 포함되는 경합 (복수가능)의 정보를 취득할 수 있습니다. resolver등의 SyncResolver
객체는, 경합이 있는 각 행으로, 그 경합을 추적합니다. 또, 행 세트의 커멘드의 영향을 받는 테이블 (복수가능)에 락을 적용해, 현재의 경합이 해결될 때까지 새롭게 경합이 발생하지 않게 합니다.
SyncResolver
객체로부터 취득 가능한 정보는, 다음과 같습니다.
SyncProvider
인터페이스는, 발생할 가능성이 있는 상태에 대해 설명하는 4개의 정수를 정의합니다. 3 개의 정수는, 경합이 검출되었을 때 RowSet
객체가 시행하고 있던 조작의 종류(갱신, 삭제, 또는 삽입)를 나타내, 4 번째는 경합이 없는 것을 나타냅니다. SyncResolver
객체가 getStatus
메소드를 호출했을 때, 이러한 정수가 반환값으로서 돌려주어질 가능성이 있는 것입니다.
int operation = resolver.getStatus();
RowSet
객체에 의해 값이 변경되어 데이터 소스에 기입해질 때, 기입처의 데이터 소스내의 값이 전회 동기 처리를 행한 시점과는 달랐을 경우, 경합이 발생한 것을 나타냅니다. SyncResolver
객체의 값이 데이터 소스의 경합치이기 (위해)때문에, 어플리케이션은 SyncResolver
의 getConflictValue
메소드를 호출해, 경합의 원인이 된 데이터 소스내의 값을 꺼낼 수가 있습니다.
java.lang.Object conflictValue = resolver.getConflictValue(2);resolver 의 열은, 위의 코드 예의 같게 열번호로 지정할 수 있습니다. 렬명으로 지정할 수도 있습니다.
어플리케이션은,getStatus
메소드 및 getConflictValue
메소드로부터 취득된 정보를 사용해, 데이터 소스내에 보관 유지해야 할 치를 결정할 수 있습니다. 계속되어,SyncResolver
의 setResolvedValue
메소드를 호출해,RowSet
객체 및 데이터 소스 로 유지하는 값을 설정합니다.
resolver.setResolvedValue("DEPT", 8390426);위의 코드예에서는, 렬명에 의해, 지정의 값을 설정되는
RowSet
객체내의 열을 지정하고 있습니다. 열번호로 열을 지정할 수도 있습니다.
어플리케이션은 현재의 경합 하는 행의 모든 경합을 해결하면(자),setResolvedValue
메소드를 호출해,SyncResolver
객체의 경합 하는 행 마다 이 순서를 반복합니다.
SyncResolver
객체의 안내SyncResolver
객체는 RowSet
객체이기 (위해)때문에, 어플리케이션은 모든 RowSet
메소드를 사용해, 커서를 움직여,SyncResolver
객체를 안내할 수 있습니다. 예를 들어, 어플리케이션은 RowSet
의 next
메소드를 사용해, 각 행으로 이동해,SyncResolver
의 getStatus
메소드를 호출해, 행에 경합이 포함될지 어떨지를 확인할 수 있습니다. 경합을 포함한 행에서는, 어플리케이션은 열로 반복 처리를 실시해, null 이외의 값을 찾아낼 수가 있습니다. 이 값은 경합이 있는 데이터 소스의 값이 됩니다.
SyncResolver
객체의 안내를 간단하게 하려면 , 특히 대부분의 행에 경합이 없는 경우에,SyncResolver
인터페이스로 nextConflict
메소드 및 previousConflict
메소드를 정의합니다. 이러한 메소드는, 적어도 1 개의 경합치를 포함한 행만을 이동합니다. 계속되어 어플리케이션으로 열번호를 지정해,SyncResolver
의 getConflictValue
메소드를 호출해, 경합치 자체를 가져옵니다. 다음의 섹션의 코드의 발췌에 예를 나타냅니다.
RowSet
객체 crs가 자신을 부하의 데이터 소스와 동기 하는 것으로, 경합을 해결하는 방법을 나타내고 있습니다. try
블록으로,crs는 acceptChanges
메소드를 호출해,Connection
객체 con를 건네주고 있습니다. 경합이 없는 경우는, 단지 crs 의 변경이 데이터 소스에 기입해집니다. 그러나, 경합이 있는 경우는, acceptChanges
메소드가 SyncProviderException
객체를 throw 해,catch
블록이 유효하게 됩니다. 이 예에서는,SyncResolver
객체를 사용한 많은 방법 가운데 하나를 설명하고 있어,SyncResolver
의 nextConflict
메소드를 while
루프로 사용하고 있습니다. nextConflict
가 false
를 돌려주는 (SyncResolver
객체 resolver 에 경합 하는 행이 없어진다)와 루프가 종료합니다. 이 특정의 코드의 발췌에서는,resolver는 경합을 갱신한 행 (SyncResolver.UPDATE_ROW_CONFLICT
상태의 행)을 검색해, 이 코드의 발췌의 나머지의 부분은,crs 가 갱신을 시도했기 때문에 경합이 발생한 행 에 대해서만 실행됩니다.
resolver 의 커서가 갱신 경합이 있는 다음의 경합 하는 행으로 이동한 후,getRow
메소드는 현재의 행을 나타내,CachedRowSet
객체 crs 의 커서는 crs의 비교 가능한 행으로 이동합니다. resolver 와 crs의 양쪽 모두의 행의 열로 반복 처리를 실시하는 것에 의해, 경합 하고 있는 값을 취득해, 비교해, 보관 유지하는 값을 결정합니다. 이 코드의 발췌에서는,crs의 값이 해결 지음의 값으로 해서 설정된 값이며, 이것을 사용해, 데이터 소스의 경합 하는 값이 덧쓰기되는 것을 의미합니다.
try { crs.acceptChanges(con); } catch (SyncProviderException spe) { SyncResolver resolver = spe.getSyncResolver(); Object crsValue; // value in theRowSet
object Object resolverValue: // value in theSyncResolver
object Object resolvedValue:// value to be persisted
while(resolver.nextConflict()) { if(resolver.getStatus() == SyncResolver.UPDATE_ROW_CONFLICT) { int row = resolver.getRow(); crs.absolute(row); int colCount = crs.getMetaData(). getColumnCount(); for(int j = 1; j <= colCount; j++) { if (resolver.getConflictValue(j) ! = null) { crsValue = crs.getObject(j); resolverValue = resolver.getConflictValue(j); . . . // compare crsValue and resolverValue to determine // which should be the resolved value (the value to persist) resolvedValue = crsValue; resolver.setResolvedValue(j, resolvedValue); } } } } }
필드의 개요 | |
---|---|
static int |
DELETE_ROW_CONFLICT
RowSet 객체가 데이터 소스내의 행의 삭제를 시행했을 때, 경합이 발생한 것을 나타냅니다. |
static int |
INSERT_ROW_CONFLICT
RowSet 객체가 데이터 소스에의 행의 삽입을 시행했을 때, 경합이 발생한 것을 나타냅니다. |
static int |
NO_ROW_CONFLICT
RowSet 객체가 데이터 소스내의 행의 갱신, 삭제, 또는 삽입을 시행했을 때, 경합은 발생하지 않았던 것을 나타냅니다. |
static int |
UPDATE_ROW_CONFLICT
RowSet 객체가 데이터 소스내의 행의 갱신을 시행했을 때, 경합이 발생한 것을 나타냅니다. |
인터페이스 java.sql. ResultSet 로부터 상속된 필드 |
---|
CLOSE_CURSORS_AT_COMMIT , CONCUR_READ_ONLY , CONCUR_UPDATABLE , FETCH_FORWARD , FETCH_REVERSE , FETCH_UNKNOWN , HOLD_CURSORS_OVER_COMMIT , TYPE_FORWARD_ONLY , TYPE_SCROLL_INSENSITIVE , TYPE_SCROLL_SENSITIVE |
메소드의 개요 | |
---|---|
Object |
getConflictValue (int index)
이 SyncResolver 객체의 현재의 행에 있는 지정된 열의 값을 가져옵니다. |
Object |
getConflictValue (String columnName)
이 SyncResolver 객체의 현재의 행에 있는 지정된 열의 값을 가져옵니다. |
int |
getStatus ()
이 SyncResolver 의 현재의 행의 경합 상태를 가져옵니다. |
boolean |
nextConflict ()
커서를 현재의 위치로부터, 경합 하는 값을 포함한 다음의 행으로 이동합니다. |
boolean |
previousConflict ()
커서를 현재의 위치로부터, 이 SyncResolver 객체내의 앞의 경합 하는 행으로 이동합니다. |
void |
setResolvedValue (int index,
Object obj)
obj를, 동기 하는 RowSet 객체의 현재의 행의 열 index 내의 값으로 해서 설정합니다. |
void |
setResolvedValue (String columnName,
Object obj)
obj를, 동기 하는 RowSet 객체의 현재의 행의 열 columnName 내의 값으로 해서 설정합니다. |
인터페이스 java.sql. Wrapper 로부터 상속된 메소드 |
---|
isWrapperFor , unwrap |
필드의 상세 |
---|
static final int UPDATE_ROW_CONFLICT
RowSet
객체가 데이터 소스내의 행의 갱신을 시행했을 때, 경합이 발생한 것을 나타냅니다. 데이터 소스내의 갱신 대상의 행의 값은,RowSet
객체의 해당하는 행의 원의 값과는 다릅니다. 즉, 데이터 소스내의 행은, 전회의 동기 처리뒤갱신되었는지, 삭제되고 있습니다.
static final int DELETE_ROW_CONFLICT
RowSet
객체가 데이터 소스내의 행의 삭제를 시행했을 때, 경합이 발생한 것을 나타냅니다. 데이터 소스내의 갱신 대상의 행의 값은,RowSet
객체의 해당하는 행의 원의 값과는 다릅니다. 즉, 데이터 소스내의 행은, 전회의 동기 처리뒤갱신되었는지, 삭제되고 있습니다.
static final int INSERT_ROW_CONFLICT
RowSet
객체가 데이터 소스에의 행의 삽입을 시행했을 때, 경합이 발생한 것을 나타냅니다. 전회의 갱신뒤, 데이터 소스에 삽입하려고 한 행과 같은 주키를 가지는 행이, 벌써 삽입되고 있습니다.
static final int NO_ROW_CONFLICT
RowSet
객체가 데이터 소스내의 행의 갱신, 삭제, 또는 삽입을 시행했을 때, 경합은 발생하지 않았던 것을 나타냅니다. SyncResolver내의 값에는 null
치가 포함됩니다만, 이것은 이 은행내에, 경합의 해결에 관련하는 정보가 포함되지 않은 것을 나타내고 있습니다.
메소드의 상세 |
---|
int getStatus()
SyncResolver
의 현재의 행의 경합 상태를 가져옵니다. 이것은, 경합이 발생했을 때 RowSet
객체가 시행하고 있던 조작을 나타냅니다.
SyncResolver.UPDATE_ROW_CONFLICT
,
SyncResolver.DELETE_ROW_CONFLICT
,
SyncResolver.INSERT_ROW_CONFLICT
, 또는
SyncResolver.NO_ROW_CONFLICT
Object getConflictValue(int index) throws SQLException
SyncResolver
객체의 현재의 행에 있는 지정된 열의 값을 가져옵니다. 이 값이, 경합의 원인이 된 데이터 소스내의 값입니다.
index
- 이 SyncResolver
객체의
이 은행내의 열을 지정하는 int
.
이 열로부터, 경합의 원인이 된 값을 취득한다
SyncResolver
객체의
현재의 행의 지정된 열의 값
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우Object getConflictValue(String columnName) throws SQLException
SyncResolver
객체의 현재의 행에 있는 지정된 열의 값을 가져옵니다. 이 값이, 경합의 원인이 된 데이터 소스내의 값입니다.
columnName
- 이 SyncResolver
객체의
이 은행내의 열을 지정하는 String
.
이 열로부터, 경합의 원인이 된 값을 취득한다
SyncResolver
객체의
현재의 행의 지정된 열의 값
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우void setResolvedValue(int index, Object obj) throws SQLException
RowSet
객체의 현재의 행의 열 index 내의 값으로 해서 설정합니다. obj 는, 내부에서 데이터 소스내에 값으로 해서 설정됩니다.
index
- 열번호를 지정하는 int
.
이 열에, 보관 유지하는 값을 설정하는obj
- RowSet
객체로 설정되어
데이터 소스에 남겨지는 값을 나타내는 Object
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우void setResolvedValue(String columnName, Object obj) throws SQLException
RowSet
객체의 현재의 행의 열 columnName 내의 값으로 해서 설정합니다. obj 는, 내부에서 데이터 소스내에 값으로 해서 설정됩니다.
columnName
- 렬명을 지정하는 String
객체.
이 열에, 보관 유지하는 값을 설정하는obj
- RowSet
객체로 설정되어
데이터 소스에 남겨지는 값을 나타내는 Object
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우boolean nextConflict() throws SQLException
nextConflict()
메소드의 최초의 호출에 의해, 최초의 경합 하는 행이 현재의 행이 됩니다. 2 번째의 호출에 의해 2 번째의 경합 하는 행이 현재의 행이 되어, 이후와 같이 계속됩니다.
nextConflict
메소드에의 호출에 의해, 입력 스트림이 열려 있으면, 암묵적으로 닫혀져SyncResolver
객체의 경고 체인이 소거됩니다.
true
,
그 이상행이 없는 경우는 false
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우,
또는 결과 세트의 형태가 TYPE_FORWARD_ONLY
의 경우boolean previousConflict() throws SQLException
SyncResolver
객체내의 앞의 경합 하는 행으로 이동합니다.
previousConflict
메소드에의 호출에 의해, 입력 스트림이 열려 있으면, 암묵적으로 닫혀져SyncResolver
객체의 경고 체인이 소거됩니다.
true
,
결과 세트의 밖에 있는 경우는 false
SQLException
- 데이타베이스 액세스 에러가 발생했을 경우,
또는 결과 세트의 형태가 TYPE_FORWARD_ONLY
의 경우
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요: 상자 | 필드 | 생성자 | 메소드 | 상세 : 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.