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).
jdbc.default.jndi.name=jdbc/LiferayPool
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.