코드 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); } }