문제

우리는 여전히 우리가 일하고있는 J2EE 앱을 가지고 있습니다. Oracle DB에서 실행됩니다. 비즈니스 계층은 리치 클라이언트 인터페이스가있는 EJB 2.0으로 코딩됩니다.

이제 응용 프로그램이 여러 사이트에 배치 될 예정입니다. 각 사이트는 새로운 품목 (새로운 계약 등)을 만들 것입니다.

우리가 깨닫고 싶은 것은 로컬 스키마와 동일한 DB 스키마를 사용하여 중앙 위치 DB에 추가 된 모든 새 항목을 복제하는 것입니다.

이것을 달성하는 가장 효과적인 방법은 무엇이라고 생각하십니까?

생성 된 모든 새 항목을 직렬화하고 Java Message Service 대기열을 통해 통합을 위해 원격 사이트로 보내는 것에 대해 생각했습니다. 그 접근 방식이 좋은가요?

또한 위성으로 복제 할 몇 가지 변경 사항이있을 것입니다.

도움이 되었습니까?

해결책

나는 센터와의 동기 관계가 원하지 않는 커플 링을 소개한다고 말합니다. 그러므로 당신의 비동기 아이디어는 나에게 꽤 좋아 보인다. 레코드에 위치에 따라 식별자가있을 수 있으므로 다른 위치의 새로운 계약이 충돌하지 않으며 센터에 대한 복제에서 약간의 대기 시간을 수락 할 수 있습니다.

따라서 간단한 경우는 각 위치에서 중앙까지 JMS 메시지를 사용하는 것입니다.

이 평가에 대한 좋은 점은 위성이 중앙의 데이터베이스 구조에 대해 알 필요조차 없으며 완전히 나이드로 설계 할 수 있다는 것입니다.

중앙에서 위성으로 변경을 다시 복제 해야하는 경우 상황이 더 흥미로워집니다. 가장 큰 문제는 센터의 변화와 위성의 변화 사이에 충돌을 일으킬 수 있는지 여부입니다.

간단한 사례 : 모든 데이터 항목에는 하나의 "홈"이 있습니다. 예를 들어, 원래의 위성은 변화가 이루어지는 곳입니다. 또는 창조 후 센터는 Ti가 변경하는 유일한 장소입니다. 이 경우 센터를 "허브"로 취급 할 수 있으므로 위성에 대한 변경 사항을 전달할 수 있습니다. 간단한 JMS는 괜찮을 것입니다.

약간 더 어려운 경우 : 한 번에 한 곳에서만 변경할 수 있습니다. 따라서 잠금 체계가있는 경우 Somne 종류를 소개 할 수 있습니다. 나는 센터를 소유자로 사용하고 동기 웹 서비스를 사용하여 데이터를 잠그고 업데이트하는 경향이 있습니다. 이제 우리는 결합되어 있지만 결정적인 소유자가 있어야한다면 필요합니다.

상당히 복잡한 경우 : 누구나 잠금없이 어디서나 변경할 수 있습니다. 그것은 일종의 "행동을 먼저, 나중에 사과하십시오"접근법입니다. 우리는 변화가 충돌하지 않는 낙관적 접근법을 취합니다. 우리는 승인을 위해 변경 사항을 센터로 보낼 수 있으며 센터는 낙관적 잠금을 사용하거나 비 분쇄 변경 접근 방식을 병합 할 수 있습니다. 나는 원래를 바꾸는 것을 바꾸면서 이것을하는 경향이 있지만 실제로 동기 호출로 처리하는 것은 그것을 처리하는 경향이 있습니다. 따라서 센터의 가용성에서 변화의 사양을 분리합니다. 보다 정교한 데이터베이스에는 이에 도움이 될 수있는 차이/병합 기능이 있습니다.

큰 의문은 센터의 가용성과 상충되는 변화의 가능성과 결합하려는 정도입니다. 교활한 응용 프로그램 디자인은 종종 갈등의 가능성을 크게 줄일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top