2010-10-15 22 views
0

je le scénario suivant pour un de mes clients:serveur hébergé, le changement IP et JNLP

Il a un serveur hébergé (1) (c.-à-http://customer.net) qui redirige essentiellement à une adresse dans ce format: http:/// app (serveur 2)

L'adresse IP change fréquemment (ils me l'ont dit même toutes les deux semaines). Il y a une application dans le serveur 2 avec un lien jnlp qui est évidemment configuré pour télécharger à partir du serveur 2 IP. Lorsque l'adresse IP du serveur 2 change, le jnlp sera brisé.

Pour moi, l'option évidente est d'obtenir une adresse IP dédiée avec le fournisseur, mais je voulais savoir s'il y avait d'autres options.

Merci d'avance!

Répondre

1

J'ai été capable de le comprendre. Fondamentalement, j'ai une servlet à partir de laquelle le lien jnlp est déclenché. Je rassemble l'URL correcte de la demande et met à jour le fichier jnlp avant le téléchargement. J'ai aussi ajouté quelques fichiers temporaires pour éviter de faire cela tout le temps, seulement quand l'URL change.

Voici le code correspondant:

 File jnlp = null; 
     File backup = null; 
     String protocol = "http://"; 
     String url = request.getRequestURL().toString(); 
     url = url.substring(url.indexOf(protocol) + protocol.length(), url.indexOf("/xinco/menu.jsp")); 
     File last = new File(getServletContext().getRealPath("/client/" + url + ".xinco")); 
     if (!last.exists()) { 
      File dir = new File(getServletContext().getRealPath("/client/")); 
      String[] list = dir.list(new ExtensionFilter(".xinco")); 

      if (list.length != 0) { 
       for (int i = 0; i < list.length; i++) { 
        new File(dir.getAbsolutePath(), list[i]).delete(); 
       } 
      } 
      try { 
       jnlp = new File(getServletContext().getRealPath("/client/XincoExplorer.jnlp")); 
       backup = new File(getServletContext().getRealPath("/client/XincoExplorer.jnlp.bak")); 
       backup.createNewFile(); 
       if (jnlp.exists()) { 
        FileChannel source = null; 
        FileChannel destination = null; 
        try { 
         source = new FileInputStream(jnlp).getChannel(); 
         destination = new FileOutputStream(backup).getChannel(); 
         destination.transferFrom(source, 0, source.size()); 
        } finally { 
         if (source != null) { 
          source.close(); 
         } 
         if (destination != null) { 
          destination.close(); 
         } 
        } 
        try { 
         StringBuilder contents = new StringBuilder(); 
         //use buffering, reading one line at a time 
         //FileReader always assumes default encoding is OK! 
         BufferedReader input = new BufferedReader(new FileReader(jnlp)); 
         try { 
          String line = null; //not declared within while loop 
         /* 
          * readLine is a bit quirky : 
          * it returns the content of a line MINUS the newline. 
          * it returns null only for the END of the stream. 
          * it returns an empty String if two newlines appear in a row. 
          */ 
          while ((line = input.readLine()) != null) { 
           if (line.contains("codebase") && !line.startsWith("<!")) { 
            String start = line.substring(0, 
              line.indexOf(protocol) + protocol.length()); 
            String end = null; 
            end = line.substring(line.indexOf("/xinco")); 
            line = start + url + end; 
           } 
           contents.append(line); 
           contents.append(System.getProperty("line.separator")); 
          } 
          //use buffering to update jnlp 
          Writer output = new BufferedWriter(new FileWriter(jnlp)); 
          try { 
           //FileWriter always assumes default encoding is OK! 
           output.write(contents.toString()); 
          } finally { 
           output.close(); 
          } 
         } finally { 
          input.close(); 
          backup.delete(); 
          last.createNewFile(); 
         } 
        } catch (IOException ex) { 
         try { 
          source = new FileInputStream(backup).getChannel(); 
          destination = new FileOutputStream(jnlp).getChannel(); 
          destination.transferFrom(source, 0, source.size()); 
          backup.delete(); 
         } finally { 
          if (source != null) { 
           source.close(); 
          } 
          if (destination != null) { 
           destination.close(); 
          } 
         } 
        } 
       } else { 
        throw new XincoException("Missing XincoExplorer.jnlp!"); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }