<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<object class="org.apache.commons.dbcp.PoolableConnectionFactory" xmlns="http://apache.org/xml/xmlns/jakarta/commons/jocl">
   <object class="org.apache.commons.dbcp.DriverConnectionFactory">
      <object class="org.apache.commons.dbcp.TesterDriver"/>
      <string value="jdbc:apache:commons:testdriver"/>
      <object class="java.util.Properties" null="true"/>
   </object>
   <object class="org.apache.commons.pool.impl.GenericObjectPool">
      <object class="org.apache.commons.pool.PoolableObjectFactory" null="true"/>
      <int value="10"/>
      <byte value="1"/>
      <long value="2000"/>
      <int value="10"/>
      <boolean value="true"/>
      <boolean value="true"/>
      <long value="10000"/>
      <int value="5"/>
      <long value="5000"/>
      <boolean value="true"/>
   </object>
   <object class="org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory">
      <object class="org.apache.commons.pool.KeyedPoolableObjectFactory" null="true"/>
      <int value="5"/>
      <byte value="1"/>
      <long value="2000"/>
      <int value="5"/>
      <boolean value="true"/>
      <boolean value="true"/>
      <long value="10000"/>
      <int value="5"/>
      <long value="5000"/>
      <boolean value="true"/>
   </object>
   <string value="SELECT COUNT(*) FROM DUAL"/>
   <collection>
     <string value="ALTER SESSION SET NLS_COMP=ANSI"/>
     <string value="ALTER SESSION SET NLS_SORT=BINARY"/>
   </collection>
   <boolean value="false"/>
   <boolean value="true"/>
</object>
