Groovy скрипт бегун архитектуры - PullRequest
1 голос
/ 05 апреля 2011

Исходная информация: У меня отличное приложение (назовем его Runner ), которое способно запускать все, что реализует определенный интерфейс (назовем его Runnable ),И у меня есть пул Runnables (скрипты groovy), которые должны быть видны этому приложению на этапе инициализации и какое приложение будет вызывать (через интерфейс и передавая объект в качестве параметра).

Задача: Мне нужен способ загрузки и вызова всех Runnables из Runner .

Требования: Это сложно, поскольку скрипты могут не соответствовать определенной структуре пакета и могут быть размещены на той же машине, что и Runner , но практически в любом месте.Они также могут называться по-разному (открытое обсуждение для обязательного именования в java: имя класса == имя файла) и их можно пропустить на данный момент (хотя, если будет совет, это круто!).

ПРИМЕЧАНИЯ: Я полагаю, что это возможно благодаря наличию файла конфигурации, в котором настраиваются сценарии (предоставляется абсолютный путь), и загружать их, используя этот материал , и либо приводить Object к Runnable интерфейс и вызвать то, что мне нужно или invokeMethod (...) .Но понятия не имею, можно ли это сделать проще (должен быть способ, потому что это выглядит слишком неуклюже).Я также не могу придумать, как справиться с проблемой именования файлов и несколькими классами в одной проблеме.

PS: Такое длинное описание может вызвать недопонимание, поэтому, пожалуйста, прокомментируйте расплывчатые части.

Ответы [ 2 ]

0 голосов
/ 13 апреля 2011

Возможность иметь файл конфигурации, в котором записаны абсолютные пути скрипта, хороша и доказала свою эффективность. Вам придется иметь дело с загрузкой классов того, что не видно в загрузчике классов приложения. В частности, вам придется иметь дело с проблемами сериализации на основе аннотаций POJO. Синглтон Runnable loader - хорошая практика.

0 голосов
/ 06 апреля 2011

Я думаю, вам нужно знать все классы, реализующие интерфейс. Найдите классы Java, реализующие интерфейс может быть вам интересен.

...