Tomcat
Tomcat is a Java servlet container, it can be used to display simple JSP and run Spring applications.
However, it cannot run JavaEE, you'll need a proper application server such IBM WAS, Glassfish, Jboss, etc. to do so.
Installation | Server configuration | Application configuration | Other |
---|---|---|---|
Linux apt-get setup | Users management | MySQL datasource | Apache 2 proxy |
Linux manual setup | UTF-8 | ||
Linux Tomcat on boot | IPv4 over IPv6 | Example | Example |
Windows setup | JMX configuration | Example | Example |
Increase PermGen | Example | Example |
Server configuration
War deployment
There is 2 ways to deploy a war:
- By pushing the target war into ${Tomcat root} / webapps
- By using the graphical tool http://localhost:8080/manager
If you plan to use the graphical tool then you have to adjust the war file max size.
Edit:
${Tomcat root} / webapps / manager / WEB-INF / web.xml
Adjust following values ~line 54 :
<multipart-config>
<max-file-size>104857600</max-file-size>
<max-request-size>104857600</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
Add MySQL datasource
Setup MySQL JDBC connector
1. Download MySQL JDBC driver http://dev.mysql.com/downloads/connector/j/
2. Decompress content and extract mysql-connector-java-XXX-bin.jar
3. Copy this file into $TOMCAT/libs Automatic install: /usr/share/tomcat7/lib
Declare MySQL datasource
Server.xml
Automatic install: /etc/tomcat7/server.xml
$TOMCAT/server.xml
Add
<host>
...
<GlobalNamingResources>
...
<!-- ####################################################################### -->
<!-- MySQL datasource -->
<!-- ####################################################################### -->
<!-- maxActive: Maximum number of database connections in pool. Set to -1 for no limit. -->
<!-- maxIdle: Maximum number of idle database connections to retain in pool. Set to -1 for no limit. -->
<!-- maxWait: Maximum time to wait for a database connection to become available in ms. Set to -1 to wait indefinitely. -->
<!-- driverClassName: Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver. -->
<Resource name="jdbc/myDataSource"
auth="Container" type="javax.sql.DataSource"
username="user" password="password"
url="jdbc:mysql://localhost:3306/mySchema"
maxActive="50" maxIdle="30" maxWait="10000"
driverClassName="com.mysql.jdbc.Driver"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
removeAbandoned="true"
validationQuery="select 1" validationInterval="30000"
testOnBorrow="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="60000"
numTestsPerEvictionRun="5"
poolPreparedStatements="true"
/>
</GlobalNamingResources>
- Tomcat 8 : factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
- Tomcat 7 >= 7.0.52 : factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
- Tomcat 6,7 < 7.0.52 : factory="org.apache.commons.dbcp.BasicDataSourceFactory"
Context.xml
Edit:
$TOMCAT/context.xml
Add the following declaration
<!-- ####################################################################### -->
<!-- MySQL datasource -->
<!-- ####################################################################### -->
<ResourceLink name="jdbc/myDataSource"
global="jdbc/myDataSource"
type="javax.sql.datasource" />
web.xml
Edit
$TOMCAT/web.xml
Add the following declaration
<!-- ####################################################################### -->
<!-- MySQL datasource -->
<!-- ####################################################################### -->
<resource-ref>
<description>RTD database</description>
<res-ref-name>jdbc/VehcoData</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Take changes into account
Restart tomcat
service tomcat7 restart
Check result: http://localhost:8080/manager/text/resources
Use datasource
To use the datasource with a JNDI name you must prefix it with: java:comp/env/
java:comp/env/jdbc/myDataSource
Datasource improvements
You can tweak the datasource using some specific config parameters. Edit:
$TOMCAT/server.xml
Edit your JDBC resource:
<Resource auth="Container"
name="jdbc/APP_NAME"
username="user"
password="password"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@server.domain:1521:development" → ORACLE database
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:mysql://localhost:3306/rtd" → MySQL database
driverClassName="com.mysql.jdbc.Driver"
maxActive="50" maxIdle="30" maxWait="10000" → Connection pool
maxIdle="10"
maxWait="5000"
maxActive="30" → To remove none close connections
logAbandoned="true" To report the stacktrace of the faulty code
removeAbandoned="true" To remedy connection starvation while leaky code is not fixed
removeAbandonedTimeout="60" Interval for fixing connection starvation
validationQuery="select 1 from dual" custom query to perform regular checks
validationInterval="30000" To be adjusted! Interval in ms.
testOnBorrow="true"
testOnReturn="false"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="5000"
numTestsPerEvictionRun="3"
minEvictableIdleTimeMillis="30000"
/>
More tweaks: http://commons.apache.org/proper/commons-dbcp/configuration.html
Basic tasks
Files location
The applications files are in $Tomcat/webapps
- Automatic installation: /var/lib/tomcat/webapps
Remove old temp files
In case of bugs, you can remove the working directory: $Tomcat/work/Catalina/localhost/*
rm -Rf /var/lib/tomcat7/work/Catalina/localhost/*