개발자가 비즈니스 논리에만 집중해야하므로 App Server가 스레딩을 처리한다는 것을 알고 있습니다 ... 하지만 예제를 고려하십시오. 상태 비 저장 EJB에는 CountManager 유형의 구성원이 있습니다.EJB에서 멀티 스레딩을 할 때주의해야 할 사항은 무엇입니까?
@WebService
@Stateless
public class StatelessEJB {
private CountManager countManager;
...
public void incrementCount() {countManager.incrementCount();}
public int getCount(){return countManager.getCount();}
}
그리고 CountManager
public class CountManager {
public void increaseCount() {
// read count from database
// increase count
// save the new count in database table.
}
public int getCount() {
// returns the count value from database.
}
}
개발자는 여기에 멀티 스레딩에 대해 생각해야한다. CountManager를 EJB로 만들면 문제가 해결되지 않을 것으로 생각됩니다. 개발자가주의해야 할 일반적인 가이드 라인은 무엇입니까?
업데이트 : 코드가 변경되었습니다. EJB의 메소드가 웹 서비스로 노출되어 있으므로 클라이언트가 호출하는 순서를 제어 할 수 없다고 가정합니다. 트랜잭션 속성은 기본값입니다. 다중 스레드 시나리오에서이 코드가 올바르게 작동합니까?
"이 코드는 스레드로부터 안전하지 않습니다"라고 설명하는 이유를 설명하십시오. 어떤 작업을 어떤 순서로 실행하고 어떤 결과를 기대합니까? EJB 동시성 액세스 또는 동시 데이터베이스 액세스가 걱정됩니까? 기본 EJB 인'TransactionAttribute'를 사용하고 있습니까? –
@PiotrNowicki가 질문을 업데이트하고 언급 한 진술을 삭제했습니다. 나는 결과가 정확하지 않다는 것을 두려워한다. – anergy