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