2010-12-07 4 views
0

은 내가 먼저 조금에게 현재의 구조를 설명합시다 (COM +, 자바) 다른 기술 사이의 커밋 :2 단계는

응용 프로그램 A는 JBOSS에서 실행되는 자바 응용 프로그램 및 자체 데이터베이스 (MSSQL)가 있습니다.

응용 프로그램 B는 자체 데이터베이스 (mssql)에서 지원되는 Windows 컴퓨터에서 실행되는 COM + 응용 프로그램입니다.

특정 비즈니스 요구 사항의 경우 응용 프로그램 A는 응용 프로그램 B를 호출해야합니다.이 목적을 위해 COM 프록시는 응용 프로그램 A (즉, JBOSS 시스템)와 동일한 컴퓨터에 설치됩니다. JNI 인터페이스를 사용하면 응용 프로그램 A -> B에서 전화를 걸 수 있습니다.

이것은 우리가 오늘 가지고있는 것이며 완벽하게 작동합니다. 이제 새로운 비즈니스 요구 사항이 나타 났으며 다음과 같이 2 단계 커밋 기능을 구현해야합니다.

새 응용 프로그램 C (예 : .net 응용 프로그램)가 생성 될 예정입니다. 자체 데이터베이스. 응용 프로그램 C는 세 번째 서버 (우리 사이트가 아님)에 있습니다.

응용 프로그램 C는 트랜잭션에서 응용 프로그램 A를 호출합니다. 응용 프로그램 A는 포함 된 비즈니스 논리를 고려한 후 몇 가지 작업을 수행해야합니다. 조치에는 응용 프로그램 A 데이터베이스에 대한 기록 및 응용 프로그램 B에 대한 호출이 포함됩니다. 응용 프로그램 B는 응용 프로그램 B 데이터베이스에 대한 추가 조치를 수행합니다. 응용 프로그램 C는받은 피드백을 기반으로 데이터베이스를 업데이트합니다. 이제 모든 작업이 성공하면 변경 내용이 데이터베이스에 커밋되고 그렇지 않으면 작업이 롤백됩니다.

질문은 간단합니다 (대답은 더 복잡하다고 생각합니다). 각 응용 프로그램을 지원하는 다양한 기술을 고려할 때 이것이 가능합니까? 모든 응용 프로그램이 .Net 또는 COM + 응용 프로그램으로 작성된 경우 이것이 가능하다는 것을 완전히 이해합니다. 이 시점에서 자바 컴포넌트를 다른 기술로 대체하는 것은 실행 가능한 옵션이 아닙니다. 어떤 아이디어?

우리는 JNBridge를 확인했지만 그것이 우리가 원하는 것을 제공 할 수 있다고 생각하지 않습니다. Application C가 문제가되지 않는다면 괜찮을 것입니다.

모든 아이디어/솔루션을 환영합니다. 귀하의 의견에 가장 적합한 옵션은 무엇입니까?

답변

2

플랫폼이 WS-AtomicTransaction 웹 서비스 인터페이스를 지원합니까? 이 표준을 사용하는 Java/.NET interop은 일부 공급 업체 제품에서 가능합니다. 이것은 진정한 2PC를 줄 수 있습니다.

그러나 2PC 수행 방법에 대해서는 성능 및 복잡성 비용이 있습니다. 이 아키텍처의 결합 의미를주의 깊게 살펴보십시오. 특히 오류가 발생할 때 문제 해결시 2PC 해결 단계 중에 발생합니다. 미확인 트랜잭션이 해결 될 때까지 잠금을 안전하게 제거 할 수 없습니다. 일부 실패 시나리오에서는 상당히 오랜 기간이 걸릴 수 있습니다.

실제로 2PC가 필요하지 않도록 문제를 재 설계 할 수 있습니다. 2PC가 없으면 많은 일이 발생합니다.

+1

JBoss 응용 프로그램이 WS_AT를 지원할 수도 있지만 실제 문제는 COM에서 COM 구성 요소로의 트랜잭션 흐름입니다 (app A -> app B). 내가 아는 한 MySQL에 대한 MS DTC 지원은 없습니다. 즉, JBoss 어플리케이션은 MS DTC와 대화 할 수있는 다른 트랜잭션 코디네이터를 통해 로컬 트랜잭션 컨텍스트를 생성하고이를 MySQL에 전달하여 트랜잭션에 참여할 수있게됩니다. 그러면 복잡성이 높아질 것입니다. 이미 JBoss에는 DTC와 함께 작업 할 수있는 트랜잭션 코디네이터가 이미있을 수 있습니다. –

+0

답변 해 주셔서 감사합니다. 그것은 양면에서 mssql입니다. 나는 그 질문을 편집했다. – yioann

관련 문제