diff options
| author | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
|---|---|---|
| committer | Benjamin Culkin <scorpress@gmail.com> | 2024-05-19 17:56:33 -0400 |
| commit | aedc34d55462a75e329bbf342251ff6504cd117e (patch) | |
| tree | bcc8f1f2352582717b484df302aeea6696b8f000 /projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java | |
Initial import from SVN
Diffstat (limited to 'projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java')
| -rw-r--r-- | projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java b/projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java new file mode 100644 index 0000000..445ffb5 --- /dev/null +++ b/projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java @@ -0,0 +1,146 @@ +/* + Wotonomy: OpenStep design patterns for pure Java applications. + Copyright (C) 2001 Michael Powers + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see http://www.gnu.org + */ +package net.wotonomy.jdbcadaptor; + +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.SQLException; + +import net.wotonomy.access.EOAdaptor; +import net.wotonomy.access.EOAdaptorChannel; +import net.wotonomy.access.EOAdaptorContext; + +/** +* Concrete implementation of EOAdaptorContext for use with JDBC. +* +* @author ezamudio@nasoft.com +* @author $Author: cgruber $ +* @version $Revision: 903 $ +*/ +public class JDBCContext extends EOAdaptorContext { + + protected Connection _jdbcConnection; + + /** + * Creates a new instance. + * @param adaptor The adaptor this context belongs to. + */ + public JDBCContext(EOAdaptor adaptor) { + super(adaptor); + } + + public void connect() throws JDBCAdaptorException { + try { + if (_jdbcConnection != null && !_jdbcConnection.isClosed()) + throw new JDBCAdaptorException("Attempt to connect when already connected.", null); + Class.forName(((JDBCAdaptor)adaptor()).driverName()); + String url = (String)adaptor().connectionDictionary().objectForKey("URL"); + Driver driver = DriverManager.getDriver(url); + java.util.Properties props = new java.util.Properties(); + props.setProperty("user", (String)adaptor().connectionDictionary().objectForKey("username")); + props.setProperty("password", (String)adaptor().connectionDictionary().objectForKey("password")); + _jdbcConnection = driver.connect(url, props); + _jdbcConnection.setAutoCommit(false); + } catch (SQLException ex) { + throw new JDBCAdaptorException("Cannot connect to database", ex); + } catch (ClassNotFoundException ex) { + throw new JDBCAdaptorException("Cannot find JDBC driver " + ex.getMessage(), null); + } + } + + public void disconnect() throws JDBCAdaptorException { + if (_jdbcConnection != null) { + try { + _jdbcConnection.close(); + _jdbcConnection = null; + transactionDidRollback(); + } catch (SQLException ex) { + throw new JDBCAdaptorException("Trying to close connection.", ex); + } + } + } + + public Connection connection() { + return _jdbcConnection; + } + + /* Begins a transaction. Actually it does nothing because it's not + * necessary. + * @see net.wotonomy.access.EOAdaptorContext#beginTransaction() + */ + public void beginTransaction() { + if (hasOpenTransaction()) + throw new JDBCAdaptorException("Cannot nest transactions.", null); + transactionDidBegin(); + } + + /* Commits a transaction. + * @see net.wotonomy.access.EOAdaptorContext#commitTransaction() + */ + public void commitTransaction() { + try { + _jdbcConnection.commit(); + transactionDidCommit(); + } catch (SQLException ex) { + throw new JDBCAdaptorException("Cannot commit.", ex); + } + } + + /* Rolls back a transacion. + * @see net.wotonomy.access.EOAdaptorContext#rollbackTransaction() + */ + public void rollbackTransaction() { + try { + _jdbcConnection.rollback(); + transactionDidRollback(); + } catch (SQLException ex) { + throw new JDBCAdaptorException("Cannot commit.", ex); + } + } + + /* Creates a JDBCChannel instance. + * @see net.wotonomy.access.EOAdaptorContext#createAdaptorChannel() + */ + public EOAdaptorChannel createAdaptorChannel() { + JDBCChannel channel = new JDBCChannel(this); + _channels.addObject(channel); + return channel; + } + + /* I don't know what to do here. Throw something, maybe? + * @see net.wotonomy.access.EOAdaptorContext#handleDroppedConnection() + */ + public void handleDroppedConnection() { + // TODO Auto-generated method stub + + } + +} +/* + * $Log$ + * Revision 1.2 2006/02/18 22:59:22 cgruber + * make it compile with maven dependencies and add a cvsignore. + * + * Revision 1.1 2006/02/16 13:22:23 cgruber + * Check in all sources in eclipse-friendly maven-enabled packages. + * + * Revision 1.1 2003/08/13 20:13:33 chochos + * concrete implementation of EOAdaptorContext for use with JDBC. This is the class that holds the physical connection to the database. + * + */ |
