더북(TheBook)

코드 4-12 싱글톤의 동시 접근 타임아웃 설정

import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.DependsOn;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.AccessTimeout;
import java.util.Map;
import javax.ejb.EJB;
import java.util.HashMap;
import javax.ejb.Lock;
import javax.ejb.LockType;
import java.util.concurrent.TimeUnit;
 
@Startup
@DependsOn(“MyLoggingBean”)
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Singleton
@AccessTimeout(value=120000) // 기본 단위는 밀리초입니다.
public class CacheSingletonBean {
 
private Map<Integer, String> myCache;
 
@EJB
MyLoggingBean loggingBean;
 
@PostConstruct
public void start(){
    loggingBean.logInfo(“시작합니다!”);
    myCache = new HashMap<Integer, String>();
}
 
@AccessTimeout(value=30, unit=TimeUnit.SECONDS)
@Lock(LockType.WRITE)
public void addUser(Integer id, String name){
    myCache.put(id, name);
}
 
@Lock(LockType.READ)
public String getName(Integer id){
    return myCache.get(id);
}
}

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.