java.lang.InstantiationError: org.quartz.SimpleTrigger

原文: http://blog.csdn.net/huangsu2014/article/details/43409577

在集成spring4.1+shiro1.2.3+quartz2.2.1是出現此錯誤,原因是默認的shiro-quartz1.2.3中的實現是針對quartz1.6版本的實現(詳細源碼請查看QuartzSessionValidationScheduler),在quartz2.2.1中,SimppleTrigger爲接口,所以無法實例化。下面的代碼是針對2.2.1版本的實現:

[java] view plaincopy
  1. import org.apache.shiro.session.mgt.SessionValidationScheduler;  
  2. import org.apache.shiro.session.mgt.ValidatingSessionManager;  
  3. import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationJob;  
  4. import org.quartz.JobBuilder;  
  5. import org.quartz.JobDetail;  
  6. import org.quartz.Scheduler;  
  7. import org.quartz.SchedulerException;  
  8. import org.quartz.SimpleScheduleBuilder;  
  9. import org.quartz.SimpleTrigger;  
  10. import org.quartz.TriggerBuilder;  
  11. import org.quartz.TriggerKey;  
  12. import org.quartz.impl.StdSchedulerFactory;  
  13. import org.slf4j.Logger;  
  14. import org.slf4j.LoggerFactory;  
  15.   
  16. public class Quartz2SessionValidationScheduler implements  
  17.         SessionValidationScheduler {  
  18.     public static final long DEFAULT_SESSION_VALIDATION_INTERVAL = 3600000L;  
  19.     private static final String JOB_NAME = "SessionValidationJob";  
  20.     private static final Logger log = LoggerFactory  
  21.             .getLogger(Quartz2SessionValidationScheduler.class);  
  22.     private Scheduler scheduler;  
  23.     private boolean schedulerImplicitlyCreated = false;  
  24.   
  25.     private boolean enabled = false;  
  26.     private ValidatingSessionManager sessionManager;  
  27.     private long sessionValidationInterval = 3600000L;  
  28.   
  29.     public Quartz2SessionValidationScheduler() {  
  30.     }  
  31.   
  32.     public Quartz2SessionValidationScheduler(  
  33.             ValidatingSessionManager sessionManager) {  
  34.         this.sessionManager = sessionManager;  
  35.     }  
  36.   
  37.     protected Scheduler getScheduler() throws SchedulerException {  
  38.         if (this.scheduler == null) {  
  39.             this.scheduler = StdSchedulerFactory.getDefaultScheduler();  
  40.             this.schedulerImplicitlyCreated = true;  
  41.         }  
  42.         return this.scheduler;  
  43.     }  
  44.   
  45.     public void setScheduler(Scheduler scheduler) {  
  46.         this.scheduler = scheduler;  
  47.     }  
  48.   
  49.     public void setSessionManager(ValidatingSessionManager sessionManager) {  
  50.         this.sessionManager = sessionManager;  
  51.     }  
  52.   
  53.     public boolean isEnabled() {  
  54.         return this.enabled;  
  55.     }  
  56.   
  57.     public void setSessionValidationInterval(long sessionValidationInterval) {  
  58.         this.sessionValidationInterval = sessionValidationInterval;  
  59.     }  
  60.   
  61.     public void enableSessionValidation() {  
  62.         if (log.isDebugEnabled()) {  
  63.             log.debug("Scheduling session validation job using Quartz with session validation interval of ["  
  64.                     + this.sessionValidationInterval + "]ms...");  
  65.         }  
  66.   
  67.         try {  
  68.             SimpleTrigger trigger = TriggerBuilder  
  69.                     .newTrigger()  
  70.                     .startNow()  
  71.                     .withIdentity(JOB_NAME, "DEFAULT")  
  72.                     .withSchedule(  
  73.                             SimpleScheduleBuilder.simpleSchedule()  
  74.                                     .withIntervalInMilliseconds(  
  75.                                             sessionValidationInterval)).build();  
  76.   
  77.             JobDetail detail = JobBuilder  
  78.                     .newJob(QuartzSessionValidationJob.class)  
  79.                     .withIdentity(JOB_NAME, "DEFAULT").build();  
  80.             detail.getJobDataMap().put("sessionManager"this.sessionManager);  
  81.             Scheduler scheduler = getScheduler();  
  82.   
  83.             scheduler.scheduleJob(detail, trigger);  
  84.             if (this.schedulerImplicitlyCreated) {  
  85.                 scheduler.start();  
  86.                 if (log.isDebugEnabled()) {  
  87.                     log.debug("Successfully started implicitly created Quartz Scheduler instance.");  
  88.                 }  
  89.             }  
  90.             this.enabled = true;  
  91.   
  92.             if (log.isDebugEnabled())  
  93.                 log.debug("Session validation job successfully scheduled with Quartz.");  
  94.         } catch (SchedulerException e) {  
  95.             if (log.isErrorEnabled())  
  96.                 log.error(  
  97.                         "Error starting the Quartz session validation job.  Session validation may not occur.",  
  98.                         e);  
  99.         }  
  100.     }  
  101.   
  102.     public void disableSessionValidation() {  
  103.         if (log.isDebugEnabled()) {  
  104.             log.debug("Stopping Quartz session validation job...");  
  105.         }  
  106.         Scheduler scheduler;  
  107.         try {  
  108.             scheduler = getScheduler();  
  109.             if (scheduler == null) {  
  110.                 if (log.isWarnEnabled()) {  
  111.                     log.warn("getScheduler() method returned a null Quartz scheduler, which is unexpected.  Please check your configuration and/or implementation.  Returning quietly since there is no validation job to remove (scheduler does not exist).");  
  112.                 }  
  113.   
  114.                 return;  
  115.             }  
  116.         } catch (SchedulerException e) {  
  117.             if (log.isWarnEnabled()) {  
  118.                 log.warn(  
  119.                         "Unable to acquire Quartz Scheduler.  Ignoring and returning (already stopped?)",  
  120.                         e);  
  121.             }  
  122.             return;  
  123.         }  
  124.         try {  
  125.             scheduler.unscheduleJob(new TriggerKey("SessionValidationJob",  
  126.                     "DEFAULT"));  
  127.             if (log.isDebugEnabled())  
  128.                 log.debug("Quartz session validation job stopped successfully.");  
  129.         } catch (SchedulerException e) {  
  130.             if (log.isDebugEnabled()) {  
  131.                 log.debug(  
  132.                         "Could not cleanly remove SessionValidationJob from Quartz scheduler.  Ignoring and stopping.",  
  133.                         e);  
  134.             }  
  135.   
  136.         }  
  137.   
  138.         this.enabled = false;  
  139.   
  140.         if (this.schedulerImplicitlyCreated)  
  141.             try {  
  142.                 scheduler.shutdown();  
  143.             } catch (SchedulerException e) {  
  144.                 if (log.isWarnEnabled())  
  145.                     log.warn(  
  146.                             "Unable to cleanly shutdown implicitly created Quartz Scheduler instance.",  
  147.                             e);  
  148.             } finally {  
  149.                 setScheduler(null);  
  150.                 this.schedulerImplicitlyCreated = false;  
  151.             }  
  152.     }  
  153. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章