One of the most common questions we encounter when starting up a new Liferay project is: “Which Liferay bundle should I use for installation?” Our response is often not what clients are expecting to hear; in most cases, we do not recommend that you use any of the prepackaged Liferay bundles, at least, for integration, QA, and production environments. While the Liferay bundle is ideally suited for use by individual developers, it’s not necessarily tailored for use in a production environment. The reasons for this are as follows:

  • Each of the Liferay bundles ships with a version of the selected application server (Tomcat, JBoss, Glassfish, etc.) that was included at the time the bundle was originally built; by the time the bundle becomes available for download, the included version of the application server is usually outdated and is missing critical security and maintenance patches present in more recent versions of the server.
  • Upgrading the application server instance in a Liferay bundle can be a complex process, as everything is contained within a single unified directory structure. It is generally considered to be a best practice to keep your Java application server fully patched up, and moving to a directory structure in which configuration and deployed applications are kept discrete from the application server binaries makes this process much easier to manage.
  • A Liferay bundle comes with a number of extraneous libraries included which are not necessary for a production-level installation. The most obvious examples of these are the various JDBC drivers included in the bundle; you don’t need the hsql or PostgreSQL libraries in your installation if you’re using SQL Server. Removing the hsql driver is particularly important, as it actually causes a dangerous situation if included in the Liferay classpath: Liferay will fail over to the built-in hsql database if it encounters certain types of problems with another database provider, masking what should be a severe error condition by happily starting up with an invalid database.
  • Using the Liferay bundle makes it difficult to create and manage multiple application server instances on a single server; this is primarily a problem for two scenarios: first, you want to create multiple Liferay JVMs to optimize hardware resource utilization, and second, you want to run additional discrete application server instances to isolate and scale service or integration-level applications.

XTIVIA has devised a standard Liferay installation structure that we promote for all of our Liferay installations; it was designed to accommodate both maintenance and scalability concerns. I’ll cover the details of this structure in a separate posting.