[Java] Dynamic Loading

Программа очень часто считают необходимым включить дополнительные фрагменты кода в систему во время ее использования (в качестве примера возможности включения плагина в одном приложении, они должны быть использованы сразу же после их "установки"), мы видим каким образом и в каких пределах, это достижимо с языком ВС
Компиляция время выполнения программы:
Во-первых, это полезно знать, что из любого приложения Java может вызвать компилятор (Javac) с обычными параметрами (классы и все остальное) с помощью простой
new String [ ] { Главная. Компиляции (новая строка [] ( , "-D", "Бин /", filename + ".java" } ) ; "SRC / generatedCode /" + имя файла +. "Java")); |
NB: по различным параметрам (я ушел из многих, в том числе варианты компиляции) я оставляю документацию по API.
Загрузка:
Потому что у вас есть файл. Из класса в нашем приложении нагрузки у нас есть 2 дороги, исходя из того, что мы знаем имя этого класса:
- Если у нас нет конкретной информации о классе вывести через механизмы анализа и инстанцирования методы;
- Если у нас есть структурированное "плагина" осуществить известный интерфейс для создания экземпляра объекта (как мы увидим в ближайшее время) и вызывать методы интерфейса.
2 я буду рассматривать это дело, поскольку в противном случае слишком много отвлекаться от предмета, который является довольно сложным и интересным отражением.
Рассмотрим следующий случай:
Класс A (тот, который мы хотим загрузить) B реализует интерфейс.
new ClassLoader ( ) ; ClassLoader Loader = новый ClassLoader (); gt ; cls = loader. loadClass ( "A" ) ; Класс & LT;? & GT; Cls = погрузчика. LoadClass ( "A"); B ) cls. newInstance ( ) ; Istanza_di_A = B (B) CLS. NewInstance (); ... ) ; istanza_di_A. metodoDiA (...); |
Как Вы можете видеть процесс очень проста в реализации, давайте посмотрим, что теперь является основным ограничением.
UnloadingReloading:
К сожалению, JVM не позволяет выгрузку классы загружаются на байт.
Рассмотреть предложение о внесении поправок в Кодекс классе сразу после создания экземпляра объекта такого типа в нашей программе. Мы хотели бы, как это кажется вполне естественным, что после загруженного байт-класса изменили и перекомпилировали, новые объекты типа "А", созданной в соответствии с последней доступной версии.
К сожалению, этого не происходит, мы видим, почему.
Загрузчиком классов, которые ранее мы использовали "обвинение" в память о нашем классе байт-кода во время выполнения, как мы уже говорили, не может быть (вручную или автоматически) для обработки разгрузки классы экземпляра приложения. На момент создания объекта просто следуйте следующим алгоритмом (что сопряжено с весьма упрощенное письмо):
- Проверка структуры данных (хэш-таблицу), если есть запись в классе, что ему было предложено груза происходит с именем класса ( "class_name" -> "байт");
- Если вы не можете найти соответствующие записи в названии создает один, и после чтения файла. Классе, кроме байт-кода в такой структуре затем возвращает экземпляр программы.
- Или, если вы найдете запись для имени класса, это не касается никоим образом оценить, является ли байт обновляется или нет; экземпляр объекта из байт-код сохраняется и вернулся в программу.
Как вы можете себе представить то изменения вступят в силу только после перезагрузки программы.
Только существующие решения для реализации пользовательских ClassLoader этом случае мы имеем дело с caricareistanziare классы, которые мы хотим использовать как плагин, и что, если какой-либо происходят изменения, мы можем "вышвырнуть" (поставив все свои ссылки на NULL) reinstanziarene для нового приложения, которое заботится об управлении нового кода в своей частной структуры данных.
Громоздкие реальные решения? Ну, если он делает хорошо, чтобы обновить ОПРАВКИ Tomcat JSP, сказали бы уместным, чтобы настроить ![]()
Популярность: 19% [?]
Ключевые слова: байт-код, ClassLoader, обобщение, динамический Погрузка, HotSwap, Java, JSP, JVM, Погрузка, перегрузка, Runtime, Tomcat, Разгрузка
leave a response , or trackback from your own site. Вы можете последовать за всеми реакциями к этому входу через RSS 2.0 питание. Вы можете оставить ответ, или Архив с вашего собственного сайта.



![Добавить '[Java] Dynamic Loading' на Del.icio.us Aggiungi '[Java] Dynamic Loading' a Del.icio.us](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delicious.png)
![Добавить '[Java] Dynamic Loading' на Digg Aggiungi '[Java] Dynamic Loading' a digg](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/digg.png)
![Добавить '[Java] Dynamic Loading' на FURL Aggiungi '[Java] Dynamic Loading' a FURL](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/furl.png)
![Добавить '[Java] Dynamic Loading к Blinklist Aggiungi '[Java] Dynamic Loading' a blinklist](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/blinklist.png)
![Добавить '[Java] Dynamic Loading к Reddit Aggiungi '[Java] Dynamic Loading' a reddit](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/reddit.png)
![Добавить '[Java] Dynamic Loading к Feed Me Links Aggiungi '[Java] Dynamic Loading' a Feed Me Links](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/feedmelinks.png)
![Добавить '[Java] Dynamic Loading' на Technorati Aggiungi '[Java] Dynamic Loading' a Technorati](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technorati.png)
![Добавить '[Java] Веб-Dynamic Loading' на Yahoo My Aggiungi '[Java] Dynamic Loading' a Yahoo My Web](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/yahoo_myweb.png)
![Добавить '[Java] Dynamic Loading к Socializer Aggiungi '[Java] Dynamic Loading' a Socializer](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/socializer.png)
![Добавить '[Java] Dynamic Loading' в Ma.gnolia Aggiungi '[Java] Dynamic Loading' a Ma.gnolia](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/magnolia.png)
![Добавить '[Java] Dynamic Loading' на Google Bookmarks Aggiungi '[Java] Dynamic Loading' a Google Bookmarks](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/google.png)
![Добавить '[Java] Dynamic Loading' на Bloglines Aggiungi '[Java] Dynamic Loading' a Bloglines](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bloglines.png)
![Добавить '[Java] Dynamic Loading к Squidoo Aggiungi '[Java] Dynamic Loading' a OKnotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif)
![Добавить '[Java] Dynamic Loading к Bookmark.it Aggiungi '[Java] Dynamic Loading' a Bookmark.it](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bookmark.png)
![Добавить '[Java] Dynamic Loading' просить Aggiungi '[Java] Dynamic Loading' a Ask](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/ask.png)
![Добавить '[Java] Dynamic Loading к бреду Aggiungi '[Java] Dynamic Loading' a Delirious](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delirious.png)
![Добавить '[Java] Dynamic Loading' To Live-MSN Aggiungi '[Java] Dynamic Loading' a Live-MSN](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/live.png)
![Добавить '[Java] Dynamic Loading к SlashDot Aggiungi '[Java] Dynamic Loading' a SlashDot](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/slashdot.png)
![Добавить '[Java] Dynamic Loading к Diggita Aggiungi '[Java] Dynamic Loading' a Diggita](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/diggita.png)
![Добавить '[Java] Dynamic Loading к ЖЖ Aggiungi '[Java] Dynamic Loading' a FaceBook](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/facebook.png)
![Добавить '[Java] Dynamic Loading к Wikio Aggiungi '[Java] Dynamic Loading' a Wikio](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/wikio.png)
![Добавить '[Java] Dynamic Loading' на MySpace Aggiungi '[Java] Dynamic Loading' a MySpace](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/myspace.png)
![Добавить '[Java] Dynamic Loading' на Twitter Aggiungi '[Java] Dynamic Loading' a Twitter](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/twitter.png)
![Добавить '[Java] Dynamic Loading к Tailrank Aggiungi '[Java] Dynamic Loading' a Technotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technotizie.png)
Написать ответ