[java-identity-provider COMMIT] in /trunk/idp-attribute-resolver-impl/src: main/java/net/shibboleth/idp/attribute/res...

noreply at shibboleth.net noreply at shibboleth.net
Thu May 2 00:54:20 EDT 2013


Author: dfisher
Date: Thu May  2 00:54:20 2013
New Revision: 4447

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=4447&view=rev
Log:
Add FormatExecutableStatementBuilder to construct SQL using String#format.
Remove SqlStringExecutableStatement; inner classes for ExecutableStatements seem to be a cleaner implementation.
Add readOnlyConnection property to RdbmsDataConnector.

Added:
    trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/FormatExecutableStatementBuilder.java
Modified:
    trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnector.java
    trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/SqlStringExecutableStatement.java
    trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnectorTest.java

Modified: trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnector.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnector.java?rev=4447&r1=4446&r2=4447&view=diff
==============================================================================
--- trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnector.java (original)
+++ trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnector.java Thu May  2 00:54:20 2013
@@ -49,6 +49,11 @@
     /** JDBC data source for retrieving {@link Connection}s. */
     private DataSource dataSource;
 
+    /** Whether the JDBC connection is read-only. */
+    private boolean readOnlyConnection = true;
+
+    // TODO: support queryUsesStoredProcedure?
+
     /**
      * Constructor.
      */
@@ -76,6 +81,24 @@
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
         dataSource = Constraint.isNotNull(source, "JDBC data source can not be null");
+    }
+
+    /**
+     * Gets whether this data connector uses read-only connections.
+     * 
+     * @return whether this data connector uses read-only connections
+     */
+    public boolean isConnectionReadOnly() {
+        return readOnlyConnection;
+    }
+
+    /**
+     * Sets whether this data connector uses read-only connections.
+     * 
+     * @param isReadOnly whether this data connector uses read-only connections
+     */
+    public void setConnectionReadOnly(boolean isReadOnly) {
+        readOnlyConnection = isReadOnly;
     }
 
     /** {@inheritDoc} */
@@ -127,6 +150,9 @@
         ResultSet queryResult = null;
         try {
             connection = dataSource.getConnection();
+            if (readOnlyConnection) {
+                connection.setReadOnly(true);
+            }
             queryResult = statement.execute(connection);
             log.trace("Data connector '{}': search returned {}", getId(), queryResult);
 

Modified: trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnectorTest.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnectorTest.java?rev=4447&r1=4446&r2=4447&view=diff
==============================================================================
--- trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnectorTest.java (original)
+++ trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/impl/dc/rdbms/RdbmsDataConnectorTest.java Thu May  2 00:54:20 2013
@@ -17,6 +17,8 @@
 
 package net.shibboleth.idp.attribute.resolver.impl.dc.rdbms;
 
+import java.sql.Connection;
+import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Map;
 
@@ -66,8 +68,20 @@
                 throws ResolutionException {
             final AttributeRecipientContext subContext =
                     resolutionContext.getSubcontext(AttributeRecipientContext.class);
-            return new SqlStringExecutableStatement(String.format(
-                    "SELECT userid, name, homephone, mail FROM people WHERE userid='%s'", subContext.getPrincipal()));
+            return new ExecutableStatement() {
+
+                private final String query = String
+                        .format("SELECT userid, name, homephone, mail FROM people WHERE userid='%s'",
+                                subContext.getPrincipal());
+
+                @Nonnull public String getResultCacheKey() {
+                    return query;
+                }
+
+                @Nonnull public ResultSet execute(@Nonnull Connection connection) throws SQLException {
+                    return connection.createStatement().executeQuery(query);
+                }
+            };
         }
     }
 
@@ -168,17 +182,20 @@

[... 26 lines stripped ...]


More information about the commits mailing list