users@glassfish.java.net

Re: Upgrading from Sun Java Application Server 8.2 Enterprise

From: <glassfish_at_javadesktop.org>
Date: Thu, 16 Oct 2008 10:25:26 PDT

> Our customer wants us to be able to hot deploy.
> Currently, in order to deploy an application in our
> current config., the users are logged out temporarily
> while the application is being redeployed. This is
> due to the clustered appservers. I've read many
> articles about using load balancing routers with a
> farm of app servers behind it which you can disable
> individually and redeploy and then re enable and move
> on to the next. This does not seem like it would work
> well with glassfish W/HADB as you have to clustered
> appservers. What kind of options do we have here?

What you're talking about here is load balanced, but individual servers, rather than a "cluster" per se. With the GF Cluster, you have a "monolithic" installation that's distributed across several machines. So GF wants to keep everything in sync and treats it as a single instance.

To do what you want would entail running two independent GF servers that just so happen to be running the same software (save at upgrade time).

But the trick there is getting them paired to handle failover, but remain "independent" all the same. I don't know if GF can be cajoled in to doing that.

I'm not familiar enough with clustering, but you might (might) be able to create a two machine cluster of Glassfish, but rather than using the standard deployment mechanisms from the admin server, you might be able to down one server, update that server alone (by merely copying files and editing config file if necessary, rather than "deploying" it per se), then bring it up and hoping that the GF cluster reunites properly, then rinse and repeat.

I don't know how sensitive GF is to potentially having two machines in the same cluster config running different software. I don't know if you could create the cluster, run as normal, then "break" the cluster by removing one machine, physically, from the cluster, upgrading it, then "adding it back in". No idea if that would work either.

Basically, it would not surprise me if through some hackery you can do what you want, but I don't believe GF will do what you want out of the box.

I know there was some discussion about some potentially better deployment options for GFv3, but I don't know how far that went, or if this can potentially be done in GFv3. Moot at this point as GFv3 isn't ready yet anyway.

The fundamental issue with these kinds of upgrades is that while in many ways it's possible to do these things, when dealing with Java, the Servlet API and Sessions, things can get weird when trying to replicate one version of the application to a machine running another version of the application. You can get in to class trouble if the classes have changed and been serialized, etc.
[Message sent by forum member 'whartung' (whartung)]

http://forums.java.net/jive/thread.jspa?messageID=308272