다시 본 예제로 돌아가 @Lock을 붙여 접근을 제어해볼까요(코드 4-11)?
코드 4-11 @Lock으로 동시성을 관리
package com.devchronicles.singleton; import java.util.HashMap; import java.util.Map; import javax.annotation.PostConstruct; import javax.ejb.ConcurrencyManagement; import javax.ejb.ConcurrencyManagementType; import javax.ejb.DependsOn; import javax.ejb.EJB; import javax.ejb.Lock; import javax.ejb.LockType; import javax.ejb.Singleton; import javax.ejb.Startup; @Startup @DependsOn(“MyLoggingBean”) @ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) @Singleton public class CacheSingletonBean { private Map<Integer, String> myCache; @EJB MyLoggingBean loggingBean; @PostConstruct public void start(){ loggingBean.logInfo(“시작합니다!”); myCache = new HashMap<Integer, String>(); } @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); } }