자바스크립트/Ext JS2011. 5. 2. 17:43
 // setup the state provider, all state information will be saved to a cookie
    Ext.state.Manager.setProvider(Ext.create('Ext.state.CookieProvider'));
// 그리드내에서 사용할 경우 컬럼의 길이 소팅 , 필드 안보이기등 쿠키에 상태가 저장되어 브라우저를 닫고
// 다시 열었을 경우 상태를 유지해준다. 단 상태id stateId:'' 를 세팅해줘야하고 유일해야한다.
// 단 컬럼중 하나를 lock걸수 있는 locked기능을 사용할 경우 상태유지가 안되며 실행도 안된다. 이 경우 사용하려고
// 하면 headerCt를 정의해야한다는 에러가 나오는데 뭔지 모르겠다.
Posted by 베니94
GXT RIA App 만들기2011. 3. 7. 18:14
세션은 얼마나 지속될까?
기본 30분입니다. 웹서버마다 was마다 다른지는 모르겠지만 제가 아는 시간은 30분입니다.
실제 30분인지 테스트를 해볼까요.
아래 메소드를 RiaApp.java에 추가하고 로그인 성공했을 경우 실행되는 Success()메소드를 통해 호출해보도록 하자.

▶ 아래 코드는 60초 마다 서버에 세션이 유효한지 요청을 보내 세션을 확인하는 코드다. 진행 상태바를 통해 매분마다 1%씩 움직이도록 했다. 예상대로 세션이 30분이라면 30%까지 진행되다가 멈추게 될까? 테스트 해보면 100%를 보여주고 종료됩니다.
애기인 즉은 서버와 통신할 경우 세션이 유지되어 계속 access할 경우 무제한으로 사용할 수 있다는 것이다.
 
// RiaApp.java에 추가하세요
	public void roop(){
		String stime = new Date().toString();
		final MessageBox box = MessageBox.progress("세션 시간 측정 중...", "시작시간은 : "+stime,  
		"Initializing...");  
		 final ProgressBar bar = box.getProgressBar();  
		 final Timer t = new Timer() {  
			 float i;  
			 @Override  
			 public void run() {  
				 String stime = new Date().toString();
				 System.out.println("middle time: "+ stime);
//				 continueSession();
				 try{
					 service.getSessionData( new AsyncCallback() {
							@Override
							public void onSuccess(Void result) {
							}
							@Override
							public void onFailure(Throwable caught) {
								String time = new Date().toString();
								MessageBox.alert("로그인", "세션이 종료되었습니다. \n 종료시간:"+ time, btnListener);
								cancel();  
//								box.close();	
							}
						});
				 }catch(Throwable e){
					
				 }
				 bar.updateProgress(i / 100, (int) i + "% Complete");  
				 i += 1;  
				 if (i > 100) {  
					 cancel();  
					 box.close();  
				 }  
			 }
   	  };  
   	  t.scheduleRepeating(60000);  // 60초
	}

// 로그인 성공 후 실행되어야 하므로 기존 onSubmit()메소드를 수정하자.
	public void onSubmit() {
		service.getSessionData( new AsyncCallback() {
			@Override
			public void onFailure(Throwable caught) {
				// 버튼 리스트를 설정
				MessageBox.alert("로그인", "세션이 종료되었습니다. \n 다시 로그인 해주세요", btnListener);
			}
			@Override
			public void onSuccess(Void result) {
				// TODO Auto-generated method stub
				roop(); // 추가
			}
		});
	}

▶ 아래 처럼 진행되다가..100%를 채우고 종료된다...

로그를 보면 세션유지시간은 30분이지만 계속 연장되어진다.
----------------------------------------------
middle time: Thu Mar 10 12:44:17 KST 2011
로그인 아이디는 : benneykwag@gmail.com
세션 생성시간 : Thu Mar 10 11:11:02 KST 2011
설정된 세션유지시간: 30
마지막 AccessTime :Thu Mar 10 12:43:17 KST 2011
----------------------------------------------


▶ 이번에는 세션이 끊기도록 코딩해서 Refresh나 서버와 통신을 하지 않고 얼마나 유지되는지 보자.
위에서 60초로 테스트 했다면 이번에는 35분으로 변경해 보자.

// RiaApp.java
	public void roop(){
...
...
   	  t.scheduleRepeating(60000*35); //35분 
	}

// RiaAppPgmServiceImpl.java
	@Override
	public void getSessionData() throws Throwable {
		HttpSession session = getSession();
		if( null == session.getAttribute("loginid")) // index.html페이지에서 전달해주고 loginChk.jsp에서 생성한 세션정보
			throw new Throwable("세션이 종료되었습니다.");
		else{
			System.out.println("로그인 아이디는 : "+(String)session.getAttribute("loginid"));
			System.out.println("세션 생성시간 : "+ new java.util.Date(session.getCreationTime()) );
			System.out.println("설정된 세션유지시간: "+ session.getMaxInactiveInterval()/60);
			System.out.println("마지막 AccessTime :"+ new java.util.Date(session.getLastAccessedTime()));
			
			
			System.out.println("----------------------------------------------");
		}
	}


이제 실행해보자. 35분 후 세션이 종료되었는지 유지되고 있는지 테스트 해보면 알수 있겠다.
Posted by 베니94
자바스크립트/Ext JS2011. 3. 7. 17:44

Ext JS에 대한 관심을 끊은지 꾀 오래되었습니다. 그런데 지금은 좀 후회가 되네요~

당시 지금의 gxt만큼이나 정렬을 쏟아부었다면 좋았으련만 ~ 개인적으로 요즘 모바일웹어플에 대해 공부 중 인데 그중 제일 괜찮은 놈이 sencha touch인데 이놈을 하려면 extjs를 알아야합니다.

아마존에도 sencha에 대한 책이 없는 관계로 이놈부터 섭렵하면 술술 풀리지 않을까 싶습니다. gxt가 가지고 있는 기본적인 개념들을 알고.. 꺼꾸로일 수도 있겠지만 접근하면 도움이 될듯 싶습니다.

엄청나게 삽질이 줄어들 예정이므로
 extjs 강좌도 올려 볼 생각입니다. 빨리 왔음 좋겠다~ ^^

Posted by 베니94