public String scheduleMapSerializableRunnable(MapSerializableRunnable runnable, Date when) throws ContextException {
long ctime = System.currentTimeMillis();
if (when == null)
when = new Date(ctime);
JobDetails jobDetails = new JobDetails();
jobDetails.getDetailsExt().put("runnable", runnable);
runnable.storeToDetails(jobDetails);
if (__log.isDebugEnabled())
__log.debug("scheduling " + jobDetails + " for " + when);
return schedulePersistedJob(new Job(when.getTime(), true, jobDetails), when, ctime);
}