Configuring c3p0 connection pool for Liferay on Tomcat
There’s several ways you could configure a connection pool for Liferay on Tomcat but the way I’m going to show is the JEE way and the only one I consider correct.
The first thing is to copy or move the c3p0.jar from webapps/ROOT/WEB-INF/lib/ to lib/. Also make sure you have your dabase driver there. In this example it would be mysql.jar.
Then we need to tell Liferay that you want to use a connection pool from JNDI and this you can do by adding following line to your portal-ext.properties which can be placed in Liferay Home directory (the directory above tomcat).
Add following snippet to conf/server.xml inside GlobalNamingResources. Adjust the pool size and idle time and connection test period according to your environment. They are particularly important when you have a firewall between your Liferay and database or when the database server drops connections after certain idle period.
<Resource name="jdbc/LiferayPool" auth="Container" type="com.mchange.v2.c3p0.ComboPooledDataSource" factory="org.apache.naming.factory.BeanFactory" driverClass="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost/lportaluseUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false" user="lportal" password="test" minPoolSize="10" maxPoolSize="20" maxIdleTime="600" preferredTestQuery="select 1 from dual" idleConnectionTestPeriod="180" numHelperThreads="5" maxStatementsPerConnection="100" />
Now we need to link the jdbc/LiferayPool name defined in portal-ext.properties to the jdbc/LiferayPool defined in server.xml and this definition goes to conf/Catalina/localhost/ROOT.xml
<ResourceLink name="jdbc/LiferayPool" global="jdbc/LiferayPool" type="javax.sql.DataSource"/>
Now we are done and you can start your tomcat with the new connection pool. Note you can follow similar process to configure MailSession from JNDI.