<?xml version="1.0"?>
<!--
/*
 * 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.
 */
 -->
<rdf:RDF xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:doap="http://usefulinc.com/ns/doap#" xml:lang="en">
  <Project rdf:about="http://commons.apache.org/dbcp/">
    <name>Apache Commons DBCP</name>
    <homepage rdf:resource="http://commons.apache.org/dbcp/"/>
    <programming-language>Java</programming-language>
    <category rdf:resource="http://projects.apache.org/category/library"/>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
    <bug-database rdf:resource="http://issues.apache.org/jira/browse/DBCP"/>
    <download-page rdf:resource="http://commons.apache.org/downloads/download_dbcp.cgi"/>
    <asfext:pmc rdf:resource="http://commons.apache.org/"/>
    <shortdesc xml:lang="en">Commons Database Connection Pooling</shortdesc>
    <description xml:lang="en">Commons Database Connection Pooling</description>
    <repository>
      <SVNRepository>
        <browse rdf:resource="http://svn.apache.org/repos/asf/commons/proper/dbcp/trunk"/>
        <location rdf:resource="http://svn.apache.org/repos/asf/commons/proper/dbcp"/>
      </SVNRepository>
    </repository>
    <release>
      <Version>
        <name>commons-dbcp</name>
        <created>2007-04-04</created>
        <revision>1.2.2</revision>
      </Version>
      <Version>
        <name>commons-dbcp</name>
        <created>2004-06-07</created>
        <revision>1.2.1</revision>
      </Version>
    </release>
    <mailing-list rdf:resource="http://commons.apache.org/mail-lists.html"/>
  </Project>
</rdf:RDF>
