Горячая замена и альтернативы?

15

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

Однако ни Sun, ни Oracle не приложили достаточных усилий для решения этой проблемы. Одной из проблем, конечно же, является перезагрузка классов.

Последние попытки сообщества решить эту проблему - это проект DaVinci Hotswap , JRebel , PlayFramework . Однако на момент написания этой статьи они все еще не были зрелыми (имо) и родными. Некоторые из них не готовы для предприятий, некоторые не совместимы со всеми IDE, некоторые из них являются незрелыми универсальными проектами. Дорожная карта и даже Java для разработчиков готовы, но сообщество Java до сих пор не имеет решения для перезагрузки классов на лету.

Так ли сложно Oracle приложить усилия для решения этой проблемы? Почему перезагрузка классов еще не была реализована изначально?

Ozgur
источник
2
На самом деле JRebel полностью готов к работе и имеет довольно хорошую поддержку IDE, хотя и не бесплатную.
CarlosZ
@CarlosZ Действительно? Я использовал IntelliJ IDEA с JRebel от первой серии бета до 3.x. Вместо «это», вы должны использовать «это». На форуме для каждого релиза вы увидите много вопросов, касающихся плагина intelliJ. Но худшим опытом были проблемы с отладкой. Отладчик мог подключиться очень поздно. И у нас были огромные проблемы. Как пользователь intellJ, у меня есть конкретный опыт относительно JRebel в IDEA. И, конечно же, платить деньги - это еще одна проблема.
@CarlosZ Это действительно вопрос, мне любопытно узнать, почему сложно реализовать перезагрузку классов в Java.

Ответы:

4

Что насчет JEE / J2EE? Впервые это было выпущено 12 лет назад. Это поддерживается непосредственно Sun / Oracle и многими другими поставщиками.

А как насчет OSGi? Его первый релиз был почти 11 лет назад. Eclipse (IDE) построен на нем, Glassfish из Sun / Oracle и Apache Felix широко его используют. Вы можете использовать его с Spring-OSGi.

Он не был изначально поддержан в Java SE, потому что корпоративные приложения специально поддерживались серверами приложений как отдельные продукты.

Питер Лори
источник
@ Питер Лоури 1) Лоури Что касается J2EE, есть ли конкретное решение? Я не мог понять вашу точку зрения? 2) Как вы думаете, для того, чтобы перезагрузить класс, следует использовать OSGI? А как насчет головоломки? Даже на уровне JCR все еще нет консенсуса :). OSGI обращается к совершенно другой области, чем перезагрузка классов. 3) Я не мог понять часть JavaSE, не могли бы вы объяснить немного больше? И, пожалуйста, обратите внимание, что проект DaVinci HotSwap спонсируется Oracle. Это значит, по крайней мере, для меня, они тоже хотят такого решения.
Это зависит от того, что вы ожидаете от горячей замены. Если вы хотите горячую замену для отладки, вы можете сделать это в течение некоторого времени. Однако для надежных корпоративных решений горячая замена такого рода не подходит, и только контролируемые выпуски. В этом случае JEE и OSGi позволяют обновлять запущенные приложения, что дает те же преимущества, но с контролем, который можно ожидать от производственной среды. Например, в моем контейнере OSGi я могу удалить классы и заменить их более новыми версиями, не останавливая приложение. Что вам нужно, какой OSGi не делает?
Питер Лори
1) Ссылочная реализация JEE / J2EE может быть местом для начала, но есть много более популярных и простых в использовании JEE. Я хочу сказать, что вы можете заменить код в работающей системе. Что еще вам нужно в производственной / контролируемой среде.
Питер Лори
1
2) Перезарядка классов - единственное, для чего я использую OSGi. Что вы видите в качестве основного использования для OSGi?
Питер Лори
3) Весь смысл JEE в том, что это пространство для поддержки корпоративных приложений. JSE - это базовая платформа, которую можно использовать для JEE или других приложений.
Питер Лори
2

Попробуйте это: http://www.zeroturnaround.com/blog/reloading_java_classes_401_hotswap_jrebel/

Есть несколько сложных вопросов. Я на самом деле не знаю каких-либо решений (для Java или нет), которые вносят структурные изменения в объекты с состоянием. Динамические языки, такие как Ruby или PHP, на самом деле этого не делают, я не уверен насчет Эрланга, но я думаю, что он также потеряет состояние.

Евгений Кабанов
источник