You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2007/02/10 19:29:00 UTC

svn commit: r505735 - in /incubator/tuscany/java/das/rdb/src: main/java/org/apache/tuscany/das/rdb/ main/java/org/apache/tuscany/das/rdb/config/wrapper/ main/java/org/apache/tuscany/das/rdb/exception/ main/java/org/apache/tuscany/das/rdb/impl/ main/res...

Author: lresende
Date: Sat Feb 10 10:28:59 2007
New Revision: 505735

URL: http://svn.apache.org/viewvc?view=rev&rev=505735
Log:
Support for jdbc connections in a J2SE/pure java application. This is based on the patch provided by Amita in Tuscany-948 with a slight different approach.

Added:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/exception/DataSourceInitializationException.java
Modified:
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
    incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java
    incubator/tuscany/java/das/rdb/src/main/resources/config.xsd
    incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java?view=diff&rev=505735&r1=505734&r2=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/ConfigHelper.java Sat Feb 10 10:28:59 2007
@@ -78,13 +78,23 @@
         configWrapper.addDeleteStatement(table, statement, parameters);
     }
 
+    //JIRA-948 support for driver manager connection
+    public void addConnectionInfo(String dataSourceName) {
+        configWrapper.addConnectionInfo(dataSourceName, true, false, null, null, null, -1 );
+    }
+
     public void addConnectionInfo(String dataSourceName, boolean managedtx) {
-        configWrapper.addConnectionInfo(dataSourceName, managedtx);
+        configWrapper.addConnectionInfo(dataSourceName, managedtx, false, null, null, null, -1 );
     }
 
-    public void addConnectionInfo(String dataSourceName) {
-        configWrapper.addConnectionInfo(dataSourceName, true);
+    public void addConnectionInfo(String dataSourceName, boolean managedtx, boolean useDriverManager) {
+        configWrapper.addConnectionInfo(dataSourceName, managedtx, useDriverManager, null, null, null, -1 );
+    }
+
+    public void addConnectionInfo(String dataSourceName, boolean managedtx, boolean useDriverManager, String driverClass, String user, String password, int loginTimeout) {
+        configWrapper.addConnectionInfo(dataSourceName, managedtx, useDriverManager, driverClass, user, password, loginTimeout);
     }
+    //JIRA-948 end
 
     public void setDataObjectModel(String dataObjectModel) {
         configWrapper.getConfig().setDataObjectModel(dataObjectModel);

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java?view=diff&rev=505735&r1=505734&r2=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/config/wrapper/MappingWrapper.java Sat Feb 10 10:28:59 2007
@@ -32,6 +32,7 @@
 import org.apache.tuscany.das.rdb.config.Config;
 import org.apache.tuscany.das.rdb.config.ConfigFactory;
 import org.apache.tuscany.das.rdb.config.ConnectionInfo;
+import org.apache.tuscany.das.rdb.config.ConnectionProperties;
 import org.apache.tuscany.das.rdb.config.Create;
 import org.apache.tuscany.das.rdb.config.Delete;
 import org.apache.tuscany.das.rdb.config.KeyPair;
@@ -460,12 +461,24 @@
 
     }
 
-    public void addConnectionInfo(String dataSourceName, boolean managedtx) {
+    //JIRA-948 support for driver manager connection
+    public void addConnectionInfo(String dataSourceName, boolean managedtx, boolean useDriverManager, String driverClass, String user, String password, int loginTimeout) {
         ConnectionInfo info = ConfigFactory.INSTANCE.createConnectionInfo();
         info.setDataSource(dataSourceName);
         info.setManagedtx(managedtx);
+        info.setUseDriveManager(useDriverManager);
+        
+        ConnectionProperties connectionProperties = ConfigFactory.INSTANCE.createConnectionProperties(); 
+        connectionProperties.setDriverClass(driverClass);
+                 
+        connectionProperties.setUserName(user);
+        connectionProperties.setPassword(password);
+        connectionProperties.setLoginTimeout(loginTimeout);            
+
+        info.setConnectionProperties(connectionProperties);
         config.setConnectionInfo(info);
     }
+    //JIRA-948 end
 
     public Command addCommand(String name, String sql, String kind) {
         Command cmd = ConfigFactory.INSTANCE.createCommand();

Added: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/exception/DataSourceInitializationException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/exception/DataSourceInitializationException.java?view=auto&rev=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/exception/DataSourceInitializationException.java (added)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/exception/DataSourceInitializationException.java Sat Feb 10 10:28:59 2007
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.das.rdb.exception;
+
+public class DataSourceInitializationException extends RuntimeException  {
+	/**
+     * 
+     */
+    private static final long serialVersionUID = 302160989411041041L;
+
+    public DataSourceInitializationException(String string) {
+        super(string);
+    }
+	
+	public DataSourceInitializationException(Throwable e){
+		super(e);
+	}
+    
+    public DataSourceInitializationException(String string, Throwable e) {
+        super(string, e);
+    }
+}

Modified: incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java?view=diff&rev=505735&r1=505734&r2=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java (original)
+++ incubator/tuscany/java/das/rdb/src/main/java/org/apache/tuscany/das/rdb/impl/DASImpl.java Sat Feb 10 10:28:59 2007
@@ -19,7 +19,10 @@
 package org.apache.tuscany.das.rdb.impl;
 
 import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
+import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
@@ -34,7 +37,9 @@
 import org.apache.tuscany.das.rdb.DAS;
 import org.apache.tuscany.das.rdb.config.Config;
 import org.apache.tuscany.das.rdb.config.ConfigFactory;
+import org.apache.tuscany.das.rdb.config.ConnectionInfo;
 import org.apache.tuscany.das.rdb.config.wrapper.MappingWrapper;
+import org.apache.tuscany.das.rdb.exception.DataSourceInitializationException;
 import org.apache.tuscany.das.rdb.util.ConfigUtil;
 
 import commonj.sdo.DataObject;
@@ -71,8 +76,7 @@
                 (org.apache.tuscany.das.rdb.config.Command) i.next();
             String kind = commandConfig.getKind();
             if (kind.equalsIgnoreCase("select")) {
-                commands
-                        .put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), 
+                commands.put(commandConfig.getName(), new ReadCommandImpl(commandConfig.getSQL(), 
                                 configWrapper, commandConfig.getResultDescriptor()));
             } else if (kind.equalsIgnoreCase("update")) {
                 commands.put(commandConfig.getName(), new UpdateCommandImpl(commandConfig.getSQL()));
@@ -139,7 +143,7 @@
         }
         return connection;
     }
-
+    
     private void initializeConnection() {
         Config config = configWrapper.getConfig();
         if (config == null || config.getConnectionInfo() == null 
@@ -147,6 +151,19 @@
             throw new RuntimeException("No connection has been provided and no data source has been specified");
         }
 
+        ConnectionInfo connectionInfo = configWrapper.getConfig().getConnectionInfo();
+        if(connectionInfo.isUseDriveManager()){
+            initializeDriveManagerConnection(connectionInfo);
+        }else{
+            initializeDatasourceConnection(connectionInfo);
+        }
+
+    }
+
+    /**
+     * Initializes a DB connection on a managed environmet (e.g inside Tomcat)
+     */
+    private void initializeDatasourceConnection(ConnectionInfo connectionInfo){
         Connection connection = null;
 
         InitialContext ctx;
@@ -156,7 +173,7 @@
             throw new RuntimeException(e);
         }
         try {
-            DataSource ds = (DataSource) ctx.lookup(configWrapper.getConfig().getConnectionInfo().getDataSource());
+            DataSource ds = (DataSource) ctx.lookup(connectionInfo.getDataSource());
             try {
                 connection = ds.getConnection();
                 if (connection == null) {
@@ -170,9 +187,58 @@
         } catch (NamingException e) {
             throw new RuntimeException(e);
         }
-
     }
+    
+    /**
+     * Initialize a DB connection on a J2SE environment
+     * For more info, see http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/drivermanager.html
+     */
+    private void initializeDriveManagerConnection(ConnectionInfo connectionInfo) {
 
+        Connection connection = null;
+        
+        if (connectionInfo.getConnectionProperties() == null) {
+            throw new DataSourceInitializationException("No existing context and no connection properties");
+        }
+
+        if (connectionInfo.getConnectionProperties().getDriverClass() == null) {
+            throw new DataSourceInitializationException("No jdbc driver class specified!");
+        }
+
+        try {
+            //initialize driver and register it with DriverManager
+            Class.forName(connectionInfo.getConnectionProperties().getDriverClass());
+            
+            //prepare to initialize connection
+            String databaseUrl = connectionInfo.getDataSource();
+            String userName = connectionInfo.getConnectionProperties().getUserName();
+            String userPassword = connectionInfo.getConnectionProperties().getPassword();
+            int loginTimeout = connectionInfo.getConnectionProperties().getLoginTimeout();
+            
+            DriverManager.setLoginTimeout(loginTimeout);
+            if( (userName == null || userName.length() ==0) && (userPassword == null || userPassword.length()==0) ){
+                //no username or password suplied
+                connection = DriverManager.getConnection(databaseUrl);
+            }else{
+                connection = DriverManager.getConnection(databaseUrl, userName, userPassword);
+            }
+            
+            if(connection == null){
+                throw new DataSourceInitializationException("Error initializing connection : null");
+            }
+            
+            connection.setAutoCommit(false);
+            setConnection(connection);
+                
+            
+        }catch(ClassNotFoundException cnf){
+            throw new DataSourceInitializationException("JDBC Driver '" + connectionInfo.getConnectionProperties().getDriverClass() + "' not found", cnf);
+        }catch(SQLException sqle){
+            throw new DataSourceInitializationException(sqle.getMessage(), sqle);
+        }
+
+    }
+    
     public void releaseResources() {
 
         if (managingConnections()) {

Modified: incubator/tuscany/java/das/rdb/src/main/resources/config.xsd
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/main/resources/config.xsd?view=diff&rev=505735&r1=505734&r2=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/main/resources/config.xsd (original)
+++ incubator/tuscany/java/das/rdb/src/main/resources/config.xsd Sat Feb 10 10:28:59 2007
@@ -39,11 +39,23 @@
       <xsd:attribute name="dataObjectModel" type="xsd:string"/>
    </xsd:complexType>
 
+   <xsd:complexType name="ConnectionProperties">
+      <xsd:attribute name="driverClass" type="xsd:string"/>
+      <xsd:attribute name="userName" type="xsd:string" default=""/>
+      <xsd:attribute name="password" type="xsd:string" default=""/>
+      <xsd:attribute name="loginTimeout" type="xsd:int" default="0"/>      
+   </xsd:complexType>
+   
    <xsd:complexType name="ConnectionInfo">
+      <xsd:sequence>
+        <xsd:element  maxOccurs="1" minOccurs="0" name="ConnectionProperties" type="config:ConnectionProperties"/>
+      </xsd:sequence>
       <xsd:attribute name="dataSource" type="xsd:string"/>
       <xsd:attribute name="managedtx" type="xsd:boolean" default="true"/>
+      <xsd:attribute name="useDriveManager" type="xsd:boolean" default="false"/>
    </xsd:complexType>
-
+   
+   
    <xsd:complexType name="Command">
       <xsd:sequence>
          <xsd:element  maxOccurs="unbounded" minOccurs="0" name="Parameter"

Modified: incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java?view=diff&rev=505735&r1=505734&r2=505735
==============================================================================
--- incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java (original)
+++ incubator/tuscany/java/das/rdb/src/test/java/org/apache/tuscany/das/rdb/test/ProgrammaticConfigTests.java Sat Feb 10 10:28:59 2007
@@ -240,6 +240,39 @@
     }
 
     /**
+     * Simple unit test for ConnectionInfo using DriverManager
+     * @throws Exception
+     */
+    public void testConnectionInfoDriverManager() throws Exception {
+        ConfigHelper helper = new ConfigHelper();
+        helper.addConnectionInfo("jdbc/adatasource", false, true);
+
+        Config config = helper.getConfig();
+        ConnectionInfo info = config.getConnectionInfo();
+        assertEquals(info.getDataSource(), "jdbc/adatasource");
+        assertEquals(info.isManagedtx(), false);
+        assertEquals(info.isUseDriveManager(), true);
+    }    
+    
+    /**
+     * Simple unit test for ConnectionInfo using DriverManager
+     * @throws Exception
+     */
+    public void testConnectionInfoDriverManager2() throws Exception {
+        ConfigHelper helper = new ConfigHelper();
+        helper.addConnectionInfo("jdbc/adatasource", false, true, "jdbc:derby:target/dastest", "user", "password", 600);
+
+        Config config = helper.getConfig();
+        ConnectionInfo info = config.getConnectionInfo();
+        assertEquals(info.getDataSource(), "jdbc/adatasource");
+        assertEquals(info.isManagedtx(), false);
+        assertEquals(info.getConnectionProperties().getDriverClass(), "jdbc:derby:target/dastest");
+        assertEquals(info.getConnectionProperties().getUserName(), "user");
+        assertEquals(info.getConnectionProperties().getPassword(), "password");
+        assertEquals(info.getConnectionProperties().getLoginTimeout(), 600);
+    }  
+    
+    /**
      * Simple unit test for adding a select command
      * @throws Exception
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org