이 간단한 단순한 문제는 추측 할 수 있지만 왜 그렇게되는지 설명 할 수는 없습니다. @Singleton 주석 즉 싱글 톤 타이머를 사용하는 EJB 타이머를 구현했습니다.타이머가 여러 개의 타이머 인스턴스를 만듭니다.
매 5 분마다 실행되도록 설정했습니다. 프로세스가 그렇게 1 초 즉
(EJB default - 1)
(EJB default - 2)
(EJB default - 3)
(EJB default - 4)
과의 간격에서 10 개 스케줄러 인스턴스를 동시에 실행 실행
@Singleton
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class Scheduler {
private static final double timerVar = Math.random() * 33;
static Logger logger = Logger.getLogger("Scheduler");
@Schedule(second = "*", minute = "*/5", hour = "*", persistent = true)
public void doWork() {
logger.log(Level.INFO, "timer value for this session : " + timerVar);
}
}
: 코드는 다음과 같이 보입니다. 나는 코드 내에서 긴 작업을 넣을 때, (EJB default - 1)
이 완료되지 않았습니다 및 실행을 시도 (EJB default - 2)
때이 말을 나에게 오류를 제공합니다
JBAS014373 : 조직에 EJB 3.1 PFD2 4.8.5.5.1 동시 접속 제한 시간을. [email protected] - 한 번에 실행되도록 내가 여러 EJB 스케줄러 인스턴스를 피할 수있는 방법, 5000 MILLISECONDS
먼저 내에서 잠금을 얻을 수 있을까? 둘째로, "5000MILLISECONDS 내에서 잠금을 얻을 수 없습니다"라는 거래는 무엇이며 어떻게 피할 수 있습니까?
시간 초과 오류로 인해 JBOSS 대기열에 많은 티켓이 있다는 것을 발견했습니다 (here).
편집
추가가 읽을 수 그래서 최신 코멘트의 코드 : Tushar-46835, 당신은 당신의 솔루션에 상세히 설명 할 수
@, 어쩌면 우리의 조각을 보여 무엇을 그랬니? - 20시 12분
@rtcarlson에서 rtcarlson 10월 2일 '14 : 나는 여러 EJB 스케줄러 인스턴스를 피할 수있는 방법을
@Resource
TimerService timerService;
@Schedule(persistent = false, minute = "/30", hour = "")
public void checkQueueState() {
dt = new DataAccessFactory();
excvo = dt.canExecute();
dt = null;
available = excvo.isExecuteReady();
if (available) {
timerService.createSingleActionTimer(new Date(), new TimerConfig(null, false));
}
}
@Timeout
private void generateReport(Timer timer) {
logger.info("!!--timeout invoked here " + new Date());
}
@ Tushar-46835, 해결책을 설명해 주시겠습니까? 우리가 한 일의 스 니펫을 보여줄 수 있습니까? – rtcarlson
@rtcarlson : 다음은 내 문제를 해결 한 코드입니다. 리소스 TimerService timerService; 일정 (영구 = false, 분 = "*/30", 시간 = "*") \t 공 무효 checkQueueState (\t \t dt = new DataAccessFactory(); \t \t excvo = dt.canExecute(); \t \t dt = null; \t \t 사용 가능 = excvo.isExecuteReady(); \t \t 경우 (가능) { \t \t \t timerService.createSingleActionTimer (새로운 날짜(), 새로운 TimerConfig) ( \t \t \t \t \t 널 (null), 거짓); \t \t} \t} \t 시간 초과 \t 개인 무효 generateReport (타이머 타이머) { \t \t logger.info ("! - 여기 호출 시간 제한"+ 새 Date()); \t} – TusharPanda