Исключение MissingMethod в доменном классе - PullRequest
0 голосов
/ 11 ноября 2010

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

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

Manager.groovy: этот класс содержит Java ScheduledThreadPoolExecutor и метод init, который создает Worker и отправляет этих Workers исполнителю.

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

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

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

Есть идеи, как это исправить?

Спасибо

1 Ответ

1 голос
/ 11 ноября 2010

Пусть ваш Worker класс extend Thread (альтернативно, пусть 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, связанные с метапрограммированием во время выполнения, например, связывание мета-классов и вызов виртуальных методов.Ваш ThreadPoolExecutor может использовать другой, свежий загрузчик классов, который не знает о «волшебстве» Groovy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...