<?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/pool/">
    <name>Apache Commons Pool</name>
    <homepage rdf:resource="http://commons.apache.org/pool/"/>
    <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/POOL"/>
    <download-page rdf:resource="http://commons.apache.org/pool/download_pool.cgi"/>
    <asfext:pmc rdf:resource="http://commons.apache.org/"/>
    <shortdesc xml:lang="en">Commons Object Pooling Library</shortdesc>
    <description xml:lang="en">Commons Object Pooling Library</description>
    <repository>
      <SVNRepository>
        <browse rdf:resource="http://svn.apache.org/repos/asf/commons/proper/pool/trunk"/>
        <location rdf:resource="http://svn.apache.org/repos/asf/commons/proper/pool"/>
      </SVNRepository>
    </repository>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2013-12-30</created>
        <revision>2.1</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2013-11-11</created>
        <revision>2.0</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2011-04-03</created>
        <revision>1.5.6</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2010-09-10</created>
        <revision>1.5.5</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2009-11-20</created>
        <revision>1.5.4</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2009-09-23</created>
        <revision>1.5.3</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2009-07-12</created>
        <revision>1.5.2</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2009-06-16</created>
        <revision>1.5.1</revision>
      </Version>
      <Version>
        <name>commons-pool</name>
        <created>2009-06-10</created>
        <revision>1.5</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2008-01-15</created>
        <revision>1.4</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2006-04-06</created>
        <revision>1.3</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2004-06-07</created>
        <revision>1.2</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2003-10-20</created>
        <revision>1.1</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2002-08-12</created>
        <revision>1.0.1</revision>
      </Version>
    </release>
    <release>
      <Version>
        <name>commons-pool</name>
        <created>2002-05-04</created>
        <revision>1.0</revision>
      </Version>
    </release>
    <mailing-list rdf:resource="http://commons.apache.org/mail-lists.html"/>
  </Project>
</rdf:RDF>
