AtomServer has a relatively lengthy feature set. Here is a list of highlights;
- Based on the Atom Publishing Protocol. Atom is an RESTful protocol for data transfer and syndication, which has quickly become the Industry standard. Atom libraries exist in practically all computer languages, which makes writing Atom clients trivial.
- A Fully Functional "GData-style Atom Data Store". Rather than reinvent the wheel, AtomServer is roughly based on GData. GData basically picks up where the Atom lets off, defining further protocols for interaction.
- Full Support for Atom Categories.
Essentially, Atom Categories allow you to extend your data - your
Content - without modifying the data itself. This is a very powerful
concept. AtomServer allows you to conveniently create, update, and
delete Atom Categories using a virtual Workspace. Atom also supports
Category queries with arbitrarilly complex boolean logic (ANDs and ORs)
- Auto-tagger for Atom Categories.
AtomServer has an easily configured mechanism to "auto tag" Entries
when they are either created or updated. An XPathAutoTagger is
provided, which allows you to XPath into your Content and conditionally
associate Atom Categories with it.
- Optimistic Concurrency. AtomServer provides full supports for optimistic concurrency, but also provides a mechanism to shut it off for a "user knows best" scenario.
- Batch Operations. AtomServer
has full support for operating on a mixed "batch" of create, update, or
delete requests.
- Aggregate Feeds.
AtomServer has the powerful ability to join together disparate Entries
into an
aggregate Entry, using Atom Categories. And further, provides the
mechanism to
request Feeds of these aggregates.
Instead of forcing clients to deal with several Feeds, and having
to tie the information back together themselves, they can listen to a
single
aggregate Feed, with will reflect the changes to any of its parts.
- Transactionally Correct. First and foremost AtomServer is a data service. Obviously, that implies that AtomServer must maintain data integrity at all times, even when you are paging. You should see everything that has changed - no more and no less. To accomplish this, all write operations in AtomServer take place within a transaction.
- Pluggable Content Validation. AtomServer allows you to plug in a ContentValidator of your choice. It includes a RelaxNG validator and a simple XML validator.
- Lazy Inserts. AtomServer will create an Entry when it is PUT, and it does not yet exist.
- Consistent Paging. AtomServer maintains an internal, monotonically increasing identifier for each Collection, which ensures that paging is always consistent.
- Spring Configured.
AtomServer is configured using Spring's Dependency Injection model. And
along with this, i makes use of Springs hierarchically loaded Beans,
allowing you to easily override any part of AtomServer's default setup.
- A Simple Configuration Model.
AtomServer was built to be very easily extended by client applications.
It employs a specialized ClassLoader that allows you to specify your
own configuration Resources, outside the standard web application
structure.
- Supports Several Databases. AtomServer supports Postgresql, SQLServer, and HSQLDB. Oracle would be relatively simple to support, since it is so similar to Postgresql. At one time AtomServer also supported MySql, and can so again. Although it should be noted that HSQLDB and MySQL do not support "Snapshot concurrency", and are recommended only for low load/low concurrency applications.
- Based on Apache Abdera. AtomServer acts as a layer above the Abdera Atom framework, and thus, makes all the features of that framework available to you, including efficient Stax processing, and the convenient Feed Object Model.
- Tested Under Fire. AtomServer has been in Production at a major website since January 2008, taking approximately one million hits/day, with a peak throughput above 100 requests/sec (although we've seen much higher throughput in load testing.
- Different Content Storage Options. AtomServer provide allows you to choose between File-based or DB-based Content storage.
- Standalone, Zero-configuration
Server. AtomServer comes with the ability to run as a standalone
server, spinning up in an embedded Jetty Servlet engine. Initially it
will spin up using an embedded HSQLDB database, so you can get started
quickly. This standalone AtomServer can be reconfigured to use another
database and your own Workspaces.