2011-02-03 2 views
0

사용자 이름과 서비스 유형에 따라 고유 한 ID를 생성하는 코드가있었습니다. 고유 ID는 db입니다. db는 볼 수없는 DAO 클래스를 통해 읽습니다. 이드를 만드는 데는 많은 단계가 필요합니다.db 값을 사용한 Java 동기화

create(user,service) { 
    id=getIdViaDAO(user,service) 
    if(id==null) { 
     create few classes and call few methods. 
     id=generareId(few objects) 
     session.setId(id) 
     dao.createSession(session) 
    } 
    return id 
} 

멀티 스레드 환경에서는 고유 ID가 보장되지 않습니다.

는 고유성

솔루션을 보장하려면 내가 값으로 키 ID와 userId를 + 서비스와 ConcurrentHashMap의의 ID를 캐시합니다. 메서드가 호출 될 때마다 키 값이 없으면 값 (id)을 확인하고 id를 만듭니다. 이것은 경합을 줄이고 독창성을 보장합니다.

내 솔루션에 문제가 있는지 궁금하거나 더 나은 해결책이 있습니까?

+0

동일한 사용자 및 서비스로 getIdViaDAO를 호출하면 (단일 스레드 사용) 항상 동일한 ID를 얻을 수 있습니까? id는 로컬 변수 –

+1

입니다. 또한, 다른 조합의 사용자 + 서비스가 다른 ID를 생성합니까? – chahuistle

답변

0

동일한 사용자와 서비스가 동일한 ID를 제공해야하므로 잘됩니다. 몇 가지를 조심합니다 :

  • 것은 확실 사용자 ID 및 서비스 hashCode()와 equals() 제대로
  • 전체 create() 메소드
  • 주위에 동기화() 잠금을 가지고 있는지 확인을 구현할 수 있도록