JuMiX DirectoryClassLoader bug?
公式のforumがお亡くなりなので、宙にむかって呟いてみる。
JuMiXのQuartzを組み込むサンプルをいじって、SchedulerをStdSchedulerFactoryから作って、jobs.xmlで初期化するようにしたところ、jobs.xmlの読み込みでcom.quartz.xml.CalendarBundleがnot foundというエラーが。当然quartz-1.6.6.jarに含まれていて、そもそもStdSchedulerFactoryは動いているので、見つからないはずがない。というわけで追いかけること3日。
ClassLoaderを独自に作成すると、bootstrapのClassLoaderをてっぺんに、ツリー構造の親子関係が構成される。標準のClassLoaderは、まず親のClassLoaderで探し、なければ子のClassLoaderで探す、という動き。
JuMiXのDirectoryClassLoaderもそのように動くのだけど、こいつの存在意義からして、まず自分のリストから探して、なければ親のリストから、という動きの方が正しいはず。
というわけで、DirectoryClassLoaderにloadClassのoverrideを追加。
@Override public Class<?> loadClass(String name) throws ClassNotFoundException { Class<?> c = findLoadedClass(name); if (c == null) { try { c = findClass(name); } catch (ClassNotFoundException e) { if (getParent() != null) { c = getParent().loadClass(name); } else { throw new ClassNotFoundException(name); } } } return c; }
ひとまずエラーは消えたし、なんとなく動いている感じ。