서비스 데이터 오브젝트를 통한 데이터 액세스, API 버전 1.0 및 2.01
SDO(Service Data Objects) 프레임워크는 소스에 종속되지 않는 결과 세트를 제공하는 데이터 중심의 분리된 XML 통합 데이터 액세스 메커니즘입니다.
- SDO는 EJB(Enterprise JavaBeans) API의 오브젝트 표시와 같은 특수 데이터 형식으로 작업하는 클라이언트 애플리케이션의 요구를 제거하기 때문에 데이터 중심입니다. 대신에 클라이언트는 쉽게 관찰할 수 있는 데이터 오브젝트의 그래프로 작업합니다.
- SDO는 검색된 결과가 백엔드 데이터 저장소 연결 또는 트랜잭션과 독립적이므로 분리됩니다.
- SDO는 검색된 데이터를 XML 형식으로 쉽게 변환할 수 있는 서비스를 제공한다는 점에서 XML 통합 메커니즘입니다.
- Java EE(Java™ Platform, Enterprise Edition) 데이터 프로그래밍 모델을 간소화합니다.
- SOA(Service-Oriented Architecture)로 데이터를 추상화합니다.
- 데이터 애플리케이션 개발을 단일화합니다.
- XML을 지원하고 통합합니다.
- Java EE 패턴 및 우수 사례를 통합합니다.
서비스 데이터 오브젝트 프레임워크는 데이터 애플리케이션 개발을 위한 단일화된 프레임워크를 제공합니다. SDO를 이용하면 데이터에 액세스하여 이를 사용하기 위해 기술별 API를 익힐 필요가 없습니다. 관계형 데이터베이스, 엔티티 EJB 컴포넌트, XML 페이지, 웹 서비스, Java 커넥터 아키텍처, JavaServer Pages 등을 포함한 여러 데이터 소스의 데이터에 대한 작업을 가능하게 하는 한 API인 SDO API만을 알고 있으면 됩니다.
일부 다른 데이터 통합 모델과 다르게 SDO는 데이터 추상화 중에도 중지하지 않습니다. 또한 SDO 프레임워크는 많은 수의 Java EE 패턴 및 우수 사례를 통합하여 입증된 아키텍처 및 설계를 애플리케이션으로 쉽게 통합하도록 합니다. 예를 들어, 현재의 대부분의 웹 애플리케이션은 해당 시점에서 백엔드 시스템에 100퍼센트 연결되지 않기 때문에 SDO는 연결되지 않은 프로그래밍 모델을 지원합니다. 마찬가지로 많은 애플리케이션은 여러 관심사로 이루어져 대단히 복잡한 경향이 있습니다. 데이터를 어떻게 저장할 것인가? 전송은? GUI 프레임워크로 사용자에게 제시? SDO 프로그래밍 모델은 이러한 각 관심사를 명백하게 구분할 수 있게 하는 사용법 패턴을 제시합니다.
SDO 컴포넌트
SDO의 아키텍처 개요는 프레임워크를 이루는 각 컴포넌트를 설명하고 이들의 상호 작동 방식에 대해 논의합니다. 나열된 처음 세 컴포넌트는 SDO의 "개념상" 기능으로 API에 해당하는 인터페이스가 없습니다.
- SDO 클라이언트
SDO 클라이언트는 SDO 프레임워크를 사용하여 데이터에 대해 작업합니다. 기술 특정 API 및 프레임워크를 사용하는 대신 이들은 SDO 프로그래밍 모델과 API를 사용합니다. SDO 클라이언트는 SDO 데이터 오브젝트에서 작업하므로 작업 중인 데이터가 지속되거나 직렬화되는 방식을 알고 있을 필요가 없습니다.
- 데이터 중개자 서비스
- 데이터 중개자 서비스(DMS)는 데이터 소스에서 DataGraph를 작성하고
DataGraph에 대한 변경사항에 기초하여 데이터 소스를 업데이트합니다. (DataGraph는
서비스 데이터 오브젝트를 포함하는 엔벨로프 오브젝트입니다.)
DMS는 클라이언트와 데이터 소스 간에 데이터를 이동하는 메커니즘을 제공합니다. DMS는 백엔드 특정 메타데이터로 작성됩니다. 이 메타데이터는 DMS에 의해 작성되는 DataGraph의 구조 및 백엔드에 대해 사용되는 조회를 정의합니다. DMS가 DataGraph를 생성하도록 요청되면, 대상 백엔드를 조회하여 기본 결과 세트를 DataGraph 형식으로 변환합니다. DataGraph가 리턴되면, DMS가 더 이상 이에 대한 참조를 갖지 않으므로 DataGraph와 관련하여 Stateless 상태가 됩니다. DMS는 기존 DataGraph의 수정사항을 백엔드로 비우도록 요청될 때 원래 상태의 DataGraph에서 변경사항을 추출하여 이들을 백엔드로 비웁니다. 일반적으로, DMS는 변경이 예상되지 않는 동시성 제어 전략의 일부 양식을 사용하여 업데이트 충돌을 발견합니다.
WebSphere® Application Server는 두 개의 개별 데이터 중개자 서비스에 대한 기능을 제공합니다. 단순히 관계형 데이터 소스에서 데이터를 검색하고 DataGraph를 리턴해야 하는 경우에는 Java 데이터베이스 데이터 중개자 서비스를 사용하는 것이 좋습니다. 그렇지만 비즈니스 로직이 있는 경우에는 엔티티 Bean에 대한 데이터의 오브젝트 지향(OO) 렌더링을 수행하려 할 수 있습니다. SDO를 엔티티 Bean에 유사한 데이터의 오브젝트 렌더링으로 간주하는 경우도 있습니다. 엔티티 Bean은 더 나은 오브젝트 관계형(OR) 맵핑 도구를 가지며 엔티티 Bean에 대한 EJB 컨테이너와 지속성 관리자는 더 세련된 캐싱 정책을 제공합니다. 최상의 선택은 EJB 데이터 중개자 서비스입니다. EJB 중개자는 이러한 캐시에 대해 작업할 수 있습니다. 또한, 엔티티 Bean 프로그래밍 모델은 단일 레벨 저장 모델입니다. 엔티티 간에 탐색할 수 있으며 컨테이너 및 지속 관리자는 데이터를 필요할 때 미리 페치하거나 여유 있게 페치할 수 있습니다. 업데이트 시, 프로그래머는 트랜잭션을 커미트하고 컨테이너 및 지속 관리자는 업데이트된 Bean을 추적하여 데이터 저장소 및 메모리 캐시에 기록하는 작업을 수행합니다.
- 데이터 소스
- 데이터 소스는 백엔드 데이터 소스(예: 지속성 데이터베이스)로 제한되지 않습니다. 데이터 소스는 자체 형식의 데이터를 포함합니다. SDO 1.0 API의 경우, DMS만이 데이터 소스에 액세스하고 SDO 애플리케이션에는 액세스하지 않습니다. 애플리케이션은 SDO 1.0 데이터 그래프에 대해서만 작업합니다.
- DataObjects
SDO의 기본 컴포넌트로, DataObjects는 SDO 클라이언트에 대해 구조화된 데이터의 공통 보기를 제공합니다. DataObjects는 직렬화 가능 유형(예: 문자열 또는 정수)의 여러 다른 속성을 보유할 수 있습니다. 또한 보다 복잡한 DataObjects는 단순한 데이터 오브젝트를 포함할 수도 있습니다. DataObjects는 특성에 해당하는 모든 데이터를 보유합니다.
SDO 버전 1.0 데이터 오브젝트는 항상 서로 연결되어 있으며 데이터 그래프에 포함됩니다. 버전 1.0 DataObject 인터페이스는 간단한 작성 및 삭제 메소드(다양한 서명이 있는 createDataObject() 및 delete())와 유형(인스턴스 클래스, 이름, 특성 및 네임 스페이스)을 얻기 위한 반사 메소드를 제공합니다. 인터페이스는 외부 코드 생성 프로그램에서 작성한 정적 오브젝트 유형도 지원합니다. 자세한 정보는 "JDBC DMS에 대한 동적 및 정적 오브젝트 유형" 기사를 참조하십시오.
- DataGraphs
DataGraph는 서비스 요청에 대한 응답으로 리턴되는 구조화된 결과입니다. DMS는 기본 백엔드 조회 결과를 DataGraph로 변환하며 이는 원래 백엔드 데이터 저장소와는 독립적입니다. 따라서, 서로 다른 데이터 소스 간에 DataGraph를 쉽게 전송할 수 있습니다. DataGraph는 상호 연결된 각 SDO DataObject 노드로 구성됩니다. 이는 원래 데이터 소스의 연결 및 트랜잭션과는 독립적입니다. DataGraph는 원래 소스로부터 이에 대해 수행된 변경사항을 추적합니다. 이 변경 히스토리는 DMS가 원래 데이터 소스에 다시 변경사항을 반영하기 위해 사용할 수 있습니다. DataGraphs는 XML 문서로(로부터) 쉽게 변환할 수 있으므로 다중 레이어 시스템 아키텍처 내의 레이어 간에 이를 전송할 수 있습니다. DataGraph는 너비 우선 또는 깊이 우선 방식으로 액세스할 수 있으며 웹 서비스에 대해 직렬화할 수 있는 연결되지 않은 데이터 캐시를 제공합니다.
중개자가 리턴한 DataGraph에는 동적 또는 생성된 정적 DataObject가 포함될 수 있습니다. 생성된 클래스를 사용하면 더 쉽게 프로그램하고 런타임 성능을 향상시키는 안전한 유형의 인터페이스가 제공됩니다. EMF 생성 클래스는 추가 속성 및 참조를 정의할 수 있다는 점을 제외하면 동적 DataObject에 대해 작성할 스키마와 이름 및 유형이 일치해야 합니다. 조회에 지정된 속성 및 참조만 데이터로 채워집니다. 나머지 속성 및 참조는 설정되지 않습니다.
- 변경 요약
SDO 1.0 변경 요약은 DataGraphs에 의해 포함되고 DMS가 리턴한 DataGraphs에 대한 변경사항을 표시하는 데 사용됩니다. 이는 처음에는 비어 있으며(DataGraph가 클라이언트에 리턴될 때) DataGraph가 수정될 때 채워집니다. DMS는 백엔드 업데이트 시 데이터 소스에 변경사항을 다시 적용하기 위해 변경 요약을 사용합니다. 이들은 DataGraph의 작성 및 삭제된 DataObject와 변경된 특성(이전 값과 함께)의 목록을 제공하여 DMS가 데이터 소스를 효율적이고 점증적으로 업데이트할 수 있게 합니다. 정보는 변경 요약의 로깅이 활성화될 때에만 변경 요약에 추가됩니다. 변경 요약은 로깅을 켜고 끄는 DMS의 메소드를 제공합니다.
참고: SDO 1.0 변경 요약은 클라이언트 API가 아니며 DMS만이 이를 사용합니다.- 특성, 유형, 시퀀스
DataObjects는 컨텐츠를 일련의 특성에 보유합니다. 각 특성에는 유형이 있으며 이는 기본(예: int) 또는 일반적으로 사용되는 데이터 유형(예: 날짜)과 같은 속성 유형이거나 참조인 경우 다른 DataObject의 유형입니다. 각 DataObject는 특성에 대한 읽기 및 쓰기 액세스 메소드(getter 및 setter)를 제공합니다. 특성 이름(String), 번호(int) 또는 특성 메타오브젝트 자체를 전달하여 특성에 액세스할 수 있도록 이러한 액세서에 대한 몇 개의 오버로드 버전이 제공됩니다. String 액세서도 특성 액세스를 위한 XPath 유사 구문을 지원합니다. 예를 들어, 번호가 123인 첫 번째 부서를 가져오기 위해 회사 DataObject에서 get("department[number=123]")을 호출할 수 있습니다. 시퀀스는 더 고급 개념입니다. 이를 사용하여 순서가 특성-값 쌍의 이기종 목록에서 유지됩니다.
자세한 소개 정보
적은 샘플 애플리케이션도 포함하는 SDO 1.0에 대한 좋은 소개는 IBM® developerWorks® 논문의 "Introduction to Service DataObjects"를 참조하십시오.