Posts

Showing posts with the label tomcat

Ehcache: deploy multiple versions of a Grails app (fix javax.management.InstanceAlreadyExistsException)

When a Grails application makes use of the Ehcache cache plugin in its default configuration it can be impossibile to perform deploys of multiple versions of the app, even though the container might support it. The same plugin (in its default configuration) also breaks deploying multiple different Grails apps on the same container. The problem is in the way the plugin generates the name for the cache (which will then be used to register the cache jmx bean): the name is by default set grails-cache-ehcache . When another second application or another application version is deployed registration will fail because the name already exists. The exception message is the following (indented for clarity): org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ehCacheManagementService': Invocation of init method failed; nested exception is net.sf.ehcache.CacheException: javax.management.InstanceAlreadyExistsException: net.sf.ehcache:type=CacheM...

HOWTO: Parallel deployment on tomcat 7

News broke out recently that Tomcat 7 supports parallel deployment . This feature allows one to deploy a newer version of a web application while maintaining the current one online. The net effect is that new users will be connected to the newest version while already connected users will not be kicked out. Neat uh? One could even have more than two versions online at any time (if that was necessary). The details of how this works are explained in the Context Container documentation . Only it doesn't really tell you how to use it, it tells you how they implemented instead. So what do you have to do to take advantage of this great feature? First of all upgrade to Tomcat 7 (which btw requires Java 6), but you knew that already, didn't you? Then simply adopt the following naming strategy when deploying apps: name your war file mygreatapp## version .war (note the ## used to mark the beginnning of the version substring) where version can actually be anything (it is ma...