Last updated by 3 years ago

Page: Deployment, Version:27


Grails should never be deployed using the {{grails run-app}} command as this sets Grails up in "development" mode which has additional overheads. To deploy a Grails application type:

grails war
This will create a Web Application Archive (WAR) file from the app name and version found in the file. For example myapp-0.1.war

Now take this WAR file and install it into your container of choice. See below for container specific installation.

If memory is not a problem on your server then allocate a large amount of memory, such as 512M or more. Also use the server VM option. EG: (-server -Xms512M -Xmx512M). Usually it is better to set both min and max heap size to the same in server applications.

However, if you running on a virtual host with limited memory, Grails 1.0 RC1 has been tested on tomcat 6 with both -Xmx96M and -Xmx128M, it performed well with both settings. I've heard reports of it running on lesser configurations. See: Grails Test On Virtual Server for more information.

Container Support Matrix

ContainerGrails 1.0
#Tomcat 5.5Y
#Tomcat 6.0Y
#JOnAS 5.1Y
#JOnAS 5.2Y
Geronimo 2.0.2Unknown, but see WAS CE below
#Geronimo 2.1.1Y
#GlassFish v1 (Sun AS 9.0) and v2 (Sun AS 9.1)Y
#GlassFish v3 Prelude v3 "Prelude"Y
#IBM Integrated Web Application Server for i 7.1Y
#Sun App Server 8.2Y
Websphere 6.1Y
#Websphere Application Server Community Edition 2.0 (WAS CE)Y
Resin 3.2Y
Oracle ASY
#JBoss 4.2Y
#JBoss 5Y
Jetty 6.1Y
SpringSource Application Platform 1.0 betaY
Weblogic 8.1.2N
Weblogic 9.2Y
Weblogic 10Y
#Weblogic 11gY

Deployment Notes


Tomcat deployment is trivial and requires copying the WAR file into the TOMCAT_HOME/webapps folder and restarting the container.


Deploying Grails applications on OW2 JOnAS has been tested on versions 5.1.x and 5.2.x (OSGi).

  • Generate a WAR file for your application using the standard Grails scripts
  • In the generated WAR, add in the WEB-INF/jonas-web.xml with the following (which specifies an inverse class loader strategy):
<?xml version="1.0" encoding="UTF-8"?>
<jonas-web-app xmlns=""

<!-- Load Java classes from JARs in the webapp's WEB-INF/lib first --> <java2-delegation-model>false</java2-delegation-model>


  • NOTE: That file can also be used to specify the context root of your Grails application
  • Finally, simply copy the modified WAR file into your JONAS/BASE/deploy directory

Geronimo 2.1.1

To deploy a Grails application into Geronimo 2.1.1 (which is bundled with either Tomcat or Jetty) you will have to make a Geronimo plan (${PROJECT_HOME}/web-app/WEB-INF/geronimo-web.xml) which specifies an inverse class loader strategy:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=""
    <!-- For Grails to work properly we use the "parent-last" strategy : -->

This is adequate for deploying to a Jetty based Geronimo application server. However, for deploying to a Tomcat based Geronimo application server, you must also delete jta.jar from the WAR file generated by Grails. That's it - you can now drop the WAR into ${GERONIMO_HOME}/deploy

Note: a great article on IBM developerWorks covers the topic of deploying Grails application on Geronimo.


To deploy a Grails application into GlassFish v1 ( Sun Java System Application Server 9.0), Glassfish v2 ( Sun Java System Application Server 9.1 Update 1 and 2 ) and GlassFish v3
  • Take the WAR file and drop it in the autodeploy directory of the domain onto which you wish to deploy. For example $GLASSFISH_HOME/domains/domain1/autodeploy
  • Invoke asadmin command as: asadmin deploy myapp-0.1.war

Access your application at http://localhost:8080/myapp-0.1

To undeploy invoke : asadmin undeploy myapp-0.1

GlassFish v3 Prelude

With GlassFish v3 Prelude, the user can:

  • get the Grails distribution right from the Update Center (command-line, update tool, or web admin)
  • use GlassFish Embedded when running % grails run-app
  • use the % grails war --nojars command to create lightweight archives without the Grails jars (since they are already installed in GlassFish)
Check out this 5-minute video to see this all in action.

For the latest on Groovy/Grails support in GlassFish, visit Groovy and Grails in GlassFish Wiki .

IBM Integrated Web Application Server for i 7.1

You can deploy a grails app out of the box.

To increase maximum memory size, edit the /www/appserver/lwi/conf/overrides/i5javaopts.javaopt file and add a -Xmx1024m (or more) line.

The jndi DataSource name is jdbc/ProxyDS. GORM can probably only access the *DEFAULT connection ID.

Sun App Server 8.2

Follow the same instructions as deployment onto GlassFish above. However, Sun App Server 8.2 has a bug relating to <welcome-file-list> definitions. Essentially it routes all requests for static resources like images to the GSP servlet so a URL like:


Goes to:


There seem to be known problems with this version of Sun App Server and a welcome file list definition.

If you do

grails install-templates
And them remove the <welcome-file-list> definition from the src/templates/war/web.xml file

And then WAR it up and deploy Grails works fine (except for index.gsp)

You could get around the lack of an index.gsp you can replace it with a JSP or HTML redirect to a controller

Websphere 6.1

  • Access the WebSphere integrated console typically at a location like: http://localhost:9060/ibm/console
  • Select Applications/Install New Application
  • Browse for the WAR file and then enter a context path that matches the name of the WAR. For example if you have a myapp-0.1.war then enter /myapp-0.1 as the context path
  • Keep clicking "Next" and then click "Finish" to complete
  • Go back to Applications/Enterprise Applications select the checkbox next to the app you just installed and click the "Start" button
  • You should now be able to access the application via the port you installed WebSphere's HTTP listener on. For example: http://localhost:9080/myapp-0.1/

The <g:render> tag causes a java.lang.StackOverflowError when deploying a Grails app version 1.1.1 or later on WebSphere 6.1.

Grails app version 1.1 works fine on WAS 6.1 but something happened with Grails 1.1.1 and beyond that breaks the render tag.

I get a org.apache.commons.logging.LogConfigurationException what happened?

When trying to load a WAR file on WAS 6 and selecting "Parent last" as the classloader option, some users report the following error:

Caused by: org.apache.commons.logging.LogConfigurationException: The chosen 
LogFactory implementation does not extend LogFactory. 
Please check your configuration...
The following steps are reported to work in solving this problem:
  1. Delete commons-logging-1.1.jar from the lib directory
  2. Add commons-logging-adapters-1.1.jar to the lib directory
  3. After adding the application, modify the classloader to "Parent last."
For more information, IBM offers a 20-page PDF document on how to get commons-logging to work with WebSphere. (See also GRAILS-515.)

I get an error like 'java.lang.NoSuchMethodError: method setNamespace(Ljava/lang/String;)V not found' what do I do?

WebSphere ships with an old version of ant.jar in $WASHOME/lib You will see errors like 'java.lang.NoSuchMethodError: method setNamespace(Ljava/lang/String;)V not found'. Workaround: replace the ant.jar with a more recent version of ant (e.g. from GRAILS_HOME/lib).

I'm getting a 500 error code when I try to access my application

  1. Check that you have patched WebSphere with the latest fixpack ( or later)
  2. Set the the property '' to 'true' (Servers -> Application Servers -> <server> -> Web Container Settings -> Web Container -> Custom Properties)
  3. Restart WAS, the 500 should only happen now on the first page, if you append index.gsp to the URL it should work
  4. Create a file index.html under the webapp directory with the following content :
    <meta HTTP-EQUIV="REFRESH" content="0; url=index.gsp">
  1. Install the templates with the command :
grails install-templates
  1. Modify the <welcome-file-list> section of the file src/templates/war/web.xml with :
  1. Repackage and redeploy your application

AS/400, i5/OS, IBM i Websphere

By default, on OS/400, Websphere application server uses the classic JVM. Since version 1.0, grails doesn't work with class JVM, you have to switch your websphere instance to the IBM technology for java VM, with qshell, run the following command: /QIBM/ProdData/Websphere/AppServer/V61/edition/bin/enableJvm -jvm std32 -profile profile

Websphere Application Server Community Edition 2.0

WAS CE is much like Apache Geronimo. Possible errors during deployment might be connected to java version (try Sun's java 1.5) and/or conflicting libraries.

For informations about deployment plan for Geronimo, see:

For additional informations about changing loading policy see:

Note that deployment at WAS CE was not heavily tested so far!

  1. Create web-app/WEB-INF/geronimo-web.xml similiar to one below:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=""
  1. Build .war file
Execute 'grails war' at your project's folder
  1. Start WAS CE and login into management console
  2. Go to Applications->Deploy new
  3. As 'Archive' choose your .war file
  4. Click install

JBoss 4.2

Deploying onto JBoss 4.2 is trivial, simply start-up JBoss then drop the WAR file into the JBOSS_HOME/server/default/deploy directory (or the relevant profile you want to deploy to). JBoss will automatically deploy the Grails application which will then be accessible via something like: http://localhost:8080/myapp-0.1

JBoss 5

Take a look at this article on deploying a Grails application to JBoss 5.

Resin (3.1.3)

Deploying Grails onto Resin running with Apache as frontend may cause Apache not to pass request handling to Resin for grails-like URLs such as "/controller/action/1". Apache (and mod_caucho) considers this to be a normal physical directory access because there are no servlet mapping in the web.xml for such URLs. To fix this problem, simply add "SetHandler caucho-request" to your .htaccess file inside your webapp's document root directory. This will pass all URLs to caucho for processing. This can also be done using <Location> or <LocationMatch> in your apache configuration.

Oracle AS

There is a great article about how to deploy onto Oracle AS here:

Note if you use a JNDI dataSource you need to allow parent classes to load first

Weblogic 8.1.2

The most important thing to remember is that this version only supports servlet spec 2.3 so you need to make sure that the web.xml uses a DTD and not the 2.4 schema. WL also doesn't adhere strictly to the servlet spec and doesn't load listeners before servlets which can cause problems where the dispatcher cannot run because the application context hasn't been loaded. Have a look at this link for more info

Weblogic 9.2

Default Grails 1.1 applications fail to deploy on Weblogic 9.2 with the following exception:

org.springframework.beans.factory.BeanCreationException: Error creating 
bean with name 'pluginManager' defined in ServletContext resource 
[/WEB-INF/applicationContext.xml]: Invocation of init method failed; 
nested exception is java.lang.NoSuchMethodError:

To fix this create web-app/WEB-INF/weblogic.xml similiar to one below with the <prefer-web-inf-classes> element set to true:

<?xml version="1.0" encoding="UTF-8"?>

Weblogic 11g

I have found three problems deploying my app to Weblogic.

You must make a WEB-INF/weblogic.xml file with the following minimum content:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app xmlns:wls="" xmlns:xsi="" xsi:schemaLocation="">

I detail the errors, and solutions:

The server does not like -0.1 context root

To select an apropiate name for your app in the weblogic server write in weblogic.xml:


The server does not found the WEB-INF/lib classes

I noticed this error thanks to this exception: ClassNotFoundException: org.hibernate.hql.ast.HqlToken

This error happens with all the packages contained by default in the Weblogic classpath like antlr.jar or hibernate-core.jar. This solution makes prferable to Weblogic to look for classes in the WEB-INF/lib jars.



The server lost the session redirecting between servlets

This happens when you login in the controller and validates user in .gsp file. For example.

Avoid this error naming the session cookie: