lundi 5 mars 2012

Tomcat, Spring, JNDI & Oracle

Step 1:

Ajouter le JAR du driver Oracle dans le répertoire common/lib de Tomcat. S'assurer que dans le catalina.properties, la variable common.loader contient bien ${catalina.base}/common/lib/*.jar


Step 2:

Dans le fichier context.xml du répertoire conf de Tomcat, ajouter la ressource suivante :


<resource 
auth="Container" 
driverclassname="oracle.jdbc.driver.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory" 
maxactive="40" maxidle="3" 
maxopenpreparedstatements="100" maxwait="10000"
name="jdbc/oracleDataSource" password="password"
poolpreparedstatements="true" 
type="oracle.jdbc.pool.OracleDataSource"
url="jdbc:oracle:thin:@oracle_host:oracle_port:oracle_sid"
username="username" validationquery="SELECT SYSDATE FROM DUAL">
</resource>




Step 3:

Dans le fichier web.xml


<resource-ref>
<description>Connection Pool</description>
<res-ref-name>jdbc/oracleDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>




Step 4:

Déclaration du data source dans le fichier de context Spring


<bean class="org.springframework.jndi.JndiObjectFactoryBean" id="dataSource">
<property name="jndiName" value="java:comp/env/jdbc/oracleDataSource"></property>
<property name="resourceRef" value="true"> </property>
<property name="proxyInterface" value="javax.sql.DataSource"></property>
<property name="lookupOnStartup" value="true"></property>
</bean>




Step 5:

Modifier les valeur maxActive, maxWait... pour qu'ils correspondent aux besoins.


...avec Maven et Cargo plugin

Ajouter la dépendance vers la librairie Oracle dans votre POM :


<dependency>
<groupid>com.oracle</groupid>
<artifactid>ojdbc5</artifactid>
<version>${oracle.version}</version>
<type>jar</type>
</dependency>



Dans la configuration du plugin cargo, dans la section 'container', ajouter la dépendance vers la librairie Oracle:


<pluginmanagement>
<plugins>
...
<plugin>
<groupid>org.codehaus.cargo</groupid>
<artifactid>cargo-maven2-plugin</artifactid>
<version>1.1.3</version>
<configuration>
<container>
<containerid>tomcat6x</containerid>
...
<dependencies>
<dependency>
<groupid>com.oracle</groupid>
<artifactid>ojdbc5</artifactid>
<classpath>extra</classpath>
</dependency>
</dependencies>
</container>
</configuration>
</plugin>
</plugins>
</pluginmanagement>


Réaliser un fichier tomcat-context.xml dans un répertoire de resource (par exemple, resource/conf/) avec pour contenu :


<context>
<resource 
auth="Container" 
driverclassname="oracle.jdbc.driver.OracleDriver"
factory="oracle.jdbc.pool.OracleDataSourceFactory" 
maxactive="40" maxidle="3" maxopenpreparedstatements="100"
maxwait="10000" name="jdbc/oracleDataSource" password="password"
poolpreparedstatements="true" type="oracle.jdbc.pool.OracleDataSource"
url="jdbc:oracle:thin:@oracle_host:oracle_port:oracle_sid"
username="username" validationquery="SELECT SYSDATE FROM DUAL">
</resource>



Finalement, modifier la configuration du plugin cargo :


<plugins>
<plugin>
<groupid>org.codehaus.cargo</groupid>
<artifactid>cargo-maven2-plugin</artifactid>
<executions>
<execution>
<id>start-cargo</id>
<phase>pre-integration-test</phase>
<goals>
<goal>${cargo.goal}</goal>
</goals>
<configuration>
<container>
<timeout>200</timeout>
</container>

<configuration>
<properties>
<cargo .servlet.port=".servlet.port">${servlet.port}</cargo>
</properties>
<deployables>
<deployable>
<groupid>application.group.id</groupid>
<artifactid>myapp</artifactid>
<type>war</type>
</deployable>
...
</deployables>
<configfiles>
<configfile>
<file>${project.build.directory}/test-classes/tomcat-context.xml</file>
<todir>conf/</todir>
<tofile>context.xml</tofile>
</configfile>
...
</configfiles></configuration></configuration></execution></executions></plugin>
</plugins>


Aucun commentaire:

Enregistrer un commentaire