Siirry pääsisältöön

Hotswap 26.02

Avaa ChatGPT:ssä

Hotswap-työkalu ottaa käännettyjen luokkien muutokset käyttöön käynnissä olevassa sovelluksessa ilman uudelleenkäynnistystä. Sovelluksen tila säilyy päivitysten välillä. Työkalu määritetään webforJ-koontiliitännäisen asetuksissa, ja se liitetään sovellukseen, kun koonti käynnistää sen. Suorituskomento pysyy samana, eikä projektiin tarvitse lisätä riippuvuutta.

Tuettuja työkaluja on kaksi:

  • HotswapAgent on avoimen lähdekoodin työkalu. Koontiliitännäinen lataa agentin ensimmäisellä suorituskerralla ja tallentaa sen välimuistiin.
  • JRebel on kaupallinen tuote. Se vaatii oman asennuksen ja lisenssin.

Määritä täsmälleen yksi työkalu. Jos koonti nimeää molemmat, se epäonnistuu ja ilmoittaa virheessä molempien nimet.

HotswapAgent​

Tyhjä elementti on täydellinen määritys:

pom.xml
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>

Liittämistä voi tarkentaa kahdella asetuksella:

AsetusKuvaus
versionTietty agenttiversio liitännäisen valitseman version sijaan.
pathLevylle tallennettu agentti-JAR, jota käytetään suoraan ilman lataamista. Sopii koneille, joilla ei ole verkkoyhteyttä, tai mukautetulle agenttikoosteelle.
pom.xml
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>

Luokan rakenteen muutokset​

Metodin rungon muokkaukset otetaan käyttöön kaikissa Java-virtuaalikoneissa. Luokan rakenteen muutokset, kuten uuden kentän tai metodin lisääminen, vaativat virtuaalikoneen, joka hyväksyy asetuksen -XX:+AllowEnhancedClassRedefinition. Tällaisen ominaisuuden tarjoaa JetBrains Runtime. Koonti tunnistaa ominaisuuden ja ottaa sen käyttöön. Katso JetBrains Runtimen asennusohjeet kohdasta Edellytykset.

Ilman tätä ominaisuutta metodin rungon muokkaukset otetaan silti käyttöön, mutta luokan rakenteen muutos ei tule voimaan käynnissä olevassa sovelluksessa ennen uudelleenkäynnistystä. Koontiloki tulostaa vaatimuksen nimeävän varoituksen, ja selain näyttää ilmoituksen kerran.

JRebel​

JRebel on kaupallinen tuote, jonka lisensoi sen toimittaja. webforJ ei toimita sitä eikä lataa sitä, eikä se osallistu lisensointiin. Koonti lukee määritetyn polun, tarkistaa, että tiedosto on olemassa, ja liittää sen muuttamattomana.

Osoita määrityksessä JRebel-asennuksesi agenttiin, joka voi olla natiivikirjasto tai JAR-tiedosto:

pom.xml
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>

Polku on pakollinen. Jos koonti valitsee JRebelin ilman polkua, se epäonnistuu ja ilmoittaa virheessä puuttuvan asetuksen.

JRebelin avulla kaikki luokkamuutokset, myös rakenteen muutokset, otetaan käyttöön kaikissa Java-ajoympäristöissä.

Valinta komentoriviltä​

Ominaisuus webforj.hotswap ohittaa koontitiedoston asetuksen yksittäisellä suorituskerralla. Sallitut arvot ovat hotswapAgent, jrebel ja off. Mikä tahansa muu arvo aiheuttaa koonnin epäonnistumisen, ja virheessä luetellaan sallitut arvot. jrebel-arvon valitseminen edellyttää silti agenttipolun määrittämistä asetuksissa.

mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent

Muutoksen käyttöönotto​

Käännä muutos, niin se tulee voimaan käynnissä olevassa sovelluksessa. Tallenna tiedosto IDE:ssä, joka kääntää tallennuksen yhteydessä, tai suorita käännös toisessa pääteikkunassa.

Kun kaikki muuttuneet luokat kuuluvat nykyisen sivun näyttämään sisältöön, kyseinen osa rakennetaan uudelleen paikan päällä ja sovelluksen tila säilyy. Muussa tapauksessa koko sivu ladataan uudelleen: näin käy sovelluksissa, joissa ei ole reititystä, kun luokka ei kuulu näytettyihin reitteihin tai kun uudelleenrakennusta ei voida tehdä. Yksi käännetty muutos tuottaa selaimessa yhden päivityksen.

Latauksen nopeuttaminen IntelliJ IDEA:ssa​

IntelliJ IDEA kääntää tallennuksen yhteydessä vain, kun automaattiset koonnit ovat käytössä, ja se odottaa ennen jokaista vaihetta. Lyhennä odotusaikoja, jotta muutos tulee nopeammin voimaan käynnissä olevassa sovelluksessa.

Automaattisten koontien käyttöönotto​

Avaa asetukset ja ota käyttöön seuraavat valinnat:

  1. Valitse Build, Execution, Deployment > Compiler ja ota käyttöön Build project automatically.
  1. Valitse Advanced Settings > Compiler ja ota käyttöön Allow auto-make to start even if developed application is currently running.
  1. Valitse Appearance & Behavior > System Settings ja ota Autosave-kohdassa käyttöön Save files if the IDE is idle for. Aseta arvoksi 1 sekunti.

Paina Ctrl+ALt+S tai valitse File > Settings.

Koontiviiveiden lyhentäminen​

Aseta seuraavien rekisteriavainten arvoksi 0:

AvainKuvaus
compiler.automake.trigger.delayTiedostomuutoksen ja koonnin käynnistymisen välinen viive.
compiler.automake.build.while.idle.timeoutJoutoaika ennen koonnin käynnistymistä.
compiler.automake.postpone.when.idle.less.thanJoutoaika, jota lyhyemmän ajan jälkeen IntelliJ IDEA lykkää koontia.
  1. Avaa Find Action painamalla Ctrl+Shift+A.
  2. Kirjoita Registry... ja valitse se.

Voit myös avata Search Everywhere -haun painamalla Shift kahdesti, siirtyä Actions-välilehdelle ja kirjoittaa Registry.

Kirjoita Registry-valintaikkunassa avaimen nimi suodattaaksesi luetteloa ja aseta sen arvoksi 0.

varoitus

Rekisterimerkinnät ovat IntelliJ IDEA:n edistyneitä, ei-tuettuja asetuksia. Voit palauttaa ne valitsemalla Registry-valintaikkunassa Restore Defaults.

Jatka oppimista