2010-12-06 5 views
1

나는 영속 객체의 단일 인스턴스에 업데이트를 동기화하기위한 아이디어를 찾고 있습니다.속성 업데이트를 단일 도메인 인스턴스와 동기화하는 방법은 무엇입니까?

간단한 도메인 개체 :

public class Employee { 
    long id; 
    String phone; 
    String address; 
} 

가정하자 두 UI 인스턴스 직원 풀업 (1) 여기서, 식 (1). 첫 번째 클라이언트는 Employee (1)의 phone 속성을 편집합니다. 두 번째 클라이언트는 Employee (1)의 주소 특성을 편집합니다. 그들이 변경 사항을 제출할 때 둘 다 유지되어야합니다.

가능한 솔루션은 각 속성에 대한 업데이트 기능을 작성하는 것입니다 :

public void updatePhone(Employee employee) { 
    // right now I am synchronizing _employeeUpdateLock 
    // synchronize instance of Employee won't work 
    synchronized(something) { 
      // update phone 
    } 
} 
// a similar function for address 

이 접근 불행하게도 확장 성이 좋지 않습니다. API는 속성과 계속해서 일치해야합니다. 원본 객체의 복사본을 업데이트 함수 내에서 뽑아되지 않는 한 함수가, 클라이언트가 변경하고자하는 속성을 알 수 없기 때문에

public void update(Employee employee) { ... } 

이 작동하지 않습니다.

Hibernate는 행을 데이터베이스에 잠그는 메커니즘을 제공합니다. 이것은 잘 확장되지 않습니다.

아마도 해결책은 행이 수정 될 것으로 예상되는 빈도에 따라 달라집니다. 저주파 수정을 위해서는 동기화 및 잠금이 좋습니다. 빈도가 높은 수정의 경우 검색시 행의 복사본을 사용하여 업데이트 된 속성을 파악할 수 있습니다.

이 문제를 해결하기위한 더 나은 패러다임을 찾고 싶습니다. 감사.

답변

0

의도 한 아키텍처를 제대로 이해하지 못합니다. 여러 클라이언트가 동일한 데이터 객체의 인스턴스 하나를 공유해야합니까? 그것도 가능합니다 - 어떤 종류의 원격 객체 모델 (요즘에는 나쁜 것으로 간주됩니다)을 사용하는 것에서 부족한가요?

+0

개체의 인스턴스 하나가 아니라 데이터베이스에 하나의 행을 공유합니다. –

+0

좋아요, 나는 결론을 내리기 전에 전체 게시물을 읽는 습관을 택해야합니다. ;-) 문제는 기본적으로 낙관적 인 대 비관적 인 동시성의 문제처럼 들립니다. Hibernate 문서는 Hibernate가 지원하는 접근법과 함께 다음과 같이 잘 요약되어있다. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-optimistic – chris

관련 문제