diff src/main/java/nl/cwi/monetdb/jdbc/MonetDataSource.java @ 0:a5a898f6886c

Copy of MonetDB java directory changeset e6e32756ad31.
author Sjoerd Mullender <sjoerd@acm.org>
date Wed, 21 Sep 2016 09:34:48 +0200 (2016-09-21)
parents
children 7307caacc2d5 e092fa8d9ab7
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetDataSource.java
@@ -0,0 +1,218 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0.  If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V.
+ */
+
+package nl.cwi.monetdb.jdbc;
+
+import java.sql.*;
+import javax.sql.*;
+import java.util.*;
+import java.io.*;
+import java.util.logging.Logger;
+
+/**
+ * A DataSource suitable for the MonetDB database.
+ * 
+ * This DataSource allows retrieval of a Connection using the JNDI bean like
+ * framework.  A DataSource has numerous advantages over using the DriverManager
+ * to retrieve a Connection object.  Using the DataSource interface enables a
+ * more transparent application where the location or database can be changed
+ * without changing any application code.
+ * 
+ * Additionally, pooled connections can be used when using a DataSource.
+ *
+ * @author Fabian Groffen
+ * @version 0.1
+ */
+public class MonetDataSource extends MonetWrapper implements DataSource {
+	private String description;
+	private int loginTimeout = 0;
+	private String user;
+	// insecure, but how to do it better?
+	private String password;
+	private String url;
+
+	// the following properties are also standard:
+	// private String dataSourceName;
+	// private String networkProtocol;
+	// private String serverName;
+	// private String role;
+
+
+	private final MonetDriver driver;
+
+	/**
+	 * Constructor of a MonetDataSource which uses default settings for a
+	 * connection.  You probably want to change this setting using the
+	 * method setURL.
+	 */
+	public MonetDataSource() {
+		description = "MonetDB database";
+		url = "jdbc:monetdb://localhost/";
+
+		driver = new MonetDriver();
+	}
+
+	/**
+	 * Attempts to establish a connection with the data source that this
+	 * DataSource object represents.
+	 *
+	 * @return a MonetConnection
+	 * @throws SQLException if connecting to the database fails
+	 */
+	@Override
+	public Connection getConnection() throws SQLException {
+		return getConnection(user, password);
+	}
+
+	/**
+	 * Attempts to establish a connection with the data source that this
+	 * DataSource object represents.
+	 *
+	 * @param username the username to use
+	 * @param password the password to use
+	 * @return a MonetConnection
+	 * @throws SQLException if connecting to the database fails
+	 */
+	@Override
+	public Connection getConnection(String username, String password)
+		throws SQLException
+	{
+		if (loginTimeout > 0) {
+			/// could enable Socket.setSoTimeout(int timeout) here...
+		}
+		Properties props = new Properties();
+		props.put("user", username);
+		props.put("password", password);
+
+		return driver.connect(url, props);
+	}
+
+
+	/**
+	 * Gets the maximum time in seconds that this data source can wait while
+	 * attempting to connect to a database.
+	 *
+	 * @return login timeout default is 0 (infinite)
+	 */
+	@Override
+	public int getLoginTimeout() {
+		return loginTimeout;
+	}
+
+	/**
+	 * Sets the maximum time in seconds that this data source will wait while
+	 * attempting to connect to a database.
+	 *
+	 * @param seconds the number of seconds to wait before aborting the connect
+	 */
+	@Override
+	public void setLoginTimeout(int seconds) {
+		loginTimeout = seconds;
+	}
+
+	/**
+	 * Retrieves the log writer for this DataSource object.
+	 *
+	 * @return null, since there is no log writer
+	 */
+	@Override
+	public PrintWriter getLogWriter() {
+		return null;
+	}
+
+	/**
+	 * Sets the log writer for this DataSource object to the given
+	 * java.io.PrintWriter object.
+	 *
+	 * @param out a PrintWriter - ignored
+	 */
+	@Override
+	public void setLogWriter(PrintWriter out) {
+	}
+
+	/**
+	 * Sets the password to use when connecting.  There is no getter
+	 * for obvious reasons.
+	 *
+	 * @param password the password
+	 */
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	/**
+	 * Gets the username
+	 *
+	 * @return the username
+	 */
+	public String getUser() {
+		return user;
+	}
+
+	/**
+	 * Sets the username
+	 *
+	 * @param user the username
+	 */
+	public void setUser(String user) {
+		this.user = user;
+	}
+
+	/**
+	 * Gets the connection URL
+	 *
+	 * @return the connection URL
+	 */
+	public String getURL() {
+		return url;
+	}
+
+	/**
+	 * Sets the connection URL
+	 *
+	 * @param url the connection URL
+	 */
+	public void setDatabaseName(String url) {
+		this.url = url;
+	}
+
+	/**
+	 * Gets the description
+	 *
+	 * @return the description
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * Sets the description
+	 *
+	 * @param description the description
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	/**
+	 * Return the parent Logger of all the Loggers used by this data
+	 * source.  This should be the Logger farthest from the root Logger
+	 * that is still an ancestor of all of the Loggers used by this data
+	 * source.  Configuring this Logger will affect all of the log
+	 * messages generated by the data source. In the worst case, this
+	 * may be the root Logger.
+	 *
+	 * @return the parent Logger for this data source
+	 * @throws SQLFeatureNotSupportedException if the data source does
+	 *         not use java.util.logging
+	 */
+	@Override
+	public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+		throw new SQLFeatureNotSupportedException("java.util.logging not in use", "0A000");
+	}
+}