From: Carlos A. V. <lo...@un...> - 2006-12-11 10:21:15
|
Hi all, These are the changes I found neccesary to use container datasource. These are the steps using tomcat. Step 1 should be the same for any container and 2 & 3 are almost standard in any container (differences normally are the locations of the files that hold the values) Sorry for being brief, I do not have much time, but I think it could help as is. I think that using container datasource is worth using and has many benefits. Hope you find it useful. Carlos ****** 1) Code changes: I get it working changing org.rapla.storage.dbsql.DBOperator.java. Just two methods are necesary to change: createConnection() and DBOperator(RaplaContext context, Configuration config) Three new imports are needed for using datasource import javax.naming.Context; import javax.naming.InitialContext; import javax.sql.DataSource; createConnection returns a connection from datasource pool: public Connection createConnection() throws RaplaException { Connection myConn = null; try { Context cxt = new InitialContext(); if ( cxt == null ) { throw new Exception("Unable to get context"); } DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/RaplaDB" ); if ( ds == null ) {throw new Exception("Datasource not found"); } else {myConn = ds.getConnection();} if (myConn == null) throw new RaplaDBException("Unable to connect to DB \nCheck datasource!"); bSupportsTransactions = myConn.getMetaData().supportsTransactions(); if (bSupportsTransactions) { myConn.setAutoCommit( false ); } else { getLogger().warn("No Transaction support"); } } catch (Throwable ex) { if ( ex instanceof RaplaDBException) { throw (RaplaDBException) ex; } ex.printStackTrace(); throw new RaplaDBException("DB-Connection aborted",ex); } return myConn; } DBOperator does not need now to register driver. Just remove all the lines of that. DBOperator(RaplaContext context, Configuration config) throws RaplaException { super( context ); } (Steps 2 and 3 are about container datasource conf. If you need more info, thay are explained at tomcat website -and in most containers) Be sure of being coherent when naming datasource. i.e. raplaDB and RaplaDB are not same) ****** 2) at WEB-INF/web.xml <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/RaplaDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ****** 3) at {catalina.base} conf/Catalina/localhost a rapla.xml file <Context path="/rapla" docBase="rapla" > <Resource name="jdbc/RaplaDB" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="3" maxWait="10" username="raplauser" password="somepass" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@yourHost:yourListnrPort:yourDB" connectionProperties="SetBigStringTryClob=true" /> </Context> |