2013-07-31 4 views
0

우리는 서버에서 여러 개의 weblogic 인스턴스를 실행합니다. 이 모든 인스턴스는 하나의 데이터베이스에만 액세스합니다.여러 개의 웹 로직 데이터베이스 액세스 동기화

테이블 중 하나는 처리해야하는 요청을 저장합니다. 하나 이상의 웹 로직이 주어진 시간에 데이터베이스에 액세스 할 수 있으며 요청을 선택하여 처리 할 수 ​​있습니다. 이 요청으로 인해 여러 번 처리됩니다. &가 문제를 만듭니다.

두 로그가 동시에 해당 레코드에 액세스 할 수 있기 때문에 레코드를 처리할지 여부를 플래그를 저장하는 DB에 추가 속성을 만드는 용도로 사용하지 않습니다.

데이터베이스에 액세스하는 코드는 Java이지만 해당 부분을 동기화하는 용도로는 사용하지 않습니다. 각 웹 로직에는 별도의 코드 사본이 있습니다.

여러 개의 실행중인 웹 로직에서 하나의 레코드가 한 번만 처리되도록하는 방법을 제안하십시오.

+0

Oracle Advanced Queues를 살펴보십시오. 테이블 레코드를 대기열에 게시하고 여러 소비자가있을 수 있습니다. 백서 - http://www.oracle.com/technetwork/database/features/data-integration/oracle-aq-tech-wp11-2-191324.pdf – OldProgrammer

답변

1

글쎄, 대답은 최대 절전 모드 또는 간단한 JDBC와 같은 API를 사용하여 DB에 액세스하는 방법에 따라 다릅니다. 할 수있는 한 가지는 세션을 통해이를 관리 할 수 ​​있다는 것입니다. 레코드에 액세스하면 DIRTY이되므로 다음에 액세스하지 않습니다. 애플리케이션에서 "어떤 요청이 처리되고 어떤 요청이 아닌지"를 알 수있는 메커니즘을 추가해야합니다.

2 weblogic이 바로 그 기록에 액세스 할 수 있습니다.

이렇게 나에게는 끔찍한 것처럼 보입니다. 확실히 원 자성을 보장해야합니다. 나는 (확실하지 않은) 한 웹 로직이 액세스 할 때 트랜잭션 잠금을 사용한다고 생각합니다. 다른 웹 로직은 실제로 잠금을 해제 한 후에 동일한 레코드의 다른 새로운 복사본을 가져야합니다.

희망이 도움이됩니다.

관련 문제