Avatar billede Slettet bruger
01. november 2003 - 17:39 Der er 16 kommentarer og
2 løsninger

Hot deployment?

Nogle der kan forklare hvad betegnelsen "Hot deployment" dækker over? Giv evt. relevante links.

Har "Hot deployment" og classloaders noget med hinanden at gøre?
Avatar billede bearhugx Nybegynder
01. november 2003 - 17:45 #1
Hot deployment handler om at man kan tilmelde en web/j2ee-appikation til en J2EE container, hvorefter den med det samme vil være aktiveret og virkenede...

Før hen har man været nød til at genstarte j2ee-containeren for at de nye appilkationer/ændringer tager fat... - og for at det ikke skulle påvirke evt. sessions af folk som bruger serveren har denne manuelle deployment tit foregået om natten... Nu kan man gøre det på et vilkårligt tidspunkt for serveren stopper ikke
Avatar billede bearhugx Nybegynder
01. november 2003 - 17:46 #2
Der er også mange j2ee-containere, som tillader at man kan uploade en ny version af en allerede kørende applikation, hvor den nye kode så vil træde i kraft med den næste bruger...
Avatar billede Slettet bruger
01. november 2003 - 17:49 #3
Har du nogle gode links?
Avatar billede bearhugx Nybegynder
01. november 2003 - 17:50 #4
Til hvad hot-deploy handler om ? eller til servere som kan hot-deploy'e ?
Avatar billede Slettet bruger
01. november 2003 - 17:52 #5
Det første.

Fandt selv lige:
"USING CLASS LOADERS FOR HOT DEPLOYMENT"
http://developer.java.sun.com/developer/TechTips/2000/tt1027.html#tip3
Avatar billede bearhugx Nybegynder
01. november 2003 - 17:56 #6
Jeg ved ikke om Tomcat fra Apache kan hverken Hotdeploy'e eller om den også kun håndterer JSP/Servlets - som jo kun er en del af J2EE - men du får lige linket alligevel : http://jakarta.apache.org/tomcat/

JRun : http://www.macromedia.com/software/jrun/
hotDeploy: http://www.macromedia.com/software/jrun/productinfo/features/4/02_developer_productivity/index.html#01


JBoss : http://jboss.org/index.html
Avatar billede Slettet bruger
01. november 2003 - 17:58 #7
Men du beskriver specifikke teknologier og containere og den slags. "Hot deployment" har vel ik som sådan noget med det at gøre?

Det har noget at gøre med at skifte en del af koden ud runtime ikke? Der skal selvfølgelig være mekanismer i sproget, der muligggør dette (bl.a. classloaders).
Avatar billede bearhugx Nybegynder
01. november 2003 - 18:03 #8
Ja, Hot-deployment handler i sin grund-essens om at udskifte kode i et klassehieraki at runtime... Men det bruges bare meget i j2ee-containere -derfor mine henvisninger til j2ee-teknologier .... (selvom det er simpel j2se kode, som muliggør indlæsning af en ny version af en klasse)
Avatar billede Slettet bruger
01. november 2003 - 18:05 #9
Ok. Men jeg er ikke interesseret i at høre mere om J2EE containere :) Tak for eksemplet for anvendelse alligevel.
Avatar billede bearhugx Nybegynder
01. november 2003 - 18:16 #10
God artikel du fandt : "USING CLASS LOADERS FOR HOT DEPLOYMENT"
Avatar billede arne_v Ekspert
01. november 2003 - 18:17 #11
Jeg lavede engang det her lille eksempel på dynamisk load og reload:

import java.io.*;
import java.net.*;

public class DoubleDynmaic {
  private static void dynno(int n) {
      (new File("test")).mkdir();
      try {
        OutputStream os = new FileOutputStream("test/Test.java");
        PrintStream ps = new PrintStream(os);
        ps.println("public class Test {");
        ps.println("  public Test() {");
        ps.println("      System.out.println(" + n + ");");
        ps.println("  }");
        ps.println("}");
        ps.close();
        os.close();
        Runtime.getRuntime().exec("javac -d test test/Test.java").waitFor();
        URL[] url = new URL[1];
        url[0] = new URL("file:test/");
        URLClassLoader cl = new URLClassLoader(url);
        Class.forName("Test", true, cl).newInstance();
      } catch (Exception e) {
        e.printStackTrace();
      }
  }
  public static void main(String[] args) {
      for(int i = 0; i < 10; i++) {
        dynno(i);
      }
  }
}
Avatar billede Slettet bruger
01. november 2003 - 18:39 #12
Ja så tror jeg også selv Mercur8 er ved at være med :)

Et enkelt spørgsmål, hvis man kigger på koden fra:
http://developer.java.sun.com/developer/TechTips/2000/tt1027.html#tip3

loadNewVersionOfServer() metoden: cl = new URLClassLoader(serverURLs);

Hvorfor laver de en helt ny (new) URLClassLoader for hver reload?
Avatar billede Slettet bruger
01. november 2003 - 18:47 #13
Ellers hentes den tidligere loadede version nok bare, jvf. api'en for Classloader.

...
Call findLoadedClass(String) to check if the class has already been loaded.
..
Avatar billede arne_v Ekspert
01. november 2003 - 19:14 #14
Den eneste måde man kan unloade en klasse i Java er ved at garbage collecte
class loaderen.
Avatar billede Slettet bruger
01. november 2003 - 22:57 #15
Vil arne_v dele point med bearhugx?
Avatar billede arne_v Ekspert
01. november 2003 - 23:00 #16
Jo, men er det ikke bearhugx som har svaret mest ?
Avatar billede Slettet bruger
01. november 2003 - 23:05 #17
Så kan det vist ikke gøres mere indviklet :)
Avatar billede bearhugx Nybegynder
01. november 2003 - 23:13 #18
takker selvfølgelig for points...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester