proxool-cvs Mailing List for Proxool: Proxy JDBC Connection Pool (Page 10)
UNMAINTAINED!
Brought to you by:
billhorsman
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
(9) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(12) |
Feb
(17) |
Mar
(20) |
Apr
(22) |
May
(4) |
Jun
(3) |
Jul
(11) |
Aug
(23) |
Sep
(60) |
Oct
(41) |
Nov
(15) |
Dec
(29) |
2004 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(5) |
Jun
(29) |
Jul
(6) |
Aug
(1) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(8) |
Jun
|
Jul
(1) |
Aug
|
Sep
(8) |
Oct
(19) |
Nov
|
Dec
|
2006 |
Jan
(17) |
Feb
|
Mar
(5) |
Apr
(1) |
May
(2) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
2007 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
(4) |
Jun
(4) |
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(3) |
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <bil...@us...> - 2003-09-30 18:38:31
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx In directory sc8-pr-cvs1:/tmp/cvs-serv30122 Modified Files: ConnectionPoolMBean.java Log Message: New properties Index: ConnectionPoolMBean.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx/ConnectionPoolMBean.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** ConnectionPoolMBean.java 29 Sep 2003 17:48:08 -0000 1.12 --- ConnectionPoolMBean.java 30 Sep 2003 18:38:27 -0000 1.13 *************** *** 201,204 **** --- 201,210 ---- resultList.add (new Attribute (attributeNames[i], getValueOrEmpty(poolDefinition.getHouseKeepingTestSql ()))); + } else if (equalsProperty(attributeNames[i], ProxoolConstants.TEST_BEFORE_USE)) { + resultList.add (new Attribute (attributeNames[i], + new Boolean (this.poolDefinition.isTestBeforeUse ()))); + } else if (equalsProperty(attributeNames[i], ProxoolConstants.TEST_AFTER_USE)) { + resultList.add (new Attribute (attributeNames[i], + new Boolean (this.poolDefinition.isTestAfterUse ()))); } else if (equalsProperty(attributeNames[i], ProxoolConstants.MAXIMUM_ACTIVE_TIME)) { resultList.add (new Attribute (attributeNames[i], *************** *** 312,315 **** --- 318,329 ---- } resultList.add (new Attribute (name, value)); + } else if (equalsProperty(name, ProxoolConstants.TEST_BEFORE_USE)) { + checkAssignable (name, Boolean.class, value.getClass ()); + newProperties.setProperty(ProxoolConstants.TEST_BEFORE_USE_PROPERTY, value.toString()); + resultList.add (new Attribute (name, value)); + } else if (equalsProperty(name, ProxoolConstants.TEST_AFTER_USE)) { + checkAssignable (name, Boolean.class, value.getClass ()); + newProperties.setProperty(ProxoolConstants.TEST_AFTER_USE_PROPERTY, value.toString()); + resultList.add (new Attribute (name, value)); } else if (equalsProperty(name, ProxoolConstants.MAXIMUM_ACTIVE_TIME)) { setIntegerAttribute(name, ProxoolConstants.MAXIMUM_ACTIVE_TIME_PROPERTY, value, *************** *** 425,428 **** --- 439,444 ---- createProxoolAttribute (ProxoolConstants.HOUSE_KEEPING_SLEEP_TIME, Integer.class), createProxoolAttribute (ProxoolConstants.HOUSE_KEEPING_TEST_SQL, String.class), + createProxoolAttribute (ProxoolConstants.TEST_BEFORE_USE, Boolean.class), + createProxoolAttribute (ProxoolConstants.TEST_AFTER_USE, Boolean.class), createProxoolAttribute (ProxoolConstants.MAXIMUM_ACTIVE_TIME, Integer.class), createProxoolAttribute (ProxoolConstants.MAXIMUM_CONNECTION_COUNT, Integer.class), *************** *** 682,685 **** --- 698,704 ---- Revision history: $Log$ + Revision 1.13 2003/09/30 18:38:27 billhorsman + New properties + Revision 1.12 2003/09/29 17:48:08 billhorsman New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you |
From: <bil...@us...> - 2003-09-30 18:38:22
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/resources In directory sc8-pr-cvs1:/tmp/cvs-serv30088 Modified Files: attributeDescriptions.properties Log Message: New properties Index: attributeDescriptions.properties =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/resources/attributeDescriptions.properties,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** attributeDescriptions.properties 11 Sep 2003 11:18:07 -0000 1.3 --- attributeDescriptions.properties 30 Sep 2003 18:38:17 -0000 1.4 *************** *** 15,21 **** you can set it more than once and each value is checked. ! wrap-fatal-sql-exceptions=\ ! If true then if a fatal SQLException is detected then it will be wrapped up in a \ ! FatalSQLException and that will be thrown instead. Default is false. house-keeping-sleep-time=\ --- 15,25 ---- you can set it more than once and each value is checked. ! fatal-sql-exception-wrapper-class=\ ! If this is not-null then any fatal SQLException is wrapped up inside \ ! an instance of this class. If null, then the original exception is \ ! thrown. Range: any valid class name that is a subclass of SQLException or \ ! RuntimeException. Default: null (original exception is thrown) \ ! Examples: 'org.logicalcobwebs.proxool.FatalSQLException' or \ ! org.logicalcobwebs.proxool.FatalRuntimeException' house-keeping-sleep-time=\ *************** *** 28,31 **** --- 32,37 ---- with this SQL statement. It should be _very_ quick to execute. Something like checking the current date or something. \ If not defined then this test is omitted. + + test-before-use maximum-active-time=\ |
From: <bil...@us...> - 2003-09-30 07:50:09
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv28051 Modified Files: ConnectionPool.java Log Message: Smarter throwing of caught SQLExceptions without wrapping them up inside another (and losing the stack trace) Index: ConnectionPool.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ConnectionPool.java,v retrieving revision 1.68 retrieving revision 1.69 diff -C2 -d -r1.68 -r1.69 *** ConnectionPool.java 20 Sep 2003 17:04:06 -0000 1.68 --- ConnectionPool.java 30 Sep 2003 07:50:04 -0000 1.69 *************** *** 212,215 **** --- 212,218 ---- proxyConnection = PrototyperController.buildConnection( getDefinition().getAlias(), ProxyConnection.STATUS_ACTIVE, "on demand"); + } catch (SQLException e) { + log.debug("Couldn't get connection", e); + throw e; } catch (ProxoolException e) { log.debug("Couldn't get connection", e); *************** *** 1046,1049 **** --- 1049,1055 ---- Revision history: $Log$ + Revision 1.69 2003/09/30 07:50:04 billhorsman + Smarter throwing of caught SQLExceptions without wrapping them up inside another (and losing the stack trace) + Revision 1.68 2003/09/20 17:04:06 billhorsman Fix for incorrect OFFLINE count when house keeper removed a connection if the test SQL failed. This |
From: <bil...@us...> - 2003-09-29 19:48:02
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv32082 Modified Files: FatalSqlExceptionHelper.java Log Message: Doc Index: FatalSqlExceptionHelper.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/FatalSqlExceptionHelper.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FatalSqlExceptionHelper.java 29 Sep 2003 17:48:08 -0000 1.1 --- FatalSqlExceptionHelper.java 29 Sep 2003 18:12:33 -0000 1.2 *************** *** 1,2 **** --- 1,7 ---- + /* + * This software is released under a licence similar to the Apache Software Licence. + * See org.logicalcobwebs.proxool.package.html for details. + * The latest version is available at http://proxool.sourceforge.net + */ package org.logicalcobwebs.proxool; *************** *** 5,15 **** import java.sql.SQLException; ! /* ! * Copyright 2002, Findexa AS (http://www.findexa.no) ! * ! * This software is the proprietary information of Findexa AS. ! * Use is subject to license terms. ! */ ! class FatalSqlExceptionHelper { --- 10,19 ---- import java.sql.SQLException; ! /** ! * Will wrap up exceptions in another exception which can be defined at runtime. ! * @version $Revision$, $Date$ ! * @author billhorsman ! * @author $Author$ (current maintainer) ! */ class FatalSqlExceptionHelper { *************** *** 76,77 **** --- 80,89 ---- } } + + /* + Revision history: + $Log$ + Revision 1.2 2003/09/29 18:12:33 billhorsman + Doc + + */ \ No newline at end of file |
From: <bil...@us...> - 2003-09-29 17:50:59
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv27535 Modified Files: FatalSqlExceptionTest.java Log Message: Tests for new wrapper. Index: FatalSqlExceptionTest.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool/FatalSqlExceptionTest.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** FatalSqlExceptionTest.java 5 Sep 2003 16:59:20 -0000 1.3 --- FatalSqlExceptionTest.java 29 Sep 2003 17:50:45 -0000 1.4 *************** *** 83,87 **** info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, "Table not found"); info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); ! info.setProperty(ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY, "true"); info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); ProxoolFacade.registerConnectionPool(url, info); --- 83,87 ---- info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, "Table not found"); info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); ! info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY, FatalSQLException.class.getName()); info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); ProxoolFacade.registerConnectionPool(url, info); *************** *** 113,116 **** --- 113,203 ---- } + public void testWrappedFatalRuntimeException() throws Exception { + + String testName = "wrappedFatalRuntimeException"; + String alias = testName; + + String url = TestHelper.buildProxoolUrl(alias, + TestConstants.HYPERSONIC_DRIVER, + TestConstants.HYPERSONIC_TEST_URL); + Properties info = new Properties(); + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, "Table not found"); + info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY, FatalRuntimeException.class.getName()); + info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); + ProxoolFacade.registerConnectionPool(url, info); + + Connection c = null; + try { + c = DriverManager.getConnection(url); + Statement s = c.createStatement(); + s.execute("drop table Z"); + } catch (RuntimeException e) { + assertTrue("Expected a " + FatalRuntimeException.class.getName() + " but got a " + e.getClass().getName() + " instead", e instanceof FatalRuntimeException); + // Expected exception (foo doesn't exist) + LOG.debug("Expected exception (safe to ignore)", e); + } + + try { + if (c != null) { + c.close(); + } + } catch (SQLException e) { + LOG.debug("Couldn't close connection", e); + } + + Thread.sleep(1000); + + // Proxool should automatically throw away that connection that caused a fatal sql exception + assertEquals("availableConnectionCount", 0L, ProxoolFacade.getSnapshot(alias, false).getAvailableConnectionCount()); + + } + + public void testFatalSqlExceptionWrapperNotFound() throws Exception { + + String testName = "fatalSqlExceptionWrapperNotFound"; + String alias = testName; + + String url = TestHelper.buildProxoolUrl(alias, + TestConstants.HYPERSONIC_DRIVER, + TestConstants.HYPERSONIC_TEST_URL); + Properties info = new Properties(); + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, "Table not found"); + info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY, "org.does.not.Exist"); + info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); + try { + ProxoolFacade.registerConnectionPool(url, info); + fail("Registration was expected to have failed"); + } catch (ProxoolException e) { + LOG.debug("Expected exception", e); + // That's OK. We're expecting one of these + } + + } + + public void testFatalSqlExceptionWrapperInvalid() throws Exception { + + String testName = "fatalSqlExceptionWrapperInvalid"; + String alias = testName; + + String url = TestHelper.buildProxoolUrl(alias, + TestConstants.HYPERSONIC_DRIVER, + TestConstants.HYPERSONIC_TEST_URL); + Properties info = new Properties(); + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, "Table not found"); + info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); + // ProxoolException isn't a RuntimeException or an SQLException + info.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY, ProxoolException.class.getName()); + info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); + try { + ProxoolFacade.registerConnectionPool(url, info); + fail("Registration was expected to have failed"); + } catch (ProxoolException e) { + LOG.debug("Expected exception", e); + // That's OK. We're expecting one of these + } + + } } *************** *** 119,122 **** --- 206,212 ---- Revision history: $Log$ + Revision 1.4 2003/09/29 17:50:45 billhorsman + Tests for new wrapper. + Revision 1.3 2003/09/05 16:59:20 billhorsman Tests for wrapped exceptions. |
From: <bil...@us...> - 2003-09-29 17:49:34
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/servlet In directory sc8-pr-cvs1:/tmp/cvs-serv27315 Modified Files: AdminServlet.java Log Message: Includes new fatal-sql-exception-wrapper-class in display Index: AdminServlet.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/servlet/AdminServlet.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** AdminServlet.java 6 Aug 2003 20:08:58 -0000 1.7 --- AdminServlet.java 29 Sep 2003 17:49:19 -0000 1.8 *************** *** 251,254 **** --- 251,255 ---- } printDefinitionEntry(out, "Fatal SQL exceptions", fatalSqlExceptions); + printDefinitionEntry(out, "Wrapper", cpd.getFatalSqlExceptionWrapper()); // statistics *************** *** 569,572 **** --- 570,576 ---- Revision history: $Log$ + Revision 1.8 2003/09/29 17:49:19 billhorsman + Includes new fatal-sql-exception-wrapper-class in display + Revision 1.7 2003/08/06 20:08:58 billhorsman fix timezone display of time (for millisecond based properties) |
From: <bil...@us...> - 2003-09-29 17:49:02
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv27214 Modified Files: ProxyStatement.java Log Message: New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you can make it a RuntimeException if you need to. Index: ProxyStatement.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ProxyStatement.java,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ProxyStatement.java 10 Sep 2003 22:21:04 -0000 1.20 --- ProxyStatement.java 29 Sep 2003 17:48:49 -0000 1.21 *************** *** 84,90 **** if (testException(sqlException)) { // This is really a fatal one ! if (getConnectionPool().getDefinition().isWrapFatalSqlExceptions()) { ! throw new FatalSQLException(sqlException); ! } } } --- 84,88 ---- if (testException(sqlException)) { // This is really a fatal one ! FatalSqlExceptionHelper.throwFatalSQLException(getConnectionPool().getDefinition().getFatalSqlExceptionWrapper(), sqlException); } } *************** *** 96,102 **** if (testException(sqlException)) { // This is really a fatal one ! if (getConnectionPool().getDefinition().isWrapFatalSqlExceptions()) { ! throw new FatalSQLException(sqlException); ! } } } --- 94,98 ---- if (testException(sqlException)) { // This is really a fatal one ! FatalSqlExceptionHelper.throwFatalSQLException(getConnectionPool().getDefinition().getFatalSqlExceptionWrapper(), sqlException); } } *************** *** 123,126 **** --- 119,126 ---- Revision history: $Log$ + Revision 1.21 2003/09/29 17:48:49 billhorsman + New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you + can make it a RuntimeException if you need to. + Revision 1.20 2003/09/10 22:21:04 chr32 Removing > jdk 1.2 dependencies. |
From: <bil...@us...> - 2003-09-29 17:48:35
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv27123 Modified Files: ProxoolConstants.java Log Message: New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you can make it a RuntimeException if you need to. Index: ProxoolConstants.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ProxoolConstants.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ProxoolConstants.java 5 Sep 2003 17:00:42 -0000 1.17 --- ProxoolConstants.java 29 Sep 2003 17:48:21 -0000 1.18 *************** *** 143,151 **** public final String FATAL_SQL_EXCEPTION_PROPERTY = PROPERTY_PREFIX + FATAL_SQL_EXCEPTION; ! /** @see #WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY**/ ! public final String WRAP_FATAL_SQL_EXCEPTIONS = "wrap-fatal-sql-exceptions"; /** @see ProxoolDriver#getPropertyInfo */ ! public final String WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY = PROPERTY_PREFIX + WRAP_FATAL_SQL_EXCEPTIONS; public static final String STATISTICS = "statistics"; --- 143,151 ---- public final String FATAL_SQL_EXCEPTION_PROPERTY = PROPERTY_PREFIX + FATAL_SQL_EXCEPTION; ! /** @see #FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY**/ ! public final String FATAL_SQL_EXCEPTION_WRAPPER_CLASS = "fatal-sql-exception-wrapper-class"; /** @see ProxoolDriver#getPropertyInfo */ ! public final String FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY = PROPERTY_PREFIX + FATAL_SQL_EXCEPTION_WRAPPER_CLASS; public static final String STATISTICS = "statistics"; *************** *** 253,256 **** --- 253,260 ---- Revision history: $Log$ + Revision 1.18 2003/09/29 17:48:21 billhorsman + New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you + can make it a RuntimeException if you need to. + Revision 1.17 2003/09/05 17:00:42 billhorsman New wrap-fatal-sql-exceptions property. |
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv27085 Modified Files: ConnectionPoolDefinition.java ConnectionPoolDefinitionIF.java Added Files: FatalRuntimeException.java FatalSqlExceptionHelper.java Log Message: New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you can make it a RuntimeException if you need to. --- NEW FILE: FatalRuntimeException.java --- /* * This software is released under the Apache Software Licence. See * package.html for details. The latest version is available at * http://proxool.sourceforge.net */ package org.logicalcobwebs.proxool; /** * A type of SQLException that has been defined as fatal. It contains * the {@link #getCause original} plain Exception * just in case you need it. * @version $Revision: 1.1 $, $Date: 2003/09/29 17:48:08 $ * @author billhorsman * @author $Author: billhorsman $ (current maintainer) * @see ConnectionPoolDefinitionIF#getFatalSqlExceptions */ public class FatalRuntimeException extends RuntimeException { /** * @see #getCause */ private Exception cause; public FatalRuntimeException(Exception cause) { super(cause.getMessage()); this.cause = cause; } /** * @see Throwable#getCause */ public Throwable getCause() { return cause; } } --- NEW FILE: FatalSqlExceptionHelper.java --- package org.logicalcobwebs.proxool; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.sql.SQLException; /* * Copyright 2002, Findexa AS (http://www.findexa.no) * * This software is the proprietary information of Findexa AS. * Use is subject to license terms. */ class FatalSqlExceptionHelper { /** * Throws a wrapped SQLException if a wrapper is defined * @param className the classname of the wrapping exception (must be either a RuntimeException or * an SQLException). If null, then the original exception is rethrown. * @param originalException the orginal exception * @throws ProxoolException if there is an unexpected error with wrapping the exception * @throws SQLException either the original exception, or a wrapped version of it * @throws RuntimeException a wrapped up version of the orginal */ protected static void throwFatalSQLException(String className, SQLException originalException) throws ProxoolException, SQLException, RuntimeException { if (className != null && className.trim().length() > 0) { Class clazz = null; try { clazz = Class.forName(className); } catch (ClassNotFoundException e) { throw new ProxoolException("Couldn't find class " + className); } if (SQLException.class.isAssignableFrom(clazz)) { // That's OK } else if (RuntimeException.class.isAssignableFrom(clazz)) { // That's OK } else { throw new ProxoolException("Couldn't wrap up using " + clazz.getName() + " because it isn't either a RuntimeException or an SQLException"); } Constructor toUse = null; Object[] args = null; String argDescription = ""; Constructor[] constructors = clazz.getConstructors(); for (int i = 0; i < constructors.length; i++) { Constructor constructor = constructors[i]; Class[] parameterTypes = constructor.getParameterTypes(); if (toUse == null && parameterTypes.length == 0) { toUse = constructor; } if (parameterTypes.length == 1 && Exception.class.isAssignableFrom(parameterTypes[0])) { toUse = constructor; args = new Object[]{originalException}; argDescription = "Exception"; break; } } try { Object exceptionToThrow = toUse.newInstance(args); if (exceptionToThrow instanceof RuntimeException) { throw (RuntimeException) exceptionToThrow; } else if (exceptionToThrow instanceof SQLException) { throw (SQLException) exceptionToThrow; } else { throw new ProxoolException("Couldn't throw " + clazz.getName() + " because it isn't either a RuntimeException or an SQLException"); } } catch (InstantiationException e) { throw new ProxoolException("Couldn't create " + clazz.getName() + "(" + argDescription + ")", e); } catch (IllegalAccessException e) { throw new ProxoolException("Couldn't create " + clazz.getName() + "(" + argDescription + ")", e); } catch (InvocationTargetException e) { throw new ProxoolException("Couldn't create " + clazz.getName() + "(" + argDescription + ")", e); } } else { throw originalException; } } } Index: ConnectionPoolDefinition.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ConnectionPoolDefinition.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** ConnectionPoolDefinition.java 5 Sep 2003 16:59:42 -0000 1.22 --- ConnectionPoolDefinition.java 29 Sep 2003 17:48:08 -0000 1.23 *************** *** 105,109 **** private String fatalSqlExceptionsAsString; ! private boolean wrapFatalSqlExceptions = false; private String houseKeepingTestSql; --- 105,109 ---- private String fatalSqlExceptionsAsString; ! private String fatalSqlExceptionWrapper = null; private String houseKeepingTestSql; *************** *** 363,372 **** } } ! } else if (key.equals(ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY)) { ! final boolean valueAsBoolean = Boolean.valueOf(value).booleanValue(); ! if (valueAsBoolean != wrapFatalSqlExceptions) { changed = true; if (!pretend) { ! setWrapFatalSqlExceptions(valueAsBoolean); } } --- 363,371 ---- } } ! } else if (key.equals(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY)) { ! if (isChanged(fatalSqlExceptionWrapper, value)) { changed = true; if (!pretend) { ! setFatalSqlExceptionWrapper(value); } } *************** *** 407,411 **** * @see #setAnyProperty */ ! private boolean setLoggingProperty(String key, String value, boolean pretend) throws ProxoolException { boolean changed = false; if (key.equals(ProxoolConstants.DEBUG_LEVEL_PROPERTY)) { --- 406,410 ---- * @see #setAnyProperty */ ! private boolean setLoggingProperty(String key, String value, boolean pretend) { boolean changed = false; if (key.equals(ProxoolConstants.DEBUG_LEVEL_PROPERTY)) { *************** *** 451,455 **** * @see #setAnyProperty */ ! private boolean setJndiProperty(String key, String value, boolean pretend) throws ProxoolException { boolean changed = false; if (key.equals(ProxoolConstants.JNDI_NAME_PROPERTY)) { --- 450,454 ---- * @see #setAnyProperty */ ! private boolean setJndiProperty(String key, String value, boolean pretend) { boolean changed = false; if (key.equals(ProxoolConstants.JNDI_NAME_PROPERTY)) { *************** *** 910,924 **** /** ! * @see ConnectionPoolDefinitionIF#isWrapFatalSqlExceptions */ ! public boolean isWrapFatalSqlExceptions() { ! return wrapFatalSqlExceptions; } /** ! * @see ConnectionPoolDefinitionIF#isWrapFatalSqlExceptions */ ! public void setWrapFatalSqlExceptions(boolean wrapFatalSqlExceptions) { ! this.wrapFatalSqlExceptions = wrapFatalSqlExceptions; } --- 909,933 ---- /** ! * @see ConnectionPoolDefinitionIF#getFatalSqlExceptionWrapper */ ! public String getFatalSqlExceptionWrapper() { ! return fatalSqlExceptionWrapper; } /** ! * @see ConnectionPoolDefinitionIF#getFatalSqlExceptionWrapper */ ! public void setFatalSqlExceptionWrapper(String fatalSqlExceptionWrapper) throws ProxoolException { ! ! // Test it out. That's the best way. ! try { ! FatalSqlExceptionHelper.throwFatalSQLException(fatalSqlExceptionWrapper, new SQLException("Test")); ! } catch (SQLException e) { ! // That's OK, we were expecting one of these ! } catch (RuntimeException e) { ! // That's OK, we were expecting one of these ! } ! ! this.fatalSqlExceptionWrapper = fatalSqlExceptionWrapper; } *************** *** 1055,1058 **** --- 1064,1071 ---- Revision history: $Log$ + Revision 1.23 2003/09/29 17:48:08 billhorsman + New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you + can make it a RuntimeException if you need to. + Revision 1.22 2003/09/05 16:59:42 billhorsman Added wrap-fatal-sql-exceptions property Index: ConnectionPoolDefinitionIF.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ConnectionPoolDefinitionIF.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** ConnectionPoolDefinitionIF.java 5 Sep 2003 16:59:42 -0000 1.18 --- ConnectionPoolDefinitionIF.java 29 Sep 2003 17:48:08 -0000 1.19 *************** *** 229,239 **** /** ! * If true then if a fatal SQLException is detected then it will be wrapped up ! * in a {@link FatalSQLException} and that will be thrown instead. ! * Range: true, false ! * Default: false (original exception is thrown) ! * @return whether fatal SQLExceptions are wrapped up */ ! boolean isWrapFatalSqlExceptions(); /** --- 229,240 ---- /** ! * If this is not-null then any fatal SQLException is wrapped up inside ! * an instance of this class. If null, then the original exception is ! * thrown. ! * Range: any valid class name that is a subclass of SQLException or RuntimeException ! * Default: null (original exception is thrown) ! * @return the class name to use for fatal SQL exceptions */ ! String getFatalSqlExceptionWrapper(); /** *************** *** 278,281 **** --- 279,286 ---- Revision history: $Log$ + Revision 1.19 2003/09/29 17:48:08 billhorsman + New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you + can make it a RuntimeException if you need to. + Revision 1.18 2003/09/05 16:59:42 billhorsman Added wrap-fatal-sql-exceptions property |
From: <bil...@us...> - 2003-09-29 17:48:22
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx In directory sc8-pr-cvs1:/tmp/cvs-serv27085/admin/jmx Modified Files: ConnectionPoolMBean.java Log Message: New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you can make it a RuntimeException if you need to. Index: ConnectionPoolMBean.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx/ConnectionPoolMBean.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** ConnectionPoolMBean.java 14 Sep 2003 21:29:31 -0000 1.11 --- ConnectionPoolMBean.java 29 Sep 2003 17:48:08 -0000 1.12 *************** *** 240,246 **** resultList.add (new Attribute (attributeNames[i], new Boolean (this.poolDefinition.isVerbose ()))); ! } else if (equalsProperty(attributeNames[i], ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS)) { resultList.add (new Attribute (attributeNames[i], ! new Boolean (this.poolDefinition.isWrapFatalSqlExceptions ()))); } else { final String message = "Unknown attribute: " + attributeNames[i]; --- 240,246 ---- resultList.add (new Attribute (attributeNames[i], new Boolean (this.poolDefinition.isVerbose ()))); ! } else if (equalsProperty(attributeNames[i], ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS)) { resultList.add (new Attribute (attributeNames[i], ! this.poolDefinition.getFatalSqlExceptionWrapper())); } else { final String message = "Unknown attribute: " + attributeNames[i]; *************** *** 365,371 **** newProperties.setProperty(ProxoolConstants.VERBOSE_PROPERTY, value.toString()); resultList.add (new Attribute (name, value)); ! } else if (equalsProperty(name, ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS)) { checkAssignable (name, Boolean.class, value.getClass ()); ! newProperties.setProperty(ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY, value.toString()); resultList.add (new Attribute (name, value)); } else { --- 365,371 ---- newProperties.setProperty(ProxoolConstants.VERBOSE_PROPERTY, value.toString()); resultList.add (new Attribute (name, value)); ! } else if (equalsProperty(name, ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS)) { checkAssignable (name, Boolean.class, value.getClass ()); ! newProperties.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS_PROPERTY, value.toString()); resultList.add (new Attribute (name, value)); } else { *************** *** 437,441 **** createProxoolAttribute (ProxoolConstants.TRACE, Boolean.class), createProxoolAttribute (ProxoolConstants.VERBOSE, Boolean.class), ! createProxoolAttribute (ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS, Boolean.class), }; --- 437,441 ---- createProxoolAttribute (ProxoolConstants.TRACE, Boolean.class), createProxoolAttribute (ProxoolConstants.VERBOSE, Boolean.class), ! createProxoolAttribute (ProxoolConstants.FATAL_SQL_EXCEPTION_WRAPPER_CLASS, String.class), }; *************** *** 682,685 **** --- 682,689 ---- Revision history: $Log$ + Revision 1.12 2003/09/29 17:48:08 billhorsman + New fatal-sql-exception-wrapper-class allows you to define what exception is used as a wrapper. This means that you + can make it a RuntimeException if you need to. + Revision 1.11 2003/09/14 21:29:31 chr32 Added support for wrap-fatal-sql-exceptions,statistics and statistics-log-level properties. |
Update of /cvsroot/proxool/proxool/lib In directory sc8-pr-cvs1:/tmp/cvs-serv26584/lib Added Files: commons-collections.jar commons-lang.jar commons-logging.jar dom4j.jar hibernate2.jar xalan.jar xml-apis.jar Log Message: libraries for Hibernate tests --- NEW FILE: commons-collections.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: commons-lang.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: dom4j.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: hibernate2.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: xalan.jar --- (This appears to be a binary file; contents omitted.) --- NEW FILE: xml-apis.jar --- (This appears to be a binary file; contents omitted.) |
From: <bil...@us...> - 2003-09-28 11:20:45
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv3580 Added Files: HibernateTest.java Log Message: New unit test for Hibernate. --- NEW FILE: HibernateTest.java --- /* * This software is released under a licence similar to the Apache Software Licence. * See org.logicalcobwebs.proxool.package.html for details. * The latest version is available at http://proxool.sourceforge.net */ package org.logicalcobwebs.proxool; import net.sf.hibernate.HibernateException; import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cfg.Configuration; import net.sf.hibernate.cfg.Environment; import org.logicalcobwebs.logging.Log; import org.logicalcobwebs.logging.LogFactory; import java.sql.Connection; import java.util.Properties; /** * Tests that we are able to get a connection from * <a href="http://www.hibernate.org">Hibernate</a>. * (Code contributed by Mark Eagle) * @version $Revision: 1.1 $, $Date: 2003/09/28 09:38:30 $ * @author Bill Horsman {bi...@lo...) * @author $Author: billhorsman $ (current maintainer) */ public class HibernateTest extends AbstractProxoolTest { private static final Log LOG = LogFactory.getLog(HibernateTest.class); public HibernateTest(String alias) { super(alias); } /** * Can we get a connection straight from Hibernate? We register the pool first * and theb ask for Hibernate for it. * @throws ProxoolException if there was a Proxool problem * @throws HibernateException if there was a Hibernate problem */ public void testSimpleHibernateConnection() throws HibernateException, ProxoolException { String testName = "simpleHibernateConnection"; String alias = testName; String url = TestHelper.buildProxoolUrl(alias, TestConstants.HYPERSONIC_DRIVER, TestConstants.HYPERSONIC_TEST_URL); Properties info = new Properties(); info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); info.setProperty(ProxoolConstants.VERBOSE_PROPERTY, "true"); ProxoolFacade.registerConnectionPool(url, info); Configuration configuration = null; SessionFactory sessionFactory = null; Session session = null; Properties hibernateProperties = new Properties(); Connection connection = null; try { hibernateProperties.setProperty(Environment.DRIVER, ProxoolDriver.class.getName()); hibernateProperties.setProperty(Environment.URL, url); configuration = new Configuration().addProperties(hibernateProperties); // create a session object to the database sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); assertNotNull("Expected a session", session); // Inspect the assigned connection to the session from // the pool. connection = session.connection(); // assert that the connection is not null assertNotNull("Expected a connection", connection); } finally { try { connection.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } // close the session which will also close it's assigned connection try { session.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } } try { Thread.sleep(2000); } catch (InterruptedException e) { LOG.debug("Woken up", e); } // We just need to test that we served at least one connection. I suspect that // Hibernate is doing its own house keeping and getting at least an additional // one. assertTrue("servedCount", ProxoolFacade.getSnapshot(alias).getServedCount() > 0); // They should definitely all be returned to the pool once we're finished though assertEquals("activeCount", 0, ProxoolFacade.getSnapshot(alias).getActiveConnectionCount()); } /** * Can we get a connection from a Proxool pool that we have already registered? We * ask Hibernate to lookup the pool by its alias. * @throws ProxoolException if there was a Proxool problem * @throws HibernateException if there was a Hibernate problem */ public void testDirectHibernateConnection() throws HibernateException, ProxoolException { String testName = "directHibernateConnection"; String alias = testName; String url = TestHelper.buildProxoolUrl(alias, TestConstants.HYPERSONIC_DRIVER, TestConstants.HYPERSONIC_TEST_URL); Properties info = new Properties(); info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); ProxoolFacade.registerConnectionPool(url, info); Configuration configuration = null; SessionFactory sessionFactory = null; Session session = null; Properties hibernateProperties = new Properties(); Connection connection = null; try { hibernateProperties.setProperty(Environment.PROXOOL_EXISTING_POOL, "true"); hibernateProperties.setProperty(Environment.PROXOOL_POOL_ALIAS, alias); configuration = new Configuration().addProperties(hibernateProperties); // create a session object to the database sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); assertNotNull("Expected a session", session); // Inspect the assigned connection to the session from // the pool. connection = session.connection(); // assert that the connection is not null assertNotNull("Expected a connection", connection); } finally { try { connection.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } // close the session which will also close it's assigned connection try { session.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } } // We just need to test that we served at least one connection. I suspect that // Hibernate is doing its own house keeping and getting at least an additional // one. assertTrue("servedCount", ProxoolFacade.getSnapshot(alias).getServedCount() > 0); // They should definitely all be returned to the pool once we're finished though assertEquals("activeCount", 0, ProxoolFacade.getSnapshot(alias).getActiveConnectionCount()); } /** * Can we get a connection from a pool configured by Hibernate * @throws ProxoolException if there was a Proxool problem * @throws HibernateException if there was a Hibernate problem */ public void testHibernateConfiguredConnection() throws HibernateException, ProxoolException { String testName = "hibernateConfiguredConnection"; String alias = testName; Configuration configuration = null; SessionFactory sessionFactory = null; Session session = null; Properties hibernateProperties = new Properties(); Connection connection = null; try { hibernateProperties.setProperty(Environment.PROXOOL_XML, "src/java-test/org/logicalcobwebs/proxool/hibernate.xml"); hibernateProperties.setProperty(Environment.PROXOOL_POOL_ALIAS, alias); configuration = new Configuration().addProperties(hibernateProperties); // create a session object to the database sessionFactory = configuration.buildSessionFactory(); session = sessionFactory.openSession(); assertNotNull("Expected a session", session); // Inspect the assigned connection to the session from // the pool. connection = session.connection(); assertNotNull("Expected a connection", connection); } finally { try { connection.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } // close the session which will also close it's assigned connection try { session.close(); } catch (Exception e) { LOG.error("Problem closing Hibernate session", e); } } // We just need to test that we served at least one connection. I suspect that // Hibernate is doing its own house keeping and getting at least an additional // one. assertTrue("servedCount", ProxoolFacade.getSnapshot(alias).getServedCount() > 0); // They should definitely all be returned to the pool once we're finished though assertEquals("activeCount", 0, ProxoolFacade.getSnapshot(alias).getActiveConnectionCount()); } } /* Revision history: $Log: HibernateTest.java,v $ Revision 1.1 2003/09/28 09:38:30 billhorsman New unit test for Hibernate. */ |
From: <bil...@us...> - 2003-09-28 10:25:46
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv3595 Modified Files: AllTests.java Log Message: New unit test for Hibernate. Index: AllTests.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool/AllTests.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** AllTests.java 27 Apr 2003 22:11:34 -0000 1.21 --- AllTests.java 28 Sep 2003 09:38:39 -0000 1.22 *************** *** 42,45 **** --- 42,46 ---- suite.addTestSuite(StateListenerTest.class); suite.addTestSuite(UpdateDefinitionTest.class); + suite.addTestSuite(HibernateTest.class); // TODO Need more investigation into why this fails sometimes. // suite.addTestSuite(PerformanceTest.class); *************** *** 60,63 **** --- 61,67 ---- Revision history: $Log$ + Revision 1.22 2003/09/28 09:38:39 billhorsman + New unit test for Hibernate. + Revision 1.21 2003/04/27 22:11:34 billhorsman temporary removal of PerformanceTest |
From: <bil...@us...> - 2003-09-28 10:16:47
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv2500 Added Files: hibernate.xml Log Message: XML for HibernateTest --- NEW FILE: hibernate.xml --- <?xml version="1.0"?> <!-- This is used by HibernateTest.testHibernateConfiguredConnection to see whether Hibernate can configure the Proxool pool itself. --> <proxool> <alias>hibernateConfiguredConnection</alias> <driver-class>org.hsqldb.jdbcDriver</driver-class> <driver-url>jdbc:hsqldb:test</driver-url> <driver-properties> <property name="user" value="sa"/> </driver-properties> </proxool> |
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/concurrent In directory sc8-pr-cvs1:/tmp/cvs-serv13009/src/java/org/logicalcobwebs/concurrent Removed Files: Barrier.java BoundedBuffer.java BoundedLinkedQueue.java BoundedPriorityQueue.java BrokenBarrierException.java ClockDaemon.java ConcurrentHashMap.java ConcurrentReaderHashMap.java CondVar.java CopyOnWriteArrayList.java CopyOnWriteArraySet.java CountDown.java CyclicBarrier.java DirectExecutor.java FIFOReadWriteLock.java FIFOSemaphore.java Heap.java Latch.java LayeredSync.java LockedExecutor.java Mutex.java NullSync.java ObservableSync.java PooledExecutor.java PrioritySemaphore.java PropertyChangeMulticaster.java QueuedExecutor.java QueuedSemaphore.java ReentrantLock.java ReentrantWriterPreferenceReadWriteLock.java Rendezvous.java Semaphore.java SemaphoreControlledChannel.java Slot.java SyncCollection.java SyncList.java SyncMap.java SyncSet.java SyncSortedMap.java SyncSortedSet.java SynchronizedBoolean.java SynchronizedByte.java SynchronizedChar.java SynchronizedDouble.java SynchronizedFloat.java SynchronizedLong.java SynchronizedRef.java SynchronizedShort.java SynchronousChannel.java ThreadFactory.java ThreadFactoryUser.java ThreadedExecutor.java TimedCallable.java TimeoutSync.java VetoableChangeMulticaster.java WaitFreeQueue.java WaitableBoolean.java WaitableByte.java WaitableChar.java WaitableDouble.java WaitableFloat.java WaitableInt.java WaitableLong.java WaitableRef.java WaitableShort.java WaiterPreferenceSemaphore.java Log Message: Removed unnecessary concurrent code --- Barrier.java DELETED --- --- BoundedBuffer.java DELETED --- --- BoundedLinkedQueue.java DELETED --- --- BoundedPriorityQueue.java DELETED --- --- BrokenBarrierException.java DELETED --- --- ClockDaemon.java DELETED --- --- ConcurrentHashMap.java DELETED --- --- ConcurrentReaderHashMap.java DELETED --- --- CondVar.java DELETED --- --- CopyOnWriteArrayList.java DELETED --- --- CopyOnWriteArraySet.java DELETED --- --- CountDown.java DELETED --- --- CyclicBarrier.java DELETED --- --- DirectExecutor.java DELETED --- --- FIFOReadWriteLock.java DELETED --- --- FIFOSemaphore.java DELETED --- --- Heap.java DELETED --- --- Latch.java DELETED --- --- LayeredSync.java DELETED --- --- LockedExecutor.java DELETED --- --- Mutex.java DELETED --- --- NullSync.java DELETED --- --- ObservableSync.java DELETED --- --- PooledExecutor.java DELETED --- --- PrioritySemaphore.java DELETED --- --- PropertyChangeMulticaster.java DELETED --- --- QueuedExecutor.java DELETED --- --- QueuedSemaphore.java DELETED --- --- ReentrantLock.java DELETED --- --- ReentrantWriterPreferenceReadWriteLock.java DELETED --- --- Rendezvous.java DELETED --- --- Semaphore.java DELETED --- --- SemaphoreControlledChannel.java DELETED --- --- Slot.java DELETED --- --- SyncCollection.java DELETED --- --- SyncList.java DELETED --- --- SyncMap.java DELETED --- --- SyncSet.java DELETED --- --- SyncSortedMap.java DELETED --- --- SyncSortedSet.java DELETED --- --- SynchronizedBoolean.java DELETED --- --- SynchronizedByte.java DELETED --- --- SynchronizedChar.java DELETED --- --- SynchronizedDouble.java DELETED --- --- SynchronizedFloat.java DELETED --- --- SynchronizedLong.java DELETED --- --- SynchronizedRef.java DELETED --- --- SynchronizedShort.java DELETED --- --- SynchronousChannel.java DELETED --- --- ThreadFactory.java DELETED --- --- ThreadFactoryUser.java DELETED --- --- ThreadedExecutor.java DELETED --- --- TimedCallable.java DELETED --- --- TimeoutSync.java DELETED --- --- VetoableChangeMulticaster.java DELETED --- --- WaitFreeQueue.java DELETED --- --- WaitableBoolean.java DELETED --- --- WaitableByte.java DELETED --- --- WaitableChar.java DELETED --- --- WaitableDouble.java DELETED --- --- WaitableFloat.java DELETED --- --- WaitableInt.java DELETED --- --- WaitableLong.java DELETED --- --- WaitableRef.java DELETED --- --- WaitableShort.java DELETED --- --- WaiterPreferenceSemaphore.java DELETED --- |
From: <bil...@us...> - 2003-09-20 17:04:16
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv8998 Modified Files: ConnectionPool.java Log Message: Fix for incorrect OFFLINE count when house keeper removed a connection if the test SQL failed. This meant that the offline count went negative. The only consequence of that is that the logs look funny. Index: ConnectionPool.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/ConnectionPool.java,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** ConnectionPool.java 30 Aug 2003 14:54:04 -0000 1.67 --- ConnectionPool.java 20 Sep 2003 17:04:06 -0000 1.68 *************** *** 340,344 **** if (forceExpiry || proxyConnection.isNull()) { ! proxyConnection.setStatus(ProxyConnectionIF.STATUS_OFFLINE); /* Run some code everytime we destroy a connection */ --- 340,344 ---- if (forceExpiry || proxyConnection.isNull()) { ! proxyConnection.setStatus(ProxyConnectionIF.STATUS_NULL); /* Run some code everytime we destroy a connection */ *************** *** 358,362 **** try { - proxyConnection.setStatus(ProxyConnectionIF.STATUS_NULL); // If we're shutting down then getting a write lock will cause a deadlock if (isConnectionPoolUp()) { --- 358,361 ---- *************** *** 1047,1050 **** --- 1046,1053 ---- Revision history: $Log$ + Revision 1.68 2003/09/20 17:04:06 billhorsman + Fix for incorrect OFFLINE count when house keeper removed a connection if the test SQL failed. This + meant that the offline count went negative. The only consequence of that is that the logs look funny. + Revision 1.67 2003/08/30 14:54:04 billhorsman Checkstyle |
From: <ch...@us...> - 2003-09-14 21:29:35
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx In directory sc8-pr-cvs1:/tmp/cvs-serv31550 Modified Files: ConnectionPoolMBean.java Log Message: Added support for wrap-fatal-sql-exceptions,statistics and statistics-log-level properties. Index: ConnectionPoolMBean.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/admin/jmx/ConnectionPoolMBean.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ConnectionPoolMBean.java 10 Sep 2003 22:21:04 -0000 1.10 --- ConnectionPoolMBean.java 14 Sep 2003 21:29:31 -0000 1.11 *************** *** 228,231 **** --- 228,237 ---- resultList.add (new Attribute (attributeNames[i], new Integer (this.poolDefinition.getRecentlyStartedThreshold ()))); + } else if (equalsProperty(attributeNames[i], ProxoolConstants.STATISTICS)) { + resultList.add (new Attribute (attributeNames[i], + getValueOrEmpty(this.poolDefinition.getStatistics ()))); + } else if (equalsProperty(attributeNames[i], ProxoolConstants.STATISTICS_LOG_LEVEL)) { + resultList.add (new Attribute (attributeNames[i], + getValueOrEmpty(this.poolDefinition.getStatisticsLogLevel ()))); } else if (equalsProperty(attributeNames[i], ProxoolConstants.TRACE)) { resultList.add (new Attribute (attributeNames[i], *************** *** 234,237 **** --- 240,246 ---- resultList.add (new Attribute (attributeNames[i], new Boolean (this.poolDefinition.isVerbose ()))); + } else if (equalsProperty(attributeNames[i], ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS)) { + resultList.add (new Attribute (attributeNames[i], + new Boolean (this.poolDefinition.isWrapFatalSqlExceptions ()))); } else { final String message = "Unknown attribute: " + attributeNames[i]; *************** *** 280,283 **** --- 289,294 ---- if (notEmpty(value.toString())) { newProperties.setProperty(ProxoolConstants.DRIVER_URL_PROPERTY, value.toString()); + } else { + newProperties.remove(ProxoolConstants.DRIVER_URL_PROPERTY); } resultList.add (new Attribute (name, value)); *************** *** 286,289 **** --- 297,302 ---- if (notEmpty(value.toString())) { newProperties.setProperty(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY, value.toString()); + } else { + newProperties.remove(ProxoolConstants.FATAL_SQL_EXCEPTION_PROPERTY); } resultList.add (new Attribute (name, value)); *************** *** 295,298 **** --- 308,313 ---- if (notEmpty(value.toString())) { newProperties.setProperty(ProxoolConstants.HOUSE_KEEPING_TEST_SQL_PROPERTY, value.toString()); + } else { + newProperties.remove(ProxoolConstants.HOUSE_KEEPING_TEST_SQL_PROPERTY); } resultList.add (new Attribute (name, value)); *************** *** 326,329 **** --- 341,360 ---- setIntegerAttribute(name, ProxoolConstants.RECENTLY_STARTED_THRESHOLD_PROPERTY, value, ConnectionPoolDefinitionIF.DEFAULT_RECENTLY_STARTED_THRESHOLD, newProperties, resultList); + } else if (equalsProperty(name, ProxoolConstants.STATISTICS)) { + checkAssignable (name, String.class, value.getClass ()); + if (notEmpty(value.toString())) { + newProperties.setProperty(ProxoolConstants.STATISTICS_PROPERTY, value.toString()); + } else { + newProperties.remove(ProxoolConstants.STATISTICS_PROPERTY); + } + resultList.add (new Attribute (name, value)); + } else if (equalsProperty(name, ProxoolConstants.STATISTICS_LOG_LEVEL)) { + checkAssignable (name, String.class, value.getClass ()); + if (notEmpty(value.toString())) { + newProperties.setProperty(ProxoolConstants.STATISTICS_LOG_LEVEL_PROPERTY, value.toString()); + } else { + newProperties.remove(ProxoolConstants.STATISTICS_LOG_LEVEL_PROPERTY); + } + resultList.add (new Attribute (name, value)); } else if (equalsProperty(name, ProxoolConstants.TRACE)) { checkAssignable (name, Boolean.class, value.getClass ()); *************** *** 334,337 **** --- 365,372 ---- newProperties.setProperty(ProxoolConstants.VERBOSE_PROPERTY, value.toString()); resultList.add (new Attribute (name, value)); + } else if (equalsProperty(name, ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS)) { + checkAssignable (name, Boolean.class, value.getClass ()); + newProperties.setProperty(ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS_PROPERTY, value.toString()); + resultList.add (new Attribute (name, value)); } else { final String message = "Unknown attribute: " + name; *************** *** 398,403 **** createProxoolAttribute (ProxoolConstants.PROTOTYPE_COUNT, Integer.class), createProxoolAttribute (ProxoolConstants.RECENTLY_STARTED_THRESHOLD, Integer.class), createProxoolAttribute (ProxoolConstants.TRACE, Boolean.class), ! createProxoolAttribute (ProxoolConstants.VERBOSE, Boolean.class) }; --- 433,441 ---- createProxoolAttribute (ProxoolConstants.PROTOTYPE_COUNT, Integer.class), createProxoolAttribute (ProxoolConstants.RECENTLY_STARTED_THRESHOLD, Integer.class), + createProxoolAttribute (ProxoolConstants.STATISTICS, String.class), + createProxoolAttribute (ProxoolConstants.STATISTICS_LOG_LEVEL, String.class), createProxoolAttribute (ProxoolConstants.TRACE, Boolean.class), ! createProxoolAttribute (ProxoolConstants.VERBOSE, Boolean.class), ! createProxoolAttribute (ProxoolConstants.WRAP_FATAL_SQL_EXCEPTIONS, Boolean.class), }; *************** *** 644,647 **** --- 682,688 ---- Revision history: $Log$ + Revision 1.11 2003/09/14 21:29:31 chr32 + Added support for wrap-fatal-sql-exceptions,statistics and statistics-log-level properties. + Revision 1.10 2003/09/10 22:21:04 chr32 Removing > jdk 1.2 dependencies. |
From: <bil...@us...> - 2003-09-11 23:58:09
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv5596 Modified Files: HouseKeeperTest.java Log Message: New test for house-keeper-test-sql Index: HouseKeeperTest.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool/HouseKeeperTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** HouseKeeperTest.java 4 Mar 2003 10:24:40 -0000 1.6 --- HouseKeeperTest.java 11 Sep 2003 23:58:05 -0000 1.7 *************** *** 83,88 **** String alias = testName; ! // TODO complete this test } --- 83,105 ---- String alias = testName; ! String url = TestHelper.buildProxoolUrl(alias, ! TestConstants.HYPERSONIC_DRIVER, ! TestConstants.HYPERSONIC_TEST_URL); ! Properties info = new Properties(); ! info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); ! info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); ! info.setProperty(ProxoolConstants.HOUSE_KEEPING_TEST_SQL_PROPERTY, "SELECT NOW"); ! info.setProperty(ProxoolConstants.HOUSE_KEEPING_SLEEP_TIME_PROPERTY, "1000"); ! ProxoolFacade.registerConnectionPool(url, info); ! ! DriverManager.getConnection(url).close(); + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + LOG.debug("Awoken."); + } + + DriverManager.getConnection(url).close(); } *************** *** 93,96 **** --- 110,116 ---- Revision history: $Log$ + Revision 1.7 2003/09/11 23:58:05 billhorsman + New test for house-keeper-test-sql + Revision 1.6 2003/03/04 10:24:40 billhorsman removed try blocks around each test |
From: <bil...@us...> - 2003-09-11 23:57:51
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv5472 Modified Files: HouseKeeper.java Log Message: Test SQL now traps Throwable, not just SQLException. Index: HouseKeeper.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/HouseKeeper.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** HouseKeeper.java 10 Mar 2003 15:26:46 -0000 1.2 --- HouseKeeper.java 11 Sep 2003 23:57:48 -0000 1.3 *************** *** 10,14 **** import java.sql.Connection; - import java.sql.SQLException; import java.sql.Statement; --- 10,13 ---- *************** *** 80,84 **** } finally { if (log.isDebugEnabled() && definition.isVerbose()) { ! log.debug(connectionPool.displayStatistics() + " - Testing connection " + proxyConnection.getId() + (testResult ? ": OK" : ": FAIL")); } } --- 79,83 ---- } finally { if (log.isDebugEnabled() && definition.isVerbose()) { ! log.debug(connectionPool.displayStatistics() + " - Testing connection " + proxyConnection.getId() + (testResult ? ": True" : ": False")); } } *************** *** 86,90 **** proxyConnection.setStatus(ProxyConnectionIF.STATUS_OFFLINE, ProxyConnectionIF.STATUS_AVAILABLE); ! } catch (SQLException e) { // There is a problem with this connection. Let's remove it! proxyConnection.setStatus(ProxyConnectionIF.STATUS_OFFLINE, ProxyConnectionIF.STATUS_NULL); --- 85,89 ---- proxyConnection.setStatus(ProxyConnectionIF.STATUS_OFFLINE, ProxyConnectionIF.STATUS_AVAILABLE); ! } catch (Throwable e) { // There is a problem with this connection. Let's remove it! proxyConnection.setStatus(ProxyConnectionIF.STATUS_OFFLINE, ProxyConnectionIF.STATUS_NULL); *************** *** 254,257 **** --- 253,259 ---- Revision history: $Log$ + Revision 1.3 2003/09/11 23:57:48 billhorsman + Test SQL now traps Throwable, not just SQLException. + Revision 1.2 2003/03/10 15:26:46 billhorsman refactoringn of concurrency stuff (and some import |
From: <bil...@us...> - 2003-09-11 23:15:07
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv29834 Modified Files: ConnectionPoolTests.java Log Message: New test for when maximum-connection-count = 1 and minimum-connection-count = 1 Index: ConnectionPoolTests.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/proxool/ConnectionPoolTests.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** ConnectionPoolTests.java 12 Mar 2003 00:14:12 -0000 1.8 --- ConnectionPoolTests.java 11 Sep 2003 23:14:57 -0000 1.9 *************** *** 64,67 **** --- 64,111 ---- /** + * test what happens if maximum = minimum = 1 + */ + public void testMaximumEqualsMinimumConnectionCount() throws Exception { + + String testName = "maximumEqualsMinimumConnectionCount"; + String alias = testName; + + String url = TestHelper.buildProxoolUrl(alias, + TestConstants.HYPERSONIC_DRIVER, + TestConstants.HYPERSONIC_TEST_URL); + Properties info = new Properties(); + info.setProperty(ProxoolConstants.USER_PROPERTY, TestConstants.HYPERSONIC_USER); + info.setProperty(ProxoolConstants.PASSWORD_PROPERTY, TestConstants.HYPERSONIC_PASSWORD); + info.setProperty(ProxoolConstants.MAXIMUM_CONNECTION_COUNT_PROPERTY, "1"); + info.setProperty(ProxoolConstants.MINIMUM_CONNECTION_COUNT_PROPERTY, "1"); + info.setProperty(ProxoolConstants.VERBOSE_PROPERTY, "true"); + ProxoolFacade.registerConnectionPool(url, info); + + // opening and closing a connection should have no effect + Connection c1 = DriverManager.getConnection(url); + c1.close(); + + // Leave this one open for a while + Connection c2 = DriverManager.getConnection(url); + + try { + Connection c3 = DriverManager.getConnection(url); + c3.close(); + fail("Didn't expect to get third connection"); + } catch (SQLException e) { + LOG.debug("Ignoring expected exception", e); + } + + assertEquals("activeConnectionCount", 1, ProxoolFacade.getSnapshot(alias, true).getActiveConnectionCount()); + c2.close(); + + // Just check it all still works + DriverManager.getConnection(url).close(); + + assertEquals("activeConnectionCount", 0, ProxoolFacade.getSnapshot(alias, true).getActiveConnectionCount()); + + } + + /** * Checks whether shutdown is patient enough to wait for active connections */ *************** *** 151,154 **** --- 195,201 ---- Revision history: $Log$ + Revision 1.9 2003/09/11 23:14:57 billhorsman + New test for when maximum-connection-count = 1 and minimum-connection-count = 1 + Revision 1.8 2003/03/12 00:14:12 billhorsman change thresholds |
From: <bil...@us...> - 2003-09-11 23:00:56
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/logging In directory sc8-pr-cvs1:/tmp/cvs-serv26732 Added Files: Jdk14LoggerTest.java Log Message: --- NEW FILE: Jdk14LoggerTest.java --- /* * This software is released under a licence similar to the Apache Software Licence. * See org.logicalcobwebs.proxool.package.html for details. * The latest version is available at http://proxool.sourceforge.net */ package org.logicalcobwebs.logging; import org.logicalcobwebs.proxool.AbstractProxoolTest; import org.logicalcobwebs.proxool.ConnectionPoolTests; /** * Test {@link org.logicalcobwebs.logging.impl.Jdk14Logger} * * @version $Revision: 1.1 $, $Date: 2003/09/11 23:00:53 $ * @author billhorsman * @author $Author: billhorsman $ (current maintainer) * @since Proxool 0.8 */ public class Jdk14LoggerTest extends AbstractProxoolTest { private static final Log LOG = LogFactory.getLog(ConnectionPoolTests.class); public Jdk14LoggerTest(String alias) { super(alias); } /** * Override {@link AbstractProxoolTest#setUp} because we don't want to * configure logging. * @throws Exception if anything goes wrong (it can't, we don't do anything) */ protected void setUp() throws Exception { // Don't setup logging. Just use the default JDK14Logger } /** * Override {@link AbstractProxoolTest#tearDown} because it does things that rely * on {@link AbstractProxoolTest#setUp} having run * @throws Exception if anything goes wrong (it can't, we don't do anything) */ protected void tearDown() throws Exception { // Don't do anything } public void testJdk14Logger() { LOG.info("Does this log correctly?"); } } |
From: <bil...@us...> - 2003-09-11 23:00:29
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/logging/impl In directory sc8-pr-cvs1:/tmp/cvs-serv26480 Modified Files: Jdk14Logger.java Log Message: Fix signatures for logp() methods. Index: Jdk14Logger.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/logging/impl/Jdk14Logger.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Jdk14Logger.java 11 Sep 2003 08:31:11 -0000 1.6 --- Jdk14Logger.java 11 Sep 2003 23:00:23 -0000 1.7 *************** *** 91,101 **** try { final Class loggerClass = Class.forName("java.util.logging.Logger"); final Method getLoggerMethod = loggerClass.getMethod("getLogger", new Class [] {String.class}); logger = getLoggerMethod.invoke(null, new Object[]{name}); ! logpMethod = logger.getClass().getMethod("logp", new Class[] {Class.forName("java.util.logging.Logger"), String.class, String.class, String.class}); ! logpExMethod = logger.getClass().getMethod("logp", new Class[] {Class.forName("java.util.logging.Logger"), String.class, String.class, String.class, Throwable.class}); - final Class levelClass = Class.forName("java.util.logging.Level"); isLoggableMethod = loggerClass.getMethod("isLoggable", new Class[] {levelClass}); getStackTraceMethod = Throwable.class.getMethod("getStackTrace", null); --- 91,101 ---- try { final Class loggerClass = Class.forName("java.util.logging.Logger"); + final Class levelClass = Class.forName("java.util.logging.Level"); final Method getLoggerMethod = loggerClass.getMethod("getLogger", new Class [] {String.class}); logger = getLoggerMethod.invoke(null, new Object[]{name}); ! logpMethod = logger.getClass().getMethod("logp", new Class[] {levelClass, String.class, String.class, String.class}); ! logpExMethod = logger.getClass().getMethod("logp", new Class[] {levelClass, String.class, String.class, String.class, Throwable.class}); isLoggableMethod = loggerClass.getMethod("isLoggable", new Class[] {levelClass}); getStackTraceMethod = Throwable.class.getMethod("getStackTrace", null); *************** *** 108,112 **** levelWARNING = levelClass.getField("WARNING").get(null); levelSEVERE = levelClass.getField("SEVERE").get(null); ! } catch (Exception e) { throw new RuntimeException("Could not create Jdk14Logger: " + e.getMessage()); } --- 108,113 ---- levelWARNING = levelClass.getField("WARNING").get(null); levelSEVERE = levelClass.getField("SEVERE").get(null); ! } catch (Throwable e) { ! e.printStackTrace(); throw new RuntimeException("Could not create Jdk14Logger: " + e.getMessage()); } |
From: <bil...@us...> - 2003-09-11 22:47:22
|
Update of /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/logging In directory sc8-pr-cvs1:/tmp/cvs-serv22245/logging Log Message: Directory /cvsroot/proxool/proxool/src/java-test/org/logicalcobwebs/logging added to the repository |
From: <bil...@us...> - 2003-09-11 11:18:10
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/resources In directory sc8-pr-cvs1:/tmp/cvs-serv1245 Modified Files: attributeDescriptions.properties Log Message: Add wrap-fatal-sql-exceptions property Index: attributeDescriptions.properties =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/resources/attributeDescriptions.properties,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** attributeDescriptions.properties 5 Mar 2003 23:28:56 -0000 1.2 --- attributeDescriptions.properties 11 Sep 2003 11:18:07 -0000 1.3 *************** *** 15,18 **** --- 15,22 ---- you can set it more than once and each value is checked. + wrap-fatal-sql-exceptions=\ + If true then if a fatal SQLException is detected then it will be wrapped up in a \ + FatalSQLException and that will be thrown instead. Default is false. + house-keeping-sleep-time=\ How long the house keeping thread sleeps for (milliseconds). \ |
From: <bil...@us...> - 2003-09-11 11:17:56
|
Update of /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool In directory sc8-pr-cvs1:/tmp/cvs-serv1153 Modified Files: Version.java Log Message: Index: Version.java =================================================================== RCS file: /cvsroot/proxool/proxool/src/java/org/logicalcobwebs/proxool/Version.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Version.java 30 Aug 2003 11:43:32 -0000 1.12 --- Version.java 11 Sep 2003 11:17:52 -0000 1.13 *************** *** 40,44 **** private static final String BUILD_DATE = null; ! private static final String CVS = "0.7.3+"; public static String getVersion() { --- 40,44 ---- private static final String BUILD_DATE = null; ! private static final String CVS = "0.8.0RC1+"; public static String getVersion() { *************** *** 77,80 **** --- 77,83 ---- Revision history: $Log$ + Revision 1.13 2003/09/11 11:17:52 billhorsman + *** empty log message *** + Revision 1.12 2003/08/30 11:43:32 billhorsman Update for next release. |