2010-11-11 2 views
0

Каждый раз, когда я перезапускаю приложение, у меня есть MissingMethodException для динамических методов класса домена Grails.Исключение MissingMethod в классе домена

У меня есть 3 класса:

Manager.groovy: Этот класс содержит Java ScheduledThreadPoolExecutor и метод инициализации, который создает рабочий и отправляет эти Пролетарии исполнителя.

Worker.groovy: реализует динамические методы Runnable и call Domain. Пример: MyDomain.get()

Bootstrap.groovy: в методе инициализации я называю manager.init()

Иногда метод динамики рабочего вызова на домен и я получил MissingMethodException.

Любая идея, как исправить это?

Спасибо

ответ

1

Пусть ваш Worker класс extendThread (в качестве альтернативы, пусть new Thread(Runnable) украсить его) и передать Groovy ContextClassLoader к нему:

Worker worker = new Worker() // extends Thread 
worker.setContextClassLoader(
    Thread.currentThread().getContextClassLoader()) 
manager.schedule(worker, ..) 

или

Thread worker = new Thread(new Worker()) 
worker.setContextClassLoader(
    Thread.currentThread().getContextClassLoader()) 
manager.schedule(worker, ..) 

Причина: Классный загрузчик Groovy загрузил специальные классы Groovy, связанные с метапрограммами времени выполнения ng, как ассоциирование мета классов и вызов виртуальных методов. Ваш ThreadPoolExecutor может использовать другой, новый класс-загрузчик, который не знает о «волшебстве» Groovy.

+0

Ответ объясняет все. Благодаря!! – Mike

Смежные вопросы