GWT의 RequestFactory를 사용하여 서버 측 클라이언트 변경 사항을 클라이언트에 전파하는 것이 가장 잘 처리되는 방법에 대한 조언이 필요합니다.GWT RequestFactory 및 클라이언트 측 서버 측 변경 사항 전파
두 개의 EntityProxies, PersonProxy 및 PersonListProxy (List에 대한 getter가 있음)가 있다고 가정합니다. 클라이언트가 서버에서 PersonList와 Person을 가져왔다 고 가정합니다.
클라이언트가 이러한 프록시 중 하나를 편집하고 요청을 실행하는 경우 RequestFactory의 기계는 서버 코드에 의해 수행 된 변경 사항을 감지하면 EntityProxyChange 이벤트를 발생시킵니다 (클라이언트가 예를 들어 엔티티의 표시를 업데이트 할 수 있습니다.
이제이 클라이언트가 Person 또는 PersonList를 다시 가져온 경우이 클라이언트가 다른 버전을 볼 수 있도록 서버가이 클라이언트의 요청을 벗어나는 엔티티를 변경한다고 가정합니다 (예 : 서버를 호출하는 다른 클라이언트로 인해).
제 질문은 RequestFactory 프레임 워크에서 클라이언트에게 변경 사항을 알려주고 (가능한 한 많은 기계류를 재사용하는) 가장 좋은 방법은 무엇입니까? 서버에서 클라이언트로 간단한 메시지 (예 : Google App Engine의 채널 API 또는 서버 전송 이벤트)를 보낼 수있는 방법이 있다고 가정합니다.
한 가지 아이디어는 서버가이 채널을 통해 특정 ID가있는 Person 또는 PersonList가 변경되었다는 메시지를 보내는 것입니다. 이들 메시지의 수신을 처리하는 클라이언트 코드는 RequestFactory를 사용하여 엔티티를 다시 패치 (예를 들면 발견) 할 수있다. 이 변경 사항은 EntityProxyChange 이벤트에 의해 클라이언트의 다른 부분에 전파되어야합니다.
이 방법이 있습니까? (그리고 클라이언트가 이미 엔터티의 현재 버전을 가지고있는 경우 (예 : 서버가 바보 상태 였고 클라이언트가 변경 한 사항을 클라이언트에게 알린 경우) 트리거 된 다시 불러 오기는 전체 메타 데이터가 아니라 약간의 메타 데이터 만 전송합니다. 엔티티 다시)
ADDED : 그것에 대해 좀 더 생각
, 나는 EntityProxyId 년대는 서버 전송 이벤트 채널에 대해 생성 될 수 있는지 궁금합니다. 서버의 엔티티가 변경되면 서버는 서버 ID 만 갖습니다. 물론 클라이언트에게 보낼 수는 있지만 클라이언트는 EntityProxyId 만 알고 있습니다. 물론 각 EntityProxy에 getId() (getStableId()에 추가)를 추가 할 수는 있지만 모든 서버 응답에 중복 데이터가 추가되는 것처럼 보입니다.
매우 흥미로운 질문입니다! 단지 참고 사항 : "diff"는 RF에서 항상 클라이언트에서 서버까지입니다 (이것은 클라이언트 측에서'edit()'가하는 것입니다 : diff를 만들 수 있도록 변경 내용 추적) –
아, 'find'는 항상 새로운 EntityProxy를 생성하고 올바른 ID와 버전을 가진 이미 존재하는 EntityProxy를 고려하지 않습니다. 그리고 클라이언트 지식이있는 곳은 여기 없기 때문에 소규모 조직을 요청에 조심스럽게 돌려 보내야합니다. – Marc
Understanding ... RequestFactory는 서버 측 엔티티의 어느 부분이 변경 되었는가 알 수 없으므로 모두 또는 아무것도 아닐 수 있습니다. – Marc