Sorry for this response : please do not cross-post to dev and user.. Stick to
the user list..
Mvgr,
Martin
Saeed wrote:
> Dear JAVA-DBCP-UNIX Experts,
> I'm my all-life Cobol guy. I have recently started working on Java side. I
> apologize if I use improper java terminologies/terms. Currently I'm trying to
> bring Oracle data in my Cobol programs through Java objects on SCO UNIX.
>
> Firstly, I have written set of test (cobol/java) programs using jdbc to
> access oracle db, which is working perfectly. I've read accessing oracle db
> through jdbc call, which creates new connection for each user is time
> consuming and costly.
> So finally, I modified & implemented my test bed with DBCP "share pool" of
> open connections. And this approach is also working fine, accessing database
> in my Cobol program successfully.
>
> ******************MY ENVIRONMENT******************
> I'm running Cobol & Java programs (using JDK 1.4) on SCO UNIX, trying to
> access Oracle db located on Windows server. MOST IMPORTANTLY, THERE IS NOT
> ANY KIND OF JAVA APPLICATION SERVER or WEB SERVER on my platform. That means
> I'm using COBOL/JAVA/DBCP (pooling concept) in standalone mode under UNIX.
> ******************MY ENVIRONMENT******************
>
> Questions -
> 1. How can I know this connection pooling concept is working on my Unix
> environment? It looks like the program is creating connections on each user's
> call to db?
> 2. I need a strategy (if possible some utility) to confirm connection
> pooling in my environment? how can i test this?
> 3. Since I'm not using any kind of application & web server, is this thing
> fits under standalone platform like the one i described above? Am I using in
> a right way?
> 4. When do you think I should call shutdownDataSource method?
>
> Your great help will be appreciated.
> Best regards, Sayeed
>
> my config file ---
> <properties>
> <entry key="driverClassName">oracle.jdbc.driver.OracleDriver</entry>
> <entry key="username">usernm</entry>
> <entry key="password">usrpswd</entry>
> <entry key="url">jdbc:oracle:thin:@host:1521:dbsid</entry>
> <entry key="maxActive">50</entry>
> <entry key="initialSize">5</entry>
> <entry key="maxIdle">1</entry>
> <entry key="maxWait">3000</entry>
> <entry key="testOnBorrow">true</entry>
> <entry key="validationQuery">select * from dual</entry>
> </properties>
>
> my java file ...
>
> import java.io.IOException;
> import java.sql.Connection;
> import java.sql.ResultSet;
> import java.sql.SQLException;
> import java.sql.Statement;
> import java.util.Iterator;
> import java.util.List;
> import java.util.Properties;
> import javax.sql.DataSource;
> import org.apache.commons.dbcp.BasicDataSource;
> import org.jdom.Attribute;
> import org.jdom.Document;
> import org.jdom.Element;
> import org.jdom.JDOMException;
> import org.jdom.input.SAXBuilder;
> import org.xml.sax.helpers.DefaultHandler;
> public class DataSourceTest {
> // DefaultHandler contain no-op implementations for all SAX events.
> // This class should override methods to capture the events of interest.
> static class MyHandler extends DefaultHandler {
> }
> public static void main(String[] args) throws IOException, Exception {
> // First we set up the BasicDataSource.
> // Normally this would be handled auto-magically by
> // an external configuration, but in this example we'll
> // do it manually.
> //
> System.out.println("Setting up data source.");
> DataSource dataSource = getDataSource();
> System.out.println("Done.");
>
> System.out.println("Print Data Source Statistics.");
> printDataSourceStats(dataSource);
> //
> // Now, we can use JDBC DataSource as we normally would.
> //
> Connection conn = null;
> Statement stmt = null;
> ResultSet rset = null;
> try {
> System.out.println("Creating connection.");
> conn = dataSource.getConnection();
> System.out.println("Creating statement.");
> stmt = conn.createStatement();
> System.out.println("Executing statement.");
> // rset = stmt.executeQuery(args[1]);
> rset = stmt.executeQuery("SELECT desc from tabdesc");
> System.out.println("Results:");
> int numcols = rset.getMetaData().getColumnCount();
> while(rset.next()) {
> for(int i=1;i<=numcols;i++) {
> System.out.print("\t" + rset.getString(i));
> }
> System.out.println("");
> }
> System.out.println("Print Data Source Statistics after open
> connection.");
> printDataSourceStats(dataSource);
> } catch(SQLException e) {
> e.printStackTrace();
> } finally {
> try { rset.close(); } catch(Exception e) { }
> try { stmt.close(); } catch(Exception e) { }
> try { conn.close(); } catch(Exception e) { }
> }
> System.out.println("Print Data Source Statistics after closing
> connection.");
> printDataSourceStats(dataSource);
> System.out.println("Print Data Source Statistics after closing data
> source.");
> shutdownDataSource(dataSource);
> printDataSourceStats(dataSource);
>
> }
> public static DataSource getDataSource()throws IOException, Exception{
> BasicDataSource bds = new BasicDataSource();
> Properties datasourceProperties=new Properties();
> DefaultHandler handler = new MyHandler();
> parseConfigFile(datasourceProperties, "datasource-config.xml", handler,
> false);
>
> bds.setDriverClassName(datasourceProperties.getProperty("driverClassName"));
> bds.setUsername(datasourceProperties.getProperty("username"));
> bds.setPassword(datasourceProperties.getProperty("password"));
> bds.setUrl(datasourceProperties.getProperty("url"));
> bds.setMaxActive(new
> Integer(datasourceProperties.getProperty("maxActive")).intValue());
> bds.setInitialSize(new
> Integer(datasourceProperties.getProperty("initialSize")).intValue());
> bds.setMaxIdle(new
> Integer(datasourceProperties.getProperty("maxIdle")).intValue());
> bds.setMaxWait(new
> Integer(datasourceProperties.getProperty("maxWait")).intValue());
> bds.setTestOnBorrow(new
> Boolean(datasourceProperties.getProperty("testOnBorrow")).booleanValue());
>
> bds.setValidationQuery(datasourceProperties.getProperty("validationQuery"));
> System.out.println("MAXActive: " + bds.getMaxActive());
> System.out.println("MAXIdle: " + bds.getMaxIdle());
> System.out.println("NumActive: " + bds.getNumActive());
> System.out.println("NumIdle: " + bds.getNumIdle());
> return bds;
> }
> public static void parseConfigFile(Properties datasourceProperties, String
> filename, DefaultHandler handler, boolean validating) throws JDOMException,
> IOException {
> Document incomDoc =null;
> SAXBuilder builder=null;
> List childList=null;
> Element propItem=null;
> String propItemKey=null;
> String propItemVal=null;
> Attribute attribute = null;
> try {
> builder = new SAXBuilder(false);
> incomDoc = builder.build(filename);
>
> Element rootElement = incomDoc.getRootElement();
> childList = rootElement.getChildren();
> for (Iterator i = childList.iterator();i.hasNext();) {
> propItem = (Element)i.next();
> attribute=propItem.getAttribute("key");
> propItemKey = attribute.getValue();
> propItemVal=propItem.getText();
> datasourceProperties.setProperty(propItemKey, propItemVal);
>
> }
> } catch(Exception e)
> {
> e.printStackTrace();
> }
> }
> public static void printDataSourceStats(DataSource ds) throws
> SQLException {
> BasicDataSource bds = (BasicDataSource) ds;
> System.out.println("NumActive: " + bds.getNumActive());
> System.out.println("NumIdle: " + bds.getNumIdle());
> }
> public static void shutdownDataSource(DataSource ds) throws SQLException {
> BasicDataSource bds = (BasicDataSource) ds;
> bds.close();
> }
> }
>
>
>
>
> ---------------------------------
> Ahhh...imagining that irresistible "new car" smell?
> Check outnew cars at Yahoo! Autos.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]