Welcome to my Tomcat tutorials website!

sabato 29 marzo 2014

Tomcat Thread Pool configuration

In order to accept incoming requests, Tomcat uses a Thread pool. You can configure two types of Thread Pools: Shared Pool and Dedicated Pool.
A Shared pool as the name inplies, can be shared among various components in Tomcat. So, for example if you have three connectors in your configuration, then you can use a single shared pool to serve requests for all of them. Here is how to configure a shared thread pool:

Open Tomcat's server.xml file and include the Executor definition:

 

namePrefix="catalina-exec-"

maxThreads="150"

minSpareThreads="4"/>


Once you have added the shared thread pool, you need to reference it in your Connector configuration as follows:
 


namePrefix="catalina-exec-"

maxThreads="200"

minSpareThreads="4"/>

 

A Dedicated thread pool is a thread pool which is dedicated to only one connector definition. You can use it in a scenario when you are expecting a peak of connections and you want to have full control over the amounts of threads to be used by your connector.
The dedicated thread pool configuration can be embedded directly into the Connector section of your server.xml. See the following example:

 


protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="false" 
sslProtocol="TLS" />

When to use a shared thread pool versus a Dedicated thread pool
Generally speaking a Shared Thread pool is best fit when the number of users expected is not hight and we don't care much about performance. This is the typical scenario for a Development Environment. On the other hand, for production environment when Performance is critical you should consider using a Dedicated Thread Pool.

Tomcat Datasource configuration using MySQL

Configuring a MySQL Datasource on Tomcat 

Pre-requisite. Download MySQL JDBC Driver from: https://dev.mysql.com/downloads/connector/j/

In order to configure a Datasource on Tomcat for MySQL Database you need to follow these three simple steps:

1) Define the Datasource in server.xml
Include a Datasource configuration in your Tomcat's server.xml file within the Context section, containing information about the JDBC URL, username and password and the maximum number of active connections allowed in the pool:

<Resource name="jdbc/MySQLDS" auth="Container" type="javax.sql.DataSource"
         username="root"
         password="admin"
         driverClassName="com.mysql.jdbc.Driver"
         url="jdbc:mysql://localhost:3306/schema"
         maxActive="15"
         maxIdle="7"
         defaultTransactionIsolation="READ_COMMITTED"
         validationQuery="Select 1" />


2) Install JDBC Driver 
Next, before starting up Tomcat place MySQL JDBC driver (e.g. mysql-connector-java-5.1.29-bin.jar) into CATALINA_HOME/lib/

3) Add a reference to the DataSource in web.xml 
Finally, in your web.xml reference your datasource by including the JNDI name assigned in your server.xml:

<resource-ref>
 <description>Oracle Datasource for tomcat </description>
 <res-ref-name>jdbc/MySQLDS</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

Now you can look up your Datasource in your application as follows:
 
InitialContext cxt = new InitialContext();
 

DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/MySQLDS" );

if ( ds == null ) {
   throw new Exception("Data source not found!");
}
 

Tomcat Datasource configuration using Oracle

Pre-requisite. Download Oracle JDBC Driver from: Oracle JDBC Drivers are available at Oracle Site: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

In order to configure a Datasource on Tomcat for Oracle Database you need to follow these three simple steps:

1) Define the Datasource in server.xml
Include a Datasource configuration in your Tomcat's server.xml file within the Context section, containing information about the JDBC URL, username and password and the maximum number of active connections allowed in the pool:

<Resource name="jdbc/OracleDS" auth="Container" type="javax.sql.DataSource"
         username="scott"
         password="tiger"
         driverClassName="com.mysql.jdbc.Driver"
         url="jdbc:oracle:thin:@localhost:1521:test"
         maxActive="15"
         maxIdle="7"
         defaultTransactionIsolation="READ_COMMITTED"
         validationQuery="Select 1" />
2) Install the JDBC Driver 
Next, before starting up Tomcat place Oracle JDBC driver into CATALINA_HOME/lib/ . For Oracle, either class 12.jar or ojdbc5.jar


3) Finally, in your web.xml reference your datasource by including the JNDI name assigned in your server.xml:

<resource-ref>
 <description>Oracle Datasource for tomcat </description>
 <res-ref-name>jdbc/OracleDS</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>

Now you can look up your Datasource in your application as follows:
 
InitialContext cxt = new InitialContext();
 

DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/OracleDS" );

if ( ds == null ) {
   throw new Exception("Data source not found!");
}