XAM, or the eXtensible Access Method, is a storage standard developed and maintained by the Storage Networking Industry Association (SNIA). It is in the process of being ratified as an ANSI standard. XAM is an API for fixed content aware storage devices. XAM replaces the various proprietary interfaces that have been used for this purpose in the past. Content generating applications now have a standard means of saving and finding their content across a broad array of storage devices.
XAM is similar in function to a file system API such as the POSIX file and directory operations, in that it allows applications to store and retrieve their data. XAM stores application data in XSet objects that also contain metadata.
The standard XAM API consists of all of the three primary objects and two secondary objects that an application can manipulate to store and retrieve data.
The first primary object that applications deal with to store and retrieve data is called an Xset. It is the object that is the container for both the data and the associated metadata. XSet metadata goes beyond the typical system metadata, and adds fields for retention and other data management policies. Applications can also add their own user metadata as well. This is a key requirement in the fixed content storage market. Any of the metadata in the XSet can be queried for later, in order to find the XSet.
XAM also has the notion of a system that will contain the XSets. This abstracted storage system is called an XSystem. The XSystem object is also the factory for XSet objects (via create and open methods). Any given application may have access to any number of XSystem storage devices, so there is a need to create XSystem objects for each system we need to access. This is done through an object called the XAMLibrary. The XAM Library manages all the connections to the storage devices and acts as a factory for XSystem objects.
The XSystem object that is returned from the connect() operation can be used to talk to the storage device. All of these objects have properties which are accessed in the same way. These properties can be of several different types and can be created at runtime. XAM provides a way to do this in a type safe manner with the XIterator (secondary) object. The XIterator can contain all properties, or just a subset (those having a name starting with a "prefix"). Finally, an XStream is a (secondary) object that can contain the actual content associated with an XSet. XStreams have operations to read and write the content using various means, both synchronously and asynchronously. The type of data an XStream holds can be any valid Mime type.
The XAM standard is composed of an Architecture specification and language bindings for both the C and Java language. The latest version of the specifications can be found at the SNIA site. The standard is being updated and revised by the SNIA Fixed Content Aware Storage (FCAS) Technical Work Group (TWG), Hagen Blankenstein and Philipp Niechziol (co-chairman).
The SNIA has also produced open source reference implementations of C and Java XAM Libraries as well as a Vendor Interface Module (VIM) that can work on top of any file system. The SNIA Software is being updated and revised by the XAM SDK Technical Work Group (TWG),Maik Schönherr(engineer) and Torsten Heuer (co-chairman).