2012-05-29 6 views
2

Solrj를 사용하여 Solr에서 트랜잭션 관리를 처리하는 방법은 무엇입니까? 이것과 관련된 그물에 관한 많은 문서가 없습니다. 그러나 누군가가 SolrJ를 사용하여 트랜잭션 관리와 관련된 어떠한 링크 나 정보를 제공 할 수 있다면 고맙겠습니다.solrj를 사용하여 solr 트랜잭션 관리

+2

DB 스타일 트랜잭션 관리에 대해 이야기하고 있습니까? SolrJ에는 아무런 의미가 없습니다. 롤백이 없으며 SOLR에 대한 웹 서비스 호출을 통해 커밋이 전송되므로 대기열에 저장되므로 메모리에서 동시 액세스 문제가 발생할 위험이 없습니다. 임베디드 SOLR을 사용하고 있습니까? – nickdos

+0

예, Solrj를 사용하여 DB 스타일 트랜잭션 관리를 달성 할 수있는 방법에 대해 궁금합니다. Solrj와 Solr에 여러 개의 읽기 및 쓰기가있을 때입니다. 우리는 DB 트랜잭션 관리를 위해 Hibernate를 사용하고있다. Solr 또는 데이터베이스에서 예외가 발생하면 데이터베이스 커밋과 solr 커밋 모두 롤백해야합니다. 내가 이해 한대로이 트랜잭션 관리는 커밋과 롤백을 위해 SolrJ API를 사용하여 코드에 모두 작성해야하는 것처럼 보입니다. 이 작업을 수행하는 다른 더 좋은 방법이 있다면 알려주십시오. 감사. – Ravi

+0

당신이 물어 본 질문에서 다시 돌아가서 "correct"라고 대답 한 사람이 있는지 확인하십시오. 그렇다면 녹색 틱 아이콘으로 정확하게 표시하십시오. 귀하의 요금은 지금은 너무 나쁘지 않다, 그래서 아마 당신이 이미 해본 75 %를 말합니다 ... – nickdos

답변

2

SolrJ의 트랜잭션을 프로그래밍 방식으로 처리해야합니다. 여러 번 쓰기를 처리 할 때.

  1. SolrServer API 추가 메소드를 사용하여 SolrInputDoucments를 서버에 추가하십시오.
  2. 모든 SolrInputDocuments가 추가되면 SolrServer API에서 commit 메소드를 호출하여 모든 변경 사항을 커밋합니다.
  3. Solr에서 예외가 발생하는 경우 Solr에 쓰기를 롤백하려면 SolServer API 롤백 메소드를 호출하십시오.
  4. 데이터베이스에 쓰기 작업도 롤백하려면 catch 블록에서 런타임 예외를 던져주십시오.

이렇게하면 트랜잭션 관리를 처리합니다. 누구든지 더 나은 답변을 갖고 있다면 답을 자유롭게 개선하십시오.

+0

커밋이 예외를 throw하는 상황을 어떻게 처리합니까? @Transaction 주석을 사용하는 경우이 실패는 SolrJ를 사용하는 메서드 본문 외부에서 발생합니다. –

+0

보고있는 예외는 무엇입니까? Exception으로 커밋이 실패하면 Exception을 잡아서 Solr 롤백을 호출 할 수 있습니다. 그러나 롤백은 마지막 커밋에 대한 모든 호출을 롤백합니다. – Ravi

관련 문제