How to update web application deployed on intranet? There is a Java Spring application that will be deployed on intranet of multiple customers.
In case when there is a major update what should the developer do in order to ensure that all the customers have the latest version of his software?
There is an option that an update module is implemented in the application and it will automatically query the central web repository for updates. This option doesn’t work if there is the server where the application is installed doesn’t have internet connection.
Another possibility that comes to mind is to manually send a .war file to the IT personnel of all the customers for them to install the latest version.
How to deal with updates in this situation?
1
I can think of several options:
a) keep track of which software version each customer is running and when you have a new release, inform the customer of this along with instructions on how to obtain and apply the update. This is a manual process that can be largely automated.
b) if the site has Internet connectivity you can write an in-app module that periodically checks for updates and downloads the update to the server. An authorized person could then be informed via email and manually apply the update out-of-app (e.g. logging in to the server and running a script) or by in-app approval (e.g. the app sets a flag that a privileged script on the app server picks up and applies the update). This is a manual/semi-automatic process that the customer controls.
c) install your update program on the server and have it periodically phone home and check for updates. If an update is found, download it and at the right time, automatically update the server. In the case of a war file, you could run a script from cron that checks, downloads, halts the app server, replaces the war file, and starts the app server again. If the site’s connectivity is poor or the update is big, consider keeping the retrieval and update separate so as to leave enough time for both. This is an automated solution so beware — make sure the customer is okay with it and understands the implications.
d) if no Internet connectivity you really can’t automate much of the discovery and retrieval. You can, however, make it easy for the person responsible to apply the update. For instance, by offering clear instructions on how to get the update onto portable media such as a memory stick, CD-ROM, or whatever. It greatly helps to know their environment so that you can tailor the instructions — it depends on how skilled they are.
If your update is packaged as a complete application war file (as you mentioned) then it’s a pretty simple process as you’re simply updating the entire application, and not individual components. But both can be done, though patching can be more involved. If you have a standardized stack at each customer site then you can write something that’s automated and robust. The devil’s in the details so the more information you can provide on the application stack the better, particularly what operating system and application server you’re running on, and what the connectivity with the world is (Internet and also users clients, e.g. is it easy to get a file onto the server from a client — for instance, if clients have Internet access (e.g. email, web) they could save the update to an SMB share on the app server and a script would pick it up from there).
I hope this gives you some ideas.
what should the developer do in order to ensure that all the customers have the latest version of his software?
Absolutely nothing except for informing the ones responsible for deployment of the application, that there’s a new version.
It’s not the repsonsibility of a developer to deploy applications.
So, inform that IT of said customer and send them the .war file. This way they have the ability to test the application on whatever they want to test it before deploying it. It is often seen as bad form for applications just to update themselves, ignoring IT.