From: Adrian B. <ej...@us...> - 2004-07-13 14:56:18
|
User: ejort Date: 04/07/13 07:56:11 Modified: src/main/org/jboss/resource/adapter/jdbc Tag: Branch_3_2 BaseWrapperManagedConnectionFactory.java BaseWrapperManagedConnection.jpp Log: Add support for closing statements and result sets without a warning. <track-statements>nowarn</track-statements> which is also the default. Revision Changes Path No revision No revision 1.4.2.14 +72 -52 jbosscx/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnectionFactory.java Index: BaseWrapperManagedConnectionFactory.java =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jdbc/BaseWrapperManagedConnectionFactory.java,v retrieving revision 1.4.2.13 retrieving revision 1.4.2.14 diff -u -r1.4.2.13 -r1.4.2.14 --- BaseWrapperManagedConnectionFactory.java 2 Jun 2004 22:38:41 -0000 1.4.2.13 +++ BaseWrapperManagedConnectionFactory.java 13 Jul 2004 14:56:11 -0000 1.4.2.14 @@ -1,4 +1,3 @@ - /* * JBoss, the OpenSource J2EE webOS * @@ -6,10 +5,8 @@ * See terms of license at gnu.org. * */ - package org.jboss.resource.adapter.jdbc; - import java.io.PrintWriter; import java.io.Serializable; import java.sql.Connection; @@ -27,7 +24,6 @@ import javax.security.auth.Subject; import org.jboss.logging.Logger; import org.jboss.resource.JBossResourceException; - /** * BaseWrapperManagedConnectionFactory.java * @@ -37,13 +33,24 @@ * @author <a href="mailto:d_j...@us...">David Jencks</a> * @version */ - -public abstract class BaseWrapperManagedConnectionFactory - implements ManagedConnectionFactory, Serializable +public abstract class BaseWrapperManagedConnectionFactory implements ManagedConnectionFactory, Serializable { + public static final int TRACK_STATEMENTS_FALSE_INT = 0; + + public static final int TRACK_STATEMENTS_TRUE_INT = 1; + + public static final int TRACK_STATEMENTS_NOWARN_INT = 2; + + public static final String TRACK_STATEMENTS_FALSE = "false"; + + public static final String TRACK_STATEMENTS_TRUE = "true"; + + public static final String TRACK_STATEMENTS_NOWARN = "nowarn"; + protected final Logger log = Logger.getLogger(getClass()); protected String userName; + protected String password; //This is used by Local wrapper for all properties, and is left @@ -54,7 +61,9 @@ protected int transactionIsolation = -1; protected int preparedStatementCacheSize = 0; + protected boolean doQueryTimeout = false; + /** * The variable <code>newConnectionSQL</code> holds an SQL * statement which if not null is executed when a new Connection is @@ -87,14 +96,13 @@ private ExceptionSorter exceptionSorter; - private boolean trackStatements; + protected int trackStatements = TRACK_STATEMENTS_NOWARN_INT; - public BaseWrapperManagedConnectionFactory () + public BaseWrapperManagedConnectionFactory() { - } - // implementation of javax.resource.spi.ManagedConnectionFactory interface + // implementation of javax.resource.spi.ManagedConnectionFactory interface /** * * @return <description> @@ -143,7 +151,8 @@ * Get the value of userName. * @return value of userName. */ - public String getUserName() { + public String getUserName() + { return userName; } @@ -151,7 +160,8 @@ * Set the value of userName. * @param userName Value to assign to userName. */ - public void setUserName(final String userName) { + public void setUserName(final String userName) + { this.userName = userName; } @@ -159,7 +169,8 @@ * Get the value of password. * @return value of password. */ - public String getPassword() { + public String getPassword() + { return password; } @@ -167,7 +178,8 @@ * Set the value of password. * @param password Value to assign to password. */ - public void setPassword(final String password) { + public void setPassword(final String password) + { this.password = password; } @@ -175,18 +187,22 @@ { return preparedStatementCacheSize; } + public void setPreparedStatementCacheSize(int size) { preparedStatementCacheSize = size; } + public boolean getTxQueryTimeout() { return doQueryTimeout; } + public void setTxQueryTimeout(boolean qt) { doQueryTimeout = qt; } + /** * Gets the TransactionIsolation attribute of the JDBCManagedConnectionFactory * object @@ -197,24 +213,23 @@ { switch (this.transactionIsolation) { - case Connection.TRANSACTION_NONE: + case Connection.TRANSACTION_NONE : return "TRANSACTION_NONE"; - case Connection.TRANSACTION_READ_COMMITTED: + case Connection.TRANSACTION_READ_COMMITTED : return "TRANSACTION_READ_COMMITTED"; - case Connection.TRANSACTION_READ_UNCOMMITTED: + case Connection.TRANSACTION_READ_UNCOMMITTED : return "TRANSACTION_READ_UNCOMMITTED"; - case Connection.TRANSACTION_REPEATABLE_READ: + case Connection.TRANSACTION_REPEATABLE_READ : return "TRANSACTION_REPEATABLE_READ"; - case Connection.TRANSACTION_SERIALIZABLE: + case Connection.TRANSACTION_SERIALIZABLE : return "TRANSACTION_SERIALIZABLE"; - case -1: + case -1 : return "DEFAULT"; - default: + default : return Integer.toString(transactionIsolation); } } - /** * Sets the TransactionIsolation attribute of the JDBCManagedConnectionFactory * object @@ -256,7 +271,6 @@ } } - /** * Get the NewConnectionSQL value. * @return the NewConnectionSQL value. @@ -275,7 +289,6 @@ this.newConnectionSQL = newConnectionSQL; } - /** * Get the CheckValidConnectionSQL value. * @return the CheckValidConnectionSQL value. @@ -294,23 +307,33 @@ this.checkValidConnectionSQL = checkValidConnectionSQL; } - /** * Whether to track statements * @return true when tracking statements */ - public boolean getTrackStatements() + public String getTrackStatements() { - return trackStatements; + if (trackStatements == TRACK_STATEMENTS_FALSE_INT) + return TRACK_STATEMENTS_FALSE; + else if (trackStatements == TRACK_STATEMENTS_TRUE_INT) + return TRACK_STATEMENTS_TRUE; + return TRACK_STATEMENTS_NOWARN; } - /** * Set the track statements value. * @param value true to track statements. */ - public void setTrackStatements(boolean value) + public void setTrackStatements(String value) { - trackStatements = value; + if (value == null) + throw new IllegalArgumentException("Null value for trackStatements"); + String trimmed = value.trim(); + if (trimmed.equalsIgnoreCase(TRACK_STATEMENTS_FALSE)) + trackStatements = TRACK_STATEMENTS_FALSE_INT; + else if (trimmed.equalsIgnoreCase(TRACK_STATEMENTS_TRUE)) + trackStatements = TRACK_STATEMENTS_TRUE_INT; + else + trackStatements = TRACK_STATEMENTS_NOWARN_INT; } /** @@ -350,7 +373,7 @@ { validConnectionCheckerClassName = value; } - + /** * Gets full set of connection properties, i.e. whatever is provided * in config plus "user" and "password" from subject/cri. @@ -361,31 +384,29 @@ * <p>In fact, we have a problem here. Theoretically, there is a possible * name collision between config properties and "user"/"password". */ - protected Properties getConnectionProperties(Subject subject, ConnectionRequestInfo cri) - throws ResourceException + protected Properties getConnectionProperties(Subject subject, ConnectionRequestInfo cri) throws ResourceException { if (cri != null && cri.getClass() != WrappedConnectionRequestInfo.class) { throw new JBossResourceException("Wrong kind of ConnectionRequestInfo: " + cri.getClass()); } // end of if () - // NOTE: we do this because we do not have to synchronize at all on the connectionProps // AVOID GLOBAL Synchronizations. (Bill Burke) Properties props = new Properties(); props.putAll(connectionProps); if (subject != null) { - if( SubjectActions.addMatchingProperties(subject, props, this) == true ) + if (SubjectActions.addMatchingProperties(subject, props, this) == true) { return props; } throw new JBossResourceException("No matching credentials in Subject!"); } // end of if () - WrappedConnectionRequestInfo lcri = (WrappedConnectionRequestInfo)cri; + WrappedConnectionRequestInfo lcri = (WrappedConnectionRequestInfo) cri; if (lcri != null) { - props.setProperty("user", (lcri.getUserName() == null)? "": lcri.getUserName()); - props.setProperty("password", (lcri.getPassword() == null)? "": lcri.getPassword()); + props.setProperty("user", (lcri.getUserName() == null) ? "" : lcri.getUserName()); + props.setProperty("password", (lcri.getPassword() == null) ? "" : lcri.getPassword()); return props; } // end of if () if (userName != null) @@ -400,14 +421,13 @@ { if (exceptionSorter != null) return exceptionSorter.isExceptionFatal(e); - if (exceptionSorterClassName != null) { try { ClassLoader cl = Thread.currentThread().getContextClassLoader(); Class clazz = cl.loadClass(exceptionSorterClassName); - exceptionSorter = (ExceptionSorter)clazz.newInstance(); + exceptionSorter = (ExceptionSorter) clazz.newInstance(); return exceptionSorter.isExceptionFatal(e); } catch (Exception e2) @@ -427,7 +447,6 @@ // Already got a checker if (connectionChecker != null) return connectionChecker.isValidConnection(c); - // Class specified if (validConnectionCheckerClassName != null) { @@ -444,14 +463,12 @@ connectionChecker = new NullValidConnectionChecker(); } } - // SQL statement specified if (checkValidConnectionSQL != null) { connectionChecker = new CheckValidConnectionSQL(checkValidConnectionSQL); return connectionChecker.isValidConnection(c); } - // No Check return null; } @@ -459,27 +476,30 @@ static class SubjectActions implements PrivilegedAction { Subject subject; + Properties props; + ManagedConnectionFactory mcf; + SubjectActions(Subject subject, Properties props, ManagedConnectionFactory mcf) { this.subject = subject; this.props = props; this.mcf = mcf; } + public Object run() { Iterator i = subject.getPrivateCredentials().iterator(); - while( i.hasNext() ) + while (i.hasNext()) { Object o = i.next(); - if (o instanceof PasswordCredential ) + if (o instanceof PasswordCredential) { - PasswordCredential cred = (PasswordCredential)o; - if( cred.getManagedConnectionFactory().equals(mcf) ) + PasswordCredential cred = (PasswordCredential) o; + if (cred.getManagedConnectionFactory().equals(mcf)) { - props.setProperty("user", (cred.getUserName() == null) ? - "": cred.getUserName()); + props.setProperty("user", (cred.getUserName() == null) ? "" : cred.getUserName()); props.setProperty("password", new String(cred.getPassword())); return Boolean.TRUE; } @@ -487,8 +507,8 @@ } return Boolean.FALSE; } - static boolean addMatchingProperties(Subject subject, Properties props, - ManagedConnectionFactory mcf) + + static boolean addMatchingProperties(Subject subject, Properties props, ManagedConnectionFactory mcf) { SubjectActions action = new SubjectActions(subject, props, mcf); Boolean matched = (Boolean) AccessController.doPrivileged(action); 1.1.2.21 +2 -2 jbosscx/src/main/org/jboss/resource/adapter/jdbc/Attic/BaseWrapperManagedConnection.jpp Index: BaseWrapperManagedConnection.jpp =================================================================== RCS file: /cvsroot/jboss/jbosscx/src/main/org/jboss/resource/adapter/jdbc/Attic/BaseWrapperManagedConnection.jpp,v retrieving revision 1.1.2.20 retrieving revision 1.1.2.21 diff -u -r1.1.2.20 -r1.1.2.21 --- BaseWrapperManagedConnection.jpp 3 Jun 2004 01:44:57 -0000 1.1.2.20 +++ BaseWrapperManagedConnection.jpp 13 Jul 2004 14:56:11 -0000 1.1.2.21 @@ -559,9 +559,9 @@ } - boolean getTrackStatements() + int getTrackStatements() { - return mcf.getTrackStatements(); + return mcf.trackStatements; } //private methods |