summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.persistence.adapter.jdbc/src/main/java/net/wotonomy/jdbcadaptor/JDBCContext.java
diff options
context:
space:
mode:
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.java146
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.
+ *
+ */