Ищу базовый пример использования Apache Felix для динамической загрузки файла Jar и создания экземпляра класса во время выполнения в Java

Я попытался реализовать свой собственный загрузчик классов на основе некоторых примеров. Однако я думаю, что он работает не так, как ожидалось (, не может перезагрузить файл Jar и т. д. Я вижу несколько ссылок на рекомендацию использовать OSGI или Apache Felix для обработки загрузки файла Jar. Есть ли примеры загрузки Jar, создания экземпляра класса из Jar?

Более подробная информация о том, что я пытаюсь выполнить. У меня есть приложение командной строки Java, которое по существу работает непрерывно. Я хочу, чтобы он мог динамически ссылаться на файлы JAR во время выполнения и во время выполнения -экземпляра класса в этих банках. Эти банки могут содержать 1 или более поддерживающих классов. Эти JAR-файлы, по сути, представляют собой настраиваемые рабочие единицы, которые выполняются при определенных условиях события из основного приложения, которое постоянно работает... Так как это мульти -клиент, я хотел, чтобы банки были подключаемыми рабочими единицами типа.

Мое текущее направление заключалось в том, чтобы предоставить «клиенту» интерфейс для кода, а затем заставить их упаковать свои классы в файл jar. Затем приложение выполнит настроенный (путь базы данных )jar и запустит класс из файла Jar. Это работает с загрузкой jar и класса, однако я хочу иметь возможность развертывать эти jar-файлы в горячем режиме.

Таким образом, я хотел бы иметь файл JAR, содержащий классы для поддержки функции. Определенный класс, на который будут ссылаться во время выполнения -из Jar (из основного приложения ). Возможность изменять файлы JAR во время работы основного приложения.

Если я буду использовать стороннюю библиотеку, предпочтительно, чтобы я использовал Apache Felix.

спасибо

Я думаю, что понял это, используя Apache Felix 4. Это лучший способ загрузить банки/классы? Или есть более эффективный способ. Мои исследования до сих пор не указывали на одно решение. Благодарю.

    FrameworkFactory ff = new FrameworkFactory ();
     Map<String,Object> config = new HashMap<String,Object>();
      config.put("org.osgi.framework.storage", "c:\\temp\\myclientBundles");
       config.put(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA,
   "packages needed,more packages needed");
  config.put(Constants.FRAMEWORK_STORAGE_CLEAN, "true");

  Framework fwk = ff.newFramework(config);
  fwk.start();


  BundleContext bc = fwk.getBundleContext();

  Bundle bundle =   bc.installBundle("file:C:\\my_client.jar");


      bundle.start();
      bundle.update();
      Class clazz = bundle.loadClass("client.work.process");
      Job pc = (Job) clazz.newInstance();
      pc.startWork(someConfigObject);
      bundle.stop();
      fwk.stop();
5
задан user1533269 24 July 2012 в 18:17
поделиться