开发者

Hosted server, changing IP and JNLP

I have the following scenario for a customer of mine:

He has a hosted server (1) (i.e. http://customer.net) which basically redirects to an address in this format: http:///app (server 2)

The IP address changes frequentl开发者_如何学JAVAy (they told me even each two weeks). There's an application in server 2 with a jnlp link which obviously is configured to download from server 2 IP. When the IP of server 2 changes the jnlp will be broken.

For me the obvious option is to obtain a dedicated IP address with the provider, but wanted to know if there are any other options.

Thanks in advance!


I was able to figure it out. Basically I have a servlet from which the jnlp link is triggered. I gather the correct URL from the request and update the jnlp file with it before download. Also I added some temp files to avoid doing that all the time, only when the URL changes.

Here's the related code:

        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();
            }
        }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜