Ok, work on Abdera2 is nearing completion. All that's really left at this point is a ton of testing and documentation, I'll also likely continue to work with a number of new experimental features, but the core modifications are complete and I would like to invite folks to start kicking the tires on it and giving it a spin.
Abdera2 is a MAJOR update over Abdera 1.x, and as such, it uses a new package name (org.apache.abdera2.*) and is *NOT* binary compatible with Abdera 1.x. The overwhelming majority of the Atom Feed Object Model (FOM) API remains untouched but there have been important changes, such as the switch over to using the Joda-Time library for all DateTime handling, and the introduction of the new Selector framework API. Also, the Server framework and Client APIs have both been refactored significantly, so there will be a necessary migration path if you choose to upgrade your existing Atom-based applications to Abdera2. I think you'll find the new capabilities well worth the trouble. The part of this that I'm most excited about is the Activity Streams implementation. Plenty of examples are included to help you get started with that. The build and test cases may still be a bit rough around the edges, I'll be working on smoothing all that out over the coming week, so if you run into any issues, let me know. You'll need Maven to build as there is no Ant build option for Abdera2. You can find the code here: http://svn.apache.org/repos/asf/abdera/abdera2/ Below is a high level listing of the changes/new features. There are way too many changes to list them all in detail. Abdera2 - High Level Features (not a comprehensive list) ========================================================= * Updated all dependencies to latest versions * Introduced new dependencies on Joda-Time and Guava Libraries * Refactored package layout, new packaging structure: - common, core, client, server, security, ext and activities * New Common Code Library - Selector Framework, extension to the Guava Predicate API, used extensively throughout Abdera2. - Updated and Extended URI Template Implementation - Updated Unicode Support using ICU4J - Improved efficiency in IRI implementation - Enhanced ISO8601 Date/Time handling using Joda-Time, Guava and the Selector framework - Enhanced support for common HTTP Headers (Authentication, Cache Control, ETag, Preference, Web Linking) - Simplified Lang Tag Support - Enhanced Media Type Support - New lightweight "Pusher" interface.. acts as a shim for simple pub/sub applications. - Lightweight MapReduce implementation built around the Guava Function API designed primarily for relatively small, in-memory analysis operations. Supports asynchronous, non-blocking operations. - Simple Chained Invocation API extending the Guava Function API - API Key and One Time Password Implementations - Utilities for simplifying Hash and HMAC generation and validation - Variety of other useful utilities... * Updated Feed Object Model API, using Joda-Time for all Date-Time handling, use of the Selector API for filtering results * Simplified the Named Writer and Named Parser mechanism in the Atom implementation * Completely refactored HTTP Client API based around the Apache HTTP Client Components 4.x. * Support for Asynchronous, non-blocking HTTP Client operations leveraging the java.util.concurrent.Executor framework and java.util.concurrent.Future * Refactored Publishing Server Provider framework, simplifying the overall architecture and tying in new capabilities from the new Common Code library. * Improved Atom Parsing Performance (my informal testing has demonstrated about a 20-25% improvement on average) * Complete JSON Activity Streams implementation - Support for generating and consuming Activity Streams - Support for all core Object Types and Verbs - Support for a number of extension Object Types and Verbs - Fluent, factory-model API - Immutable, thread-safe objects - Streaming Serialization API - API for using existing Activities objects as templates to create new objects - Extensible serialization/deserialization - Asynchronous, non-blocking parsing and serialization - Support for primary Activity Streams extensions such as Replies and Audience Targeting - Experimental mode that allows playing around with new experimental extensions - JSON Web Token Support - Client and Server side Activity Streams based API support - Type-safe dynamic extensibility API - Merge/Diff API - Filter API based on Selectors - Conversion of JSON Activity Stream to and from Atom
