2013-05-17 4 views
0

IBM Websphere 8에서 컨테이너 관리 지속성과 함께 EJB 2.1을 사용하고 있으며 다음과 같은 문제점이 있습니다. 단일 Object finder는 때때로 이 검색 기준에 대해 하나의 요소 만 데이터베이스에 있습니다. 이는 많은 스레드가 동일한 데이터베이스 항목에 액세스하는 동안에 만 발생합니다.websphere에서 EJB 2.1 및 컨테이너 관리 지속성 8 : 단일 오브젝트 찾기에서 2 개의 오브젝트를 리턴했습니다.

우리는 액세스 의도로 wsOptimisticUpdate를 사용하고 있습니다. 트랜잭션 내에서 요소는 먼저 비즈니스 키를 사용하여 검색됩니다 (이 단일 객체 찾기는 때로는 2 개의 요소를 찾아 예외를 throw 함). 많은 스레드가 동일한 비즈니스 키에 대해이 작업을 수행하면이 오류가 발생합니다.

이 예외에 대해 중단 점을 사용하고 데이터베이스에서 커밋되지 않은 읽기로 검사하면 데이터베이스에 요소가 하나만 있음을 알 수 있습니다. 그래서 CMP 구현이 실제로 쓰레드에 안전하지 않은 것처럼 보입니다. 누구든지 전에 그런 문제가 발생 했습니까?

Caused by: javax.ejb.FinderException: Single object finder returned 2 objects. 
    at 
com.ibm.ws.ejbpersistence.beanextensions.ConcreteBeanStatefulInstanceExtensionImpl.executeFind(ConcreteBeanStatefulInstanceExtensionImpl.java:1579) 
    at 

답변

0

저는 CMP 찾기에 익숙하지 않지만 SELECT 절에 DISTINCT 키워드를 포함하지 않는 EJB QL 사전 정의 된 쿼리가 원인 일 수 있습니다. 즉합니다 (astericks없이)

SELECT **DISTINCT** OBJECT(o) FROM YourEntity AS o WHERE o.id = ?1;