Как выполнить метод удаленно на JAR-файл - PullRequest
2 голосов
/ 23 мая 2011

У меня есть приложение, цель которого - вызывать один и тот же конкретный метод в одном и том же классе во множестве разных jar-файлов, распределенных по файловой системе, и получать обратно результат. Поэтому я могу быть уверен, что определенный класс и метод будут существовать в jar-файле.

Я знаю, где находится каждый файл jar. Мне довольно легко создать экземпляр класса с помощью рефлексии и вызвать метод таким образом.

Моя проблема в том, что у меня много таких jar-файлов. И если я использую описанный выше подход для вызова каждого jar-файла, я обеспокоен тем, что потребление памяти моим приложением резко возрастет, поскольку мне придется загружать весь jar-файл для каждого вызова.

Есть ли какой-нибудь способ, которым я могу назвать эти файлы jars, кроме отражения? Системные вызовы не будут работать, так как мне нужно получить обратно значение.

высоко ценится ...

Ответы [ 2 ]

3 голосов
/ 23 мая 2011

Вы можете столкнуться с проблемами с разрешением, но это может быть увеличено с -XX:MaxPermSize= параметр.

Убедитесь, что вы используете отдельный URLClassLoader для каждого файла JAR и не держитесь за них, чтобы они могли получить GCd. Загрузите файл JAR через новый URLClassLoader, затем используйте Class.forName () для загрузки.

Удачи!

1 голос
/ 23 мая 2011

Я бы сделал что-то вроде этого псевдокода:

foreach jf : myJarFiles
  jcl = new JarClassLoader(jf);
  Class.forName(myClassName);
  m = MyClass.getMethod(...);
  m.invoke(...);
...