<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"?>
<rdf:RDF xml:lang="en"
         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:foaf="http://xmlns.com/foaf/0.1/">
<!--
    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.
-->
  <Project rdf:about="http://deltaspike.apache.org">
    <created>2014-04-11</created>
    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
    <name>Apache DeltaSpike</name>
    <homepage rdf:resource="http://deltaspike.apache.org" />
    <asfext:pmc rdf:resource="http://deltaspike.apache.org" />
    <shortdesc>DeltaSpike is a collection of portable Extensions for CDI Containers</shortdesc>
    <description>Apache DeltaSpike is  a suite of portable CDI (Contexts &amp; Dependency
Injection) extensions intended to make application development easier when
working with CDI and Java EE.  Some of its key features include:

- A core runtime that supports component configuration, type safe messaging
and internationalization, and exception handling.
- A suite of utilities to make programmatic bean lookup easier.
- A plugin for Java SE to bootstrap both JBoss Weld and Apache OpenWebBeans
outside of a container.
- JSF integration, including backporting of JSF 2.2 features for Java EE 6.
- JPA integration and transaction support.
- A Data module, to create an easy to use repository pattern on top of JPA.
- Quartz integration

Testing support is also provided, to allow you to do low level unit testing
of your CDI enabled projects.</description>
    <bug-database rdf:resource="https://issues.apache.org/jira/browse/DELTASPIKE" />
    <mailing-list rdf:resource="http://deltaspike.apache.org/community.html#Mailinglists" />
    <programming-language>Java</programming-language>
    <category rdf:resource="http://projects.apache.org/category/javaee" />
    <repository>
      <SVNRepository>
        <location rdf:resource="https://git-wip-us.apache.org/repos/asf/deltaspike.git"/>
        <browse rdf:resource="https://git-wip-us.apache.org/repos/asf?p=deltaspike.git"/>
      </SVNRepository>
    </repository>
    <maintainer>
      <foaf:Person>
        <foaf:name>Mark Struberg</foaf:name>
          <foaf:mbox rdf:resource="mailto:struberg@apache.org"/>
      </foaf:Person>
    </maintainer>
  </Project>
</rdf:RDF>
