人人网框架地址:http://code.google.com/p/paoding-rose/
问题发生:
用Quartz作集群时用JobDataMap传递DAO,提示DAO未序列化,可框架的DAO为接口,在什么时候转为了对象的没看到。。。
以下是传递参数源码:
job = newJob(JobUserMail.class).withIdentity("job_usermail_" + reminders.getId(), "task_usermail").build();
job.getJobDataMap().put("orderIdDAO", orderIdDAO);
addjob(job, trigger);
接受参数源码:
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
JobDataMap data = arg0.getJobDetail().getJobDataMap();
OrderIdDAO orderIdDAO = (OrderIdDAO) data.get("orderIdDAO");
下面会引用这个 orderIdDAO
Reminders R = orderIdDAO.getById(remindersid);
OrderIdDAO源码:
@DAO
public interface OrderIdDAO extends Serializable{
@SQL("INSERT INTO orderid (orderid,orderdate)VALUES(NULL,:orderid.orderdate)")
public Identity create(@SQLParam("orderid") OrderId orderdate);
}
出错内容如下(部份):
org.quartz.JobPersistenceException: Couldn't store job: Unable to
serialize JobDataMap for insertion into database because the value of
property 'smsmobileDAO' is not serializable:
org.springframework.jdbc.core.JdbcTemplate [See nested exception:
java.io.NotSerializableException: Unable to serialize JobDataMap for
insertion into database because the value of property 'smsmobileDAO' is
not serializable: org.springframework.jdbc.core.JdbcTemplate]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeJob(JobStoreSupport.java:1115)
at org.quartz.impl.jdbcjobstore.JobStoreSupport2.executeVoid(JobStoreSupport.java:1062)atorg.quartz.impl.jdbcjobstore.JobStoreSupportVoidTransactionCallback.execute(JobStoreSupport.java:3703)
at org.quartz.impl.jdbcjobstore.JobStoreSupportVoidTransactionCallback.execute(JobStoreSupport.java:3701)atorg.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3787)atorg.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java:93)atorg.quartz.impl.jdbcjobstore.JobStoreSupport.storeJobAndTrigger(JobStoreSupport.java:1058)atorg.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)atorg.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:249)atreyo.sdk.service.CronTriggerService.addjob(CronTriggerService.java:209)atreyo.sdk.service.CronTriggerService.addMobileJob(CronTriggerService.java:184)atreyo.sdk.service.CronTriggerService.init(CronTriggerService.java:68)atreyo.sdk.service.CronTriggerServiceFastClassByCGLIB72d7b83d.invoke(<generated>)atorg.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)atorg.springframework.aop.framework.CglibAopProxyCglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:713)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor1.proceedWithInvocation(TransactionInterceptor.java:98)atorg.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)atorg.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)atorg.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)atorg.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)atorg.springframework.aop.framework.CglibAopProxyDynamicAdvisedInterceptor.intercept(CglibAopProxy.java:646)
at reyo.sdk.service.CronTriggerServiceEnhancerByCGLIB5d1ffd48.init(<generated>)
at reyo.sdk.quartz.InitTaskServlet.init(InitTaskServlet.java:27)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1120)
at org.apache.catalina.startup.HostConfigDeployDirectory.run(HostConfig.java:1678)atjava.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTaskSync.innerRun(FutureTask.java:303)atjava.util.concurrent.FutureTask.run(FutureTask.java:138)atjava.util.concurrent.ThreadPoolExecutorWorker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
2014-04-22此问题完美解决。实现了集群化方案。
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 5. Nginx 负载均衡配置案例(附有详细截图说明++)
· Windows 提权-UAC 绕过