아 무슨 서버도 없어서 이런 링크를 ,,
데모
Posted by 윤재현 :
주기적으로 디비에 어떤 데이터를 쌓거나 시간대별로 특정한 작업을하려면 데몬을 돌려야 하는데
간단하게 사용할수 있는 데몬입니다.

0. 쿼츠 다운로드 : http://www.opensymphony.com/quartz/download.action
다운로드 받고 안에있는 quartz-1.6.5.jar을 라이브러리에 추가
  
1. 서버 구동시 자동으로 쿼츠가 실행되도록 WEB-INF/web.xml 에 추가  (quartz.properties, SchedulerInit.java 경로확인!!)
  1. <!-- Quartz 로딩부분  -->    
  2.     
  3.   <servlet>  
  4.     <display-name>Quartz Initializer Servlet</display-name>  
  5.     <servlet-name>QuartzInitializer</servlet-name>  
  6.     <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>  
  7.     <init-param>  
  8.       <param-name>config-file</param-name>  
  9.       <param-value>com/ineast/scheduler/quartz.properties</param-value>  
  10.     </init-param>  
  11.     <init-param>  
  12.       <param-name>shutdown-on-unload</param-name>  
  13.       <param-value>true</param-value>  
  14.     </init-param>  
  15.     <init-param>  
  16.       <param-name>start-scheduler-on-load</param-name>  
  17.       <param-value>true</param-value>  
  18.     </init-param>  
  19.     <load-on-startup>1</load-on-startup>  
  20.   </servlet>  
  21.     
  22.   <servlet>  
  23.     <display-name>SchedulerInit</display-name>  
  24.     <servlet-name>SchedulerInit</servlet-name>  
  25.     <servlet-class>com.ineast.scheduler.SchedulerInit</servlet-class>  
  26.     <load-on-startup>2</load-on-startup>  
  27.   </servlet>  
  28.   <servlet-mapping>  
  29.     <servlet-name>SchedulerInit</servlet-name>  
  30.     <url-pattern>/SchedulerInit</url-pattern>  
  31.   </servlet-mapping>  
  32.     

2.quartz.properties
 
  1. org.quartz.scheduler.instanceName = SchedulerInit  
  2. org.quartz.scheduler.instanceId = AUTO  
  3. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
  4. org.quartz.threadPool.threadCount = 12  
  5. org.quartz.threadPool.threadPriority = 5  
  6. org.quartz.jobStore.misfireThreshold = 60000  
  7. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  


3. 이니셜라이저 부분 ( SchedulerInit.java )
  1. package com.ineast.scheduler;  
  2.   
  3. import java.text.ParseException;  
  4. import org.quartz.CronTrigger;  
  5. import org.quartz.JobDetail;  
  6. import org.quartz.Scheduler;  
  7. import org.quartz.SchedulerException;  
  8. import org.quartz.SchedulerFactory;  
  9. import org.quartz.impl.StdSchedulerFactory;  
  10.   
  11. public class SchedulerInit {  
  12.   private SchedulerFactory schedFact;  
  13.   private Scheduler sched;  
  14.   
  15.   public SchedulerInit() {  
  16.     try {  
  17.       schedFact = new StdSchedulerFactory();  
  18.       sched = schedFact.getScheduler();  
  19.       sched.start();  
  20.   
  21.        //"job이름, 그룹명, 동작시킬Class"  
  22.       JobDetail job1 = new JobDetail("Job_MyAlarmData1""group1", Job_MyAlarmData.class);   
  23.        // 매분 0초에 동작(30초마다 동작시키려면 job을 하나더 만들고 아래에 0대신 30을 넣으면 ok  
  24.       CronTrigger trigger1 = new CronTrigger("Trigger_MyAlarmData1""group1""0 * * * * ?");   
  25.       sched.scheduleJob(job1, trigger1);  
  26.         
  27.     } catch (SchedulerException e) {  
  28.       e.printStackTrace();  
  29.     } catch (ParseException e) {  
  30.       e.printStackTrace();  
  31.     }  
  32.   }  
  33.   
  34.   public static void main(String[] args) {  
  35.     new SchedulerInit();  
  36.   }  
  37. }  


4. 사용자 로직부분
  1. package com.ineast.scheduler;  
  2.   
  3. import java.util.Hashtable;  
  4. import java.util.Vector;  
  5. import com.ineast.common.DbParent;  
  6. import com.ineast.common.UtilBean;  
  7. import personal.MyAlarmBean;  
  8. import java.util.Date;  
  9.   
  10. import org.quartz.Job;  
  11. import org.quartz.JobExecutionContext;  
  12. import org.quartz.JobExecutionException;  
  13.   
  14. public class Job_MyAlarmData extends DbParent implements Job { //DbParent상속받은 상태  
  15.     
  16.   public void execute(JobExecutionContext context) throws JobExecutionException {  
  17.     getMyAlarmData(); //이부분에 로직을 작성  
  18.   }  
  19.     
  20.   public void getMyAlarmData() {  
  21.      System.out.println("우왕ㅋ굳ㅋ");  
  22.   }  
  23.     
  24. }  


Job이 DB에서 읽어온값을 Bean에있는 Static Hashtable에 주기적으로 업데이트 시킬 필요가 있었는데
Static 객체에 바로 접근이 가능한걸보니 WAS프로세스 안에서 돌아가는 것으로 보인다.


작업주기 설정하는건 아래링크에보시면 있음~
http://blog.naver.com/kjh28480?Redirect=Log&logNo=70048565972
Posted by 알 수 없는 사용자 :
http://www.jankoatwarpspeed.com/examples/reinventing-drop-down/

/* dt 클릭시 하위 국가리스트 show/hide */
$(".dropdown dt a").click(function() {
$(".dropdown dd ul").toggle();
});

/* 이부분은 dropdown dd 의 display를 검사해서 수행하도 될듯한데 여기서는 이벤트발생객체의 parent를 검사함 */
$(document).bind('click', function(e) {
var $clicked = $(e.target);
if (! $clicked.parents().hasClass("dropdown"))
$(".dropdown dd ul").hide(); //펼치기에 방해 안되도록 dropdown 외부를 클릭했으면 hide
});
/* 하위국가리스트 선택시 액션이므로 첫줄만 보면 되겠음 .click, $(".dropdown dd ul").hide() */
$(".dropdown dd ul li a").click(function() {
var text = $(this).html();
$(".dropdown dt a span").html(text);
$(".dropdown dd ul").hide();
$("#result").html("Selected value is: " + getSelectedValue("sample"));
});
요새 트위트로 소스들좀 받고있는데 고작이런거나 쓸정도로 허접한것들만 올라와서 이거라도 올림. 우리 코딩팀에도 요건 좀 전달해야할듯 IE6에서 셀렉트박스가 다른객체위로 떡하니 올라가는 현상때문에..
Posted by 윤재현 :