2013-07-19 3 views
2

사용자가 5 시간 내에 작업을 중단하면 특정 방법을 실행해야합니다.사용자 활동을위한 타이머를 설정하는 방법은 무엇입니까?

사용자가 로그인했지만 5 시간 동안 특정 데이터베이스 테이블에 레코드를 추가하지는 않습니다.

사용자가 지정된 테이블에 레코드를 추가 할 때마다 해당 특정 사용자의 타이머를 재설정해야합니다. 그렇지 않으면 계속 유지됩니다.

5 시간에 도달하면 응용 프로그램에 5 시간 동안 아무 레코드도 추가하지 않았다는 메시지가 표시되어야합니다. 명확히하기 위해

로그인되는 동안 그들이 무슨 상관 없어 I 위 그림과 같이 다음 단계

1- (1:00 PM) user1 is signed in -> timer of user1 is set 
3- (1:00 PM) user2 is signed in -> timer of user2 is set 
5- (1:10 PM) user1 adds something to the tableA 
               -> timer of user1 will be reset 

6- (6:00 PM) user1 adds something to the tableA 
               -> timer of user1 will be reset 

7- (6:00 PM) 5 hours is elapsed for user2 without adding any record to tableA 
               -> show the message to user2 

8- (11:10 PM) 5 hours is elapsed for user1 without adding a record to TableA 
               -> show the message to user1 
    .... 
  • 살펴 보시기 바랍니다. 난 그냥 그 특정 테이블에 레코드를 추가하는 방법에 대한 관심. (TableA) 예를 들어 사용자 2는 활성화되어 있지만 레코드를 tableA에 추가하지 않으므로 타이머가 5 시간에 도달하면 메시지를 수신합니다.

나는 다음을 찾았지만 유용하지 않다고 생각한다. 일단 사용자 클래스에서 실행하면 동일한 클래스로 돌아가서 재설정 할 수 없다.

Timer timer = new Timer(); 
     int startingTime=10000; //millisecond 10 seconds=10000 
     int delayTime=1000; // millisecond 1 second 
    timer.schedule(new TimerTask() 
     { 
     public void run() { 
     System.out.println("Timer repeat statement"); 
     } 
     },startingTime,delayTime); 

답변

2

java-ee와 struts를 사용하기 때문에 나는 웹 응용 프로그램에 대해 이야기하고 있다고 가정합니다.

표준 세션 관리를 사용하십시오. HttpSessionActivationListener를 구현하여 세션 시작시 타이머를 초기화하고 세션 시간을 5 시간으로 설정하십시오. 세션이 만료되면 코드를 실행합니다.

특정 세션에 대한 레코드가 수행 될 때이를 확인하기 위해 세션 범위 bean을 구현하고 서비스 계층에서 호출 된 메소드로 타이머를이 Bean으로 재설정해야합니다.

또한 JSP에서 현재 세션과 관련된 타이머를 확인하여 메시지를 표시해야하는지 확인해야합니다.

예. 당신은 TimerBean을 만들었습니다 - JSP에서 검사 할 세션 관련 타이머가있는 약간의 bean.

1.

public class SessionListener implements HttpSessionListener { 


    @Override 
    public void sessionCreated(HttpSessionEvent arg0) { 
    //init your timer in TimerBean and associate it with created session 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent arg0) { 
    //check your timer value and run you code if it's necessary 
    } 
} 

2.

@Startup //use eager initialization, or call init from login page 
@Singleton // singleton session bean 
public class YourDbTableSessionManager { 

    @Resource 
    private javax.ejb.SessionContext 

    void writeToDb { 
    //reset your timer in TimerBean for SessionContext 
    //perform write 
    } 

} 

3. web.xml의 답변에 대한

<web-app ...> 
    <listener> 
     <listener-class>your.package.SessionListener</listener-class> 
    </listener> 
</web-app> 
+0

감사합니다,하지만 난 타이머를 재설정하거나 메시지를 표시해야 특정 테이블에 레코드를 추가하지 않으면 해당 기간 동안 수행 한 작업에 신경을 쓰지 않습니다. – J888

+0

그런 다음 세션 범위 bean을 구현하여이를 확인하고 특정 테이블에 대한 레코드가 수행 될 때 서비스 계층에서 호출 된 메소드로 타이머를 재설정 할 수 있습니다. – dds

+0

각 사용자가 아닌 컨텍스트에 세션 범위 Bean을 연결하지 않으면 아이디어가 없습니다. 당신이 나에게 모범을 보여 주거나 튜토리얼을 가르쳐 주겠습니까? – J888

관련 문제