Как загрузить модули в Java - PullRequest
2 голосов
/ 17 мая 2010

Я создаю сервер, который загружает модули. Каждый модуль представляет собой файл .jar. Внутри банки есть все классы, которые нужны модулю. Сервер должен прочитать jar, найти основной класс (на нем нет метода main, это просто класс, который заставляет модуль работать, но не как другую программу), построить объект этого класса и сохранить его в векторе модулей для доступа к определенному модулю в зависимости от выполняемой работы.

Как я могу это сделать?

Что касается сервера, то он прослушивает и принимает запрос, но нет модулей для делегирования задания, поскольку мой вектор модулей пуст.

Ответы [ 3 ]

2 голосов
/ 17 мая 2010

Вы должны использовать Java-класс ServiceLoader,

http://java.sun.com/javase/6/docs/api/java/util/ServiceLoader.html

Для этого требуется, чтобы у вашего JAR был файл конфигурации провайдера в каталоге META-INF / services. Это стандартный встроенный способ загрузки модулей в Java. Если вам нужна более надежная загрузка модулей, вы можете взглянуть на OSGi.

2 голосов
/ 17 мая 2010

Вот пример загрузчика сетевого класса пример от Sun. Это должно охватывать все, что вам нужно.

Попробуйте этот синтаксис, как только получите URL с оригинальным URLClassLoader

JAR URL

Синтаксис URL-адреса JAR:

jar:<url>!/{entry}

например:

jar:http://www.foo.com/bar/baz.jar!/COM/foo/Quux.class
jar:file:/export/home/faculty/stansif/public_html/java/applets/image/view.jar!/image.gif

Доступ к ресурсам

final java.net.URL url = X.class.getResource ("/dir/image.png");
final ImageIcon icon = new ImageIcon (url);

Также посмотрите на этот URL http://www.javaworld.com/javaworld/javatips/jw-javatip70.html

1 голос
/ 17 мая 2010

Вы должны взглянуть на существующие фреймворки, включая облегченный контейнер OSGi. Тем не менее, общий подход заключается в создании загрузчика классов для каждого модуля и вызове каждого модуля с использованием Reflection или общего API - Runnable и Callable являются двумя хорошими кандидатами.

...