JavaTM Platform
Standard Ed. 6

패키지 javax.sql.rowset.spi

서드 파티의 벤더가 동기 프로바이더의 구현으로 사용해야 하는 표준 클래스 및 인터페이스입니다.

참조처:
          설명

인터페이스의 개요
SyncResolver 어플리케이션이, 수동의 의지결정 트리를 사용해 동기 경합이 발생했을 때의 대처 방법을 결정할 수 있도록(듯이) 하는 시스템를 정의합니다.
TransactionalWriter 보다 정밀한 트랜잭션(transaction) 제어를 할 수 있도록(듯이), 표준 SyncProvider abstract 클래스의 확장을 촉진하는 특별한 인터페이스입니다.
XmlReader SyncProvider abstract 클래스의 확장을 촉진하는, XML 지향의 동기 제공자용의 특별한 인터페이스입니다.
XmlWriter SyncProvider abstract 클래스의 확장을 촉진하는, XML 지향의 동기 제공자용의 특별한 인터페이스입니다.
 

클래스의 개요
SyncFactory 미접속의 RowSet객체에 의해 사용되는 SyncProvider인스턴스를 생성하는 서비스 프로바이더 인터페이스 (Service Provider Interface, SPI) 기구입니다.
SyncProvider 미접속의 RowSet 객체의 읽어내/기입 기능을 제공하는 동기기구입니다.
 

예외의 개요
SyncFactoryException SyncFactory 기구의 에러를 나타냅니다.
SyncProviderException SyncProvider 기구로 발생한 에러를 나타냅니다.
 

패키지 javax.sql.rowset.spi 의 설명

서드 파티의 벤더가 동기 프로바이더의 구현으로 사용해야 하는 표준 클래스 및 인터페이스입니다. 이러한 클래스 및 인터페이스를 정리해, 「서비스 프로바이더 인터페이스 (Service Provider Interface, SPI)」라고 부릅니다. 사용 가능한 SyncProvider 구현의 일람이 기재된 JDBC Web 페이지에 벤더 고유의 구현을 추가해, 개발자에게 구현을 공개하고 싶은 경우는,jdbc@sun.com 까지 전자 메일에서 연락해 주십시오. RowSet 객체로 구현을 사용할 수 있도록(듯이) 하려면 , 그 구현을 SyncFactory 싱글 톤에 등록할 필요가 있습니다. 등록 순서와 명명 규칙의 자세한 설명에 대해서는,SyncProvider 의 클래스 코멘트를 참조해 주세요.

목차

1.0 패키지의 스펙

javax.sql.rowset.spi 패키지는, 다음의 클래스 및 인터페이스로 구성되어 있습니다.

이 SPI 에는,javax.sql 패키지내의 다음의 인터페이스도 포함되어 있습니다.

SyncProvider 구현은, 미접속의 RowSet 객체가 데이터를 읽어들여, 변경을 더한 뒤 부하의 데이터 소스에 재차 기입할 수 있도록(듯이) 하는 수단을 제공합니다. 리더 객체 (RowSetReader 또는 XMLReader)는,CachedRowSetexecute 또는 populate 메소드가 불려 가면(자),RowSet 객체에 데이터를 읽어들입니다. 라이터 객체 (RowSetWriter 또는 XMLWriter)는,CachedRowSetacceptChanges 메소드가 불려 가면(자), 부하의 데이터 소스로 변경된 데이터를 기입합니다.

RowSet 객체의 변경 내용을 데이터 소스에 기입하는 처리를 「동기」라고 부릅니다. RowSet 객체의 라이터가 사용하는 동기의 레벨은,RowSet 객체의 SyncProvider 구현에 의해 결정됩니다. 동기의 다양한 레벨을 「그레이드」라고 부릅니다.

저그레이드의 동기는, 경합이 전혀 존재하지 않는지, 존재했다고 해도 적는다고 하는 오프티미스틱 (낙관적)인 상정한 기초로 행해집니다. 이 동기 모델을 「오프티미스틱 병행 모델」이라고 부릅니다. RowSet 객체내에서 변경된 데이터가 데이터 소스내에서도 변경되고 있는 경우는, 경합이 존재합니다. 오프티미스틱 병행 모델을 사용한다고 하는 것은, 경합이 존재하는 경우, 데이터 소스 또는 RowSet 객체에의 변경이 없어진다고 하는 것을 의미합니다.

이것에 대해서, 고그레이드의 동기 모델을 「염세적인 (비관적) 병행 모델」이라고 부릅니다. 이 모델에서는, 다른 사용자가 데이터 소스에 액세스 해 변경을 더할 가능성이 있다고 하는 상정한 기초로 동기 처리를 합니다. 염세적인 병행 모델에서는, 경합의 발생을 억제하기 (위해)때문에, 다양한 락 레벨이 설정됩니다.

최저 레벨의 동기로는,RowSet 객체에의 전변경 내용이, 단순하게 부하의 데이터 소스에 기입해집니다. 라이터는 경합의 체크를 실시하지 않습니다. 경합이 존재해, 데이터 소스의 값이 덧쓰기되었을 경우, 그 외의 사용자에 의한 데이터 소스의 변경은 없어집니다.

RIXMLProvider 구현은, 최저 레벨의 동기를 사용해,RowSet 의 변경을 단순하게 데이터 소스에 기입합니다. 이것은, 일반적으로, XML 데이터 소스가, 데이터의 무결성을 확보하기 위한 트랜잭션(transaction) 기술을 지원하고 있지 않기 때문입니다. 그러나, XML 베이스의 동기를 가능하게 하는 수단을 제공하려고 하고 있는 표준화 그룹도 존재합니다. 상세한 것에 대하여는, 이하를 참조해 주세요.

     http://www.syncml.org 

1 개(살)상의 레벨에서는, 라이터는 경합이 존재할지 어떨지를 체크해, 존재하는 경우는 데이터 소스에 아무것도 기입하지 않습니다. 이 동기 레벨에는,RowSet 객체가 데이터를 취득한 뒤 다른 사용자가 데이터 소스내의 대응하는 데이터로 변경을 더했을 경우,RowSet 객체의 변경이 없어진다고 하는 문제가 있습니다. RIOptimisticProvider 구현은, 이 동기 레벨을 사용합니다.

최고 레벨의 동기 (염세적인 병행 모델의 동기)로는, 라이터는, 경합을 피하기 위해서(때문에) 락을 설정합니다. 락의 설정이라고 해도, 단일의 행의 락으로부터, 테이블 또는 데이터 소스 전체의 락까지, 다양한 레벨이 있습니다. 따라서, 동기 레벨은, 복수의 사용자에 의한 데이터 소스에의 동시 액세스에 중점을 둘까하고, 라이터가 RowSet 객체내의 데이터와 데이터 소스를 동기 하게 하는 것에 중점을 둘까하고의 트레이드 오프가 됩니다.

반대로, 라이터의 기능을 유효하게 하면, 동시 액세스 기능은 무효가 됩니다. 미접속의 모든 RowSet 객체 (CachedRowSet,FilteredRowSet,JoinRowSet, 및 WebRowSet 객체)는,SyncFactory 기구로부터 SyncProvider 객체를 취득할 필요가 있습니다.

레퍼런스 구현 (RI)은, 다음의 2 살의 동기 프로바이더를 제공합니다.

이러한 SyncProvider 구현은, 레퍼런스 구현에 번들 되고 있기 (위해)때문에,RowSet 구현은 이러한 구현을 언제라도 이용할 수 있습니다. SyncProvider구현은,SyncFactory 싱글 톤에 등록되면(자), 이용 가능한 상태가 됩니다. RowSet 객체로부터 프로바이더 (생성자 내로 지정, 또는 CachedRowSetsetSyncProvider메소드의 인수로서 지정)의 요구를 받아들이면(자),SyncFactory 싱글 톤은, 요구된 프로바이더가 등록되어 있는지 어떤지를 확인합니다. 등록되어 있는 경우는,그 인스턴스를 작성해, 요구원의 RowSet 객체에 건네줍니다. 지정된 SyncProvider구현이 등록되지 않은 경우는,SyncFactory 싱글 톤은 SyncFactoryException 객체를 throw 합니다. 프로바이더가 지정되어 있지 않은 경우는, 디폴트 프로바이더 구현 RIOptimisticProvider 를 작성해, 요구원의 RowSet 객체에 건네줍니다.

WebRowSet 객체의 생성자 내에 프로바이더가 지정되어 있지 않은 경우,SyncFactory 는,RIOptimisticProvider 의 인스턴스를 건네줍니다. 다만, 구현에 의해,WebRowSet 의 생성자 이 프로바이더로서 RIXMLProvider 를 설정하는 경우,RowSet 객체의 읽기 및 기입은 XML 형식에서 행해집니다.

상세한 것에 대하여는,SyncProvider 클래스 스펙을 참조해 주세요.

벤더는,SyncProvider 구현과 임의의 동기 레벨을 개발해,RowSet 객체에 동기기구를 선택시킬 수가 있습니다. 또,jdbc@sun.com 로 Sun Microsystems 에 구현의 완전 수식 클래스명을 등록하는 것으로써, 그 구현을 공개할 수도 있습니다. 이 처리의 상세한 것에 대하여는, 이하로 설명합니다.

2.0 서비스 프로바이더 인터페이스 아키텍쳐(architecture)

  • 3.0 SyncProvider 구현 가이드

    4.0 동기 경합의 해결

    어플리케이션은,SyncResolver 인터페이스를 이용해, 경합이 발생했을 때의 수동에서의 대처법을 결정할 수 있습니다. CachedRowSetacceptChanges 메소드가 종료해, 경합의 존재가 확인되었을 경우, 이 메소드는 SyncProviderException 객체를 throw 합니다. 어플리케이션은 예외를 캐치 해,SyncProviderException.getSyncResolver() 메소드 호출에 의해 SyncResolver 객체를 취득시킬 수가 있습니다.

    SyncResolver 객체는,SyncResolver 인터페이스를 구현하고 있는 특수한 CachedRowSet 또는 JdbcRowSet 객체이며, 1 행씩 경합의 체크를 실시합니다. 동기 되는 RowSet 객체의 복제가 되어 있어, 경합의 원인이 되고 있는 데이터 소스의 데이터만을 포함하고 있습니다. 그 외의 모든 렬치는 null 로 설정됩니다. SyncResolver 객체는, 경합 하고 있는 값으로부터 다른 경합 하고 있는 값에 이동할 수 있는 메소드,nextConflictpreviousConflict 를 제공하고 있습니다.

    SyncResolver 인터페이스는, 이하의 처리를 실시하는 메소드도 제공합니다.

    CachedRowSetacceptChanges 메소드는, 불려 가면(자),RowSet 객체의 SyncProvider 객체를 위양 합니다. 이 SyncProvider 객체로부터 제공되는 라이터의 구현 방법에 따라, 경합의 체크 레벨 (그레이드)이 결정됩니다. 경합의 체크가 모두 완료해, 실제로 경합이 검출되었을 경우,acceptChanges 메소드는 SyncProviderException 객체를 throw 합니다. 어플리케이션은 예외를 캐치 해, 이 예외를 사용해 SyncResolver 객체를 취득할 수가 있습니다.

    그 후,SyncResolver 메소드를 사용해, 각 경합의 정보를 취득해, 대처 방법을 결정합니다. 어플리케이션 논리 또는 사용자에 의해,RowSet 객체내의 값을 지속시킬 필요가 있다고 하는 판단이 내려졌을 경우, 어플리케이션 또는 사용자는, 이 값으로 데이터 소스치를 덧쓰기할 수 있습니다.

    상세한 것에 대하여는,SyncResolver 인터페이스의 코멘트를 참조해 주세요.

    5.0 관련 스펙

    6.0 관련 항목


    JavaTM Platform
    Standard Ed. 6

    버그의 보고와 기능의 요청
    한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

    Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.