내 응용 프로그램은 2 노드가 있고 지속성 공급자 toplink를 사용하여 MS SQL Server 2005에 연결되는 weblogic 9 클러스터 환경에 배포됩니다. 배포 된 응용 프로그램은 Java로 작성됩니다.weblogic 클러스터 환경에서 작업 할 때 행 잠금이 실패했습니다 (클러스터 안의 여러 노드)
- 트랜잭션 그들에
- 프로세스들을
- 업데이트 테이블 A 잠금 테이블 A와 장소 행에서
- 선택 항목 시작 :
내 응용 프로그램 요청 서빙 할 때 간단한 조작을 할 필요가 그 결과.
- 최종 거래
자바 코드는 같다 :
EntityManager em =Persistence.createEntityManagerFactory("NewPersistenceLevelPU").createEntityManager;
EntityTransaction transaction = em.getTransaction();
transaction.begin();
// step 2
em.createNativeQuery("select * from Table_A with(updlock, rowlock) where id = 123");
List<List<Object>> results = (List<List<Object>>) query.getResultList();
//step 3
SomeOperation(results);
// step 4, using the results from step 3
em.createNativeQuery("update Table_A set Column A = 'something' where id = 123");
// step 4
em.flush();
transaction.commit();
내가 동시에 노드 1과 노드 2에 요청 A를 실행하는 경우, 두 노드를 진행할 수있을 것으로 보인다 내 예상 밖의 3 단계로. 예상대로 데이터베이스가 노드 (예 : 노드 1)에 의해 잠겨져 있어야하며 (with(updlock, rowlock)
) 첫 번째 트랜잭션이 커밋 될 때까지 차단되어야합니다.
내가 잘못했는지 알 수 있습니까? 도움을 주셔서 감사합니다.
답장을 보내 주셔서 감사합니다. 좀 더 조사 후, 나는 다음과 같은 발견
우리의 방법은 사실 그래서 난 지금 궁금<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="NewPersistenceLevelPU" transaction-type="JTA">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<jta-data-source>TestDB</jta-data-source>
<properties>
<property name="toplink.cache.type.default" value="" />
</properties>
</persistence-unit>
</persistence>
을 다음과 같이 persistence.xml을 인 MDB
에 의해 호출
- : 1. 응용 프로그램 관리 또는 컨테이너 관리 트랜잭션 관리자입니까? 2. 두 경우 모두 응용 프로그램 내에서 트랜잭션을 어떻게 처리 할 수 있습니까? UserTransaction 또는 EntityTransaction을 사용합니까? 그것이 비록 통과하기 전에
많은 감사
도움을 주셔서 감사합니다. –