Агент горячей замены в Java SE и Java EE
Я обнаружил, что Hotswapagent работает по-разному в приложениях SE и EE. В приложении SE я могу добавить новое свойство к классу (например, приватный Long x;) без проблем, Hotswap может обновить код. Но я не могу сделать это в своем приложении EE в JSF ManagedBean, я получил "Виртуальная машина не поддерживает эту операцию: изменения схемы не реализованы".
Моим EE-приложением является приложение Maven Enterprise (ejb,web,ear) в Netbeans 8.2 с Wildfly 10. Я использую DCEVM (jdk1.8.0_112) и Hotswapagent 1.1.0.
Простые изменения кода (например, тело метода редактирования) работают как в приложениях SE, так и в приложениях EE, но не могут обрабатывать создание новых свойств ни в ejb, ни в веб-проектах. Я хотел бы знать, допустил ли я какую-то ошибку в настройках или это связано с различиями сред SE и EE. Спасибо за любые идеи.
3 ответа
Я ожидаю, что добавление поля будет считаться изменением схемы (в таком случае вы получите исключение как в Java SE, так и в Java EE). Но Java EE специфичен модификацией классов (байт-код) во время выполнения. Я предполагаю, что когда вы вставили поле, это было не только то поле, которое было добавлено, но также были введены некоторые синтетические геттеры и / или сеттеры, что, безусловно, было изменением схемы.
Там нет проблем с этим. Только когда я запускаю приложение в режиме отладки.
HotswapAgent работает на уровне JVM, между Java SE и Java EE не должно быть различий. Скорее всего, ваш сервер Wildfly не использует DCEVM, пожалуйста, проверьте ваши настройки.
Здесь есть все, что вам нужно знать для настройки любого сервера приложений EE Конфигурация Payara + DCEVM