Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you maintain java webapps in different staging environments?

You might have a set of properties that is used on the developer machine, which varies from developer to developer, another set for a staging environment, and yet another for the production environment.

In a Spring application you may also have beans that you want to load in a local environment but not in a production environment, and vice versa.

How do you handle this? Do you use separate files, ant/maven resource filtering or other approaches?

like image 790
stian Avatar asked Sep 18 '08 16:09

stian


People also ask

What is application staging?

A staging environment (stage) is a nearly exact replica of a production environment for software testing. Staging environments are made to test codes, builds, and updates to ensure quality under a production-like environment before application deployment.


2 Answers

I just put the various properties in JNDI. This way each of the servers can be configured and I can have ONE war file. If the list of properties is large, then I'll host the properties (or XML) files on another server. I'll use JNDI to specify the URL of the file to use.

If you are creating different app files (war/ear) for each environment, then you aren't deploying the same war/ear that you are testing.

In one of my apps, we use several REST services. I just put the root url in JNDI. Then in each environment, the server can be configured to communicate with the proper REST service for that environment.

like image 95
willCode4Beer Avatar answered Nov 15 '22 18:11

willCode4Beer


I just use different Spring XML configuration files for each machine, and make sure that all the bits of configuration data that vary between machines is referenced by beans that load from those Spring configuration files.

For example, I have a webapp that connects to a Java RMI interface of another app. My app gets the address of this other app's RMI interface via a bean that's configured in the Spring XML config file. Both my app and the other app have dev, test, and production instances, so I have three configuration files for my app -- one that corresponds to the configuration appropriate for the production instance, one for the test instance, and one for the dev instance.

Then, the only thing that I need to keep straight is which configuration file gets deployed to which machine. So far, I haven't had any problems with the strategy of creating Ant tasks that handle copying the correct configuration file into place before generating my WAR file; thus, in the above example, I have three Ant tasks, one that generates the production WAR, one that generates the dev WAR, and one that generates the test WAR. All three tasks handle copying the right config file into the right place, and then call the same next step, which is compiling the app and creating the WAR.

Hope this makes some sense...

like image 25
delfuego Avatar answered Nov 15 '22 19:11

delfuego