The Fedora Project is proud to announce the release of version 2.2 of the Fedora open-source digital repository system. Fedora 2.2 represents a milestone release that includes a complete repackaging of the source and binary distribution along with a number of new features and enhancements. It also resolves a number of reported bugs.
Fedora 2.2 represents a significant release of Fedora because it includes a complete repackaging of the Fedora source and binary distribution so that Fedora can now be installed as a standalone webapp in any servlet container. In addition to the war file repackaging, the Fedora 2.2 release includes several feature enhancements including a new Fedora installer application, refactoring of authentication code using ServletFilters, enhancements to the WSDL for the Management and Access APIs, new Journaling feature useful for replicating repositories, modification of several API-M methods to enhance functionality, new checksum support for datastreams, new support for object ownerId property, enhancements to the Resource Index enabling selection of an alternate triplestore database engine, integration of Gert Pedersen's Fedora Generic Search application into the Fedora Services Framework, and refactoring of the JUnit tests.
Note that the Backend Security feature is disabled in Fedora 2.2 pending future redesign of backend security. Backend Security is only in scope when Datastream Mediation is enabled and when using custom user-defined disseminators. Backend security controls communication between the Fedora server and backend services that are used with custom user-defined disseminators through a set of XACML policies auto-generated from the beSecurity.xml file. With the feature disabled, these generated beSecurity policies are NOT being enforced. For additional details on the disabling of the the backend security feature, see the document entitled Backend Services Security Configuration.
Fedora 2.2 includes a number of public API changes that are documented below. There is also a page on the Fedora Wiki that summarizes the API changes in Fedora 2.2 that may be of interest to developers. You can access the wiki page at fedora.info/wiki/index.php/UpgradingYourApplicationForFedora2.2.
Fedora 2.2 is the first release of Fedora that requires Java 1.5 to compile and run. There are several reasons behind the move to Java 1.5 including compatibility with latest versions of open source libraries used in the Fedora codebase, new programming features, ease of development and code quality, and general Java VM improvements.
Fedora 2.2 represents a complete repackaging of the binary and source distribution that now enables Fedora to be built and installed as a standalone webapp. The new distribution and installer enable two primary modes of installation: 1) quick and 2) custom. The quick configuration option is designed for the novice user wanting to get Fedora setup and installed with minimal effort. The custom option provides additional choices that include installing fedora using the bundled 5.0.28 version of tomcat, external versions of tomcat (5.0.x or 5.5.x), and other servlet containers. The custom option also includes additional choices regarding the backend SQL database configuration. In addition to configuring the type of servlet container where Fedora is to be installed, the installer also configures XACML policy configuration, and configuration of the Fedora security configuration. The new installer greatly simplifies the task of installing and configuring Fedora whether you are a novice user or a veteran developer. For complete details on the new installer and options, please see the Fedora Installation And Configuration Guide.
One of the goals in repackaging Fedora as a war file was to lessen the dependence of the codebase on a particular servlet container. However, the authentication implementation in use prior to Fedora 2.2 was heavily dependent on the tomcat-5.0.28 servlet container. There also existed a known bug (see bugzilla #144) that proved to be difficult to resolve. Using the ServletFilter approach to authentication removes the dependencies on tomcat, makes the authentication mechanism more flexible, resolves bug #144, and better positions Fedora to function as a true standalone webapp. For complete details on the authentication changes, please refer to the document Securing Your Repo.
In response to the Fedora community and the Fedora Preservation Working Group's recommendations, support for adding checksums on datastreams has been added to the Fedora core. A new method named "compareDatastreamChecksum" has been added to API-M for comparing the current datastream checksum stored in the Fedora xml object with a freshly computed checksum. Here is the new method signature:
There are also two new configuration parameters in fedora.fcfg related to the new checksum feature. The autoChecksum parameter controls whether checksums are to be computed for every datastream. By default autoChecksum is set to false which disables automatic checksums. When set to true, checksums will automatically be computed for each datastream during the API-M operations for ingest, addDatastream, modifyDatastreamByReference, and modifyDatastreambyValue. The config parameter checksumAlgorithm defines the checksum algorithm to be used when automatically computing checksums. Fedora currently supports the following checksum algorithms: MD5, SHA-1, SHA-256, SHA-384, and SHA-512. For complete details on the new checksum feature, refer to the document Checksums on Datastreams in Fedora.
Fedora 2.2 includes a new Journaling feature that keeps a full log of all object modifications to a Fedora repository. These logs can be used in a live leader/follower configuration to support automatic replication to an identical Fedora repository, as well as for diagnostic or auditing purposes. For additional details on the new journaling feature, please refer to the document Journaling Guide
In response to the Fedora community, Fedora 2.2 adds support for the construct of an ownerId object property on a digital object. Currently the new ownerId property is an opaque single-valued string. This will be expanded in the next release of Fedora to allow for multiple ownerIds. The FOXML schema is updated to include the new object property name of: info:fedora/fedora-system:def/model#ownerId. e.g.,
The METS schema used by Fedora is also been updated to include the attribute for ownerId. In the METS schema, the ownerId attribute is stored in the <agent> element under the <metsHeader> element with a ROLE of IPOWNER. e.g.,
It is now possible to assign a single owner to the ownerId object property of a digital object. Once specified, you can also write XACML policies against the ownerId policy attribute. The implementation of the ownerId feature also modifies the signature of the API-M method named "modifyObject" to enabled setting or changing the value of ownerId on a digital object.
Here are the old and new signature for the method:
OwnerId can either be included in the FOXML or METS xml and will be assigned at time of ingest or you can use the admin client to change the ownerID using the modifyObject method of API-M.
Fedora 2.2 includes extensive refactoring of the code to now use Log4j as the logging mechanism. This new addition makes the configuration of logging for both the Fedora server and client much cleaner and simpler. See the Fedora Installation And Configuration Guide for more details on configuring the logs.
The Fedora Generic Search application developed by Gert Schmeltz Pedersen as part of the Fedora Search Working group has now been integrated into the Fedora services framework. Fedora Generic Search represents a great example of how contributed work from the Fedora community can be migrated from the user community into the Fedora framework and then made available to the entire Fedora community. Fedora Generic Search represents an extensible generic search service that can be plugged into the Fedora Services Framework. It current supports both Lucene and Zebra as backend search engines. When the messaging components are finalized in a future release, it will be possible to further decouple the Fedora Generic Search service from Fedora and treat it as a "message receiver" in the service framework. For additional details on Fedora Generic Search see the document entitled Fedora Generic Search Service
Fedora 2.2 adds a DDLConverter class for PostgreSQL which enables the use of PostgreSQL as a backend SQL database with Fedora. This new addition is based on a contribution from Hubert Stigler that was made to the fedora-users mailing list on April 4th, 2006. The PostgreSQL addition requires a table name change for the backend SQL database table named "do" to the new name of "dobj". The change was necessary because the name of "do" is considered a reserved word for PostgreSQL. The new installer will automatically handle the table name change for existing repositories migrating to Fedora 2.2. For additional details on migrating from an earlier release of Fedora to Fedora 2.2, see the Fedora Upgrade and Migration Guide
Fedora 2.2 fully implements the VERSIONABLE attribute on datastreams and adds a new method named "setDatastreamVersionable" to API-M to enable changing the versionable state of a datastream. This functionality enables repository managers to selectively turn versioning on or off for selected datastreams. This new feature can also be controlled using XACML policies by restricting access to the setDatastreamVersionable method in API-M which allows repository managers to decide if they want to enable this feature or not. The signature for the new method is as follows:
The versionable attribute is an optional attribute in the FOXML schema. If omitted from the object xml, it defaults to the value of true enabling versioning. If set to false, it disables versioning for the datastream. When versioning is disabled, subsequent modifications to the datastream replace the current datastream contents and no versioning history is preserved. Once an object has been ingested, the "setDatastreamVersionable" method of API-M can be used to alter the versionable state of a datastream. For details regarding the syntax of the versionable attribute in the object xml, refer to the FOXML and/or METS schemas.
The implementation of the new checksum feature for datastreams includes some argument changes for the "addDatastream" method of API-M. The changes include two new arguments named "checksumType" and "checksum". The "checksumType" argument specifies the checksum algorithm to use in computing the checksum value. Valid values are MD5, SHA-1, SHA-256, SHA-385, and SHA-512. The "checksum" argument is the value of the checksum represented as a hexadecimal string. The "versionable" argument is also fully implemented now and can be used to control whether the datastream is to use versioning or not.
Here are the old and new signatures for the method:
As part of the refactoring to fully implement the VERSIONABLE attribute on datastreams, the signature for the API-M method named "modifyDatastreamByReference" has changed. The changes include removal of the "versionable" and "dsState" arguments. Changes to the state or versionable status of a datastream should be handled using the "setDatastreamState" and "setDatastreamVersionable" methods, respectively. The changes also include two new arguments named "checksumType" and "checksum". The "checksumType" argument specifies the checksum algorithm to use in computing the checksum value. Valid values are MD5, SHA-1, SHA-256, SHA-385, and SHA-512. The "checksum" argument is the value of the checksum represented as a hexadecimal string.
Here are the old and new signature for the method:
As part of the refactoring to fully implement the VERSIONABLE attribute on datastreams, the signature for the API-M method "modifyDatastreamByValue" has changed. The changes include removal of the "versionable" and "dsState " arguments. Changes to the state or versionable status of a datastream should be handled using the "setDatastreamState" and "setDatastreamVersionable" methods, respectively. The changes also include two new arguments named "checksumType" and "checksum". The "checksumType" argument specifies the checksum algorithm to use in computing the checksum value. Valid values are MD5, SHA-1, SHA-256, SHA-385, and SHA-512. The "checksum" argument is the value of the checksum represented as a hexadecimal string.
Here are the old and new signature for the method:
In response to the Fedora community, the signature for the API-M method named "purgeDatastream" has been changed to provide additional functionality. The new signature and underlying changes to the method enable the purging of a specific datastream version or purging of a range of datastream versions. Here are the old and new signatures:
Changes supporting this new functionality have also been made in the Fedora administrative client.
In Fedora 2.2 an alternate (RDBMS-based, more stable, less feature-rich) triplestore database can now be plugged in as Fedora's Resource Index. In addition, we are currently working on the messaging components necessary to support an optional, external Resource Index.
In response to requests from the Fedora community, the WSDL encoding for API-A and API-M have been changed from the former "rpc-encoded" encoding to the more widely supported "document/literal" encoding, using the "wrapped" convention. The "document/literal" encoding reflects current best practice and simplifies how Fedora API calls are represented over the network and increases interoperability with other WSDL-aware tools.
In response to requests from the Fedora community, an alternative method of exporting the Fedora WSDL has been implemented. The live WSDL for any Fedora repository is now available via HTTP GET at the path:
/fedora/wsdl
The WSDL provided under this path is publicly available, whereas the service endpoints themselves may or may not be protected. This is a change from previous versions, where the live WSDL was available at the service endpoint URL, by appending "?wsdl" to the URL. The change was made due to problems encountered with Apache Axis' live wsdl functionality. The new alternative should greatly improve interoperability between Fedora and other WSDL-aware software.
Prior to Fedora 2.2, there were some attributes available in the foxml1.0 schema that were not available in the metslikefedora1 schema. Fedora 2.2 updated the metslikefedora1 schema to bring it in compliance with the set of attributes available in the foxml1.0 schema. In particular, the metslikefedora1 schema now supports the attributes for VERSIONABLE, FORMAT_URI, and ALT_IDS on datastreams. In addition to these changes, support for the attributes of CHECKSUM and CHECKSUMTYPE on datastreams and support for the ownerId property of an object (using agent element in metsHeader element) were also incorporated into the metslikefedora1 schema. (see: www.fedora.info/definitions/1/0/api/mets-fedora-ext.xsd for complete details)
Fedora 2.2 updated the foxml1.0 schema to move the contentDigest element so that it now is the first element in the sequence rather than the last element. This change should not impact any existing objects since prior to Fedora 2.2, the contentDigest element existed in the foxml1.0 schema but was not implemented in the code so any use of this element was ignored by Fedora. Fedora 2.2 implements support for the contentDigest element with this change to the schema. In addition, the new value of info:fedora/fedora-system:def/model#ownerId was added to the enumeration list for propertyType to support the new property of ownerId. (see: www.fedora.info/definitions/1/0/api/foxml1-0.xsd for complete details)
Fedora 2.2 enhances the functionality of the API-M export method by implementing the "archive" context. When exporting objects using the "archive" context, all Managed Content and External Referenced Content datastreams will be embedded as base64-encoded binary blobs in the exported object xml. This enables the ability to completely export an object and all of its content in a single package that can easily be transported to a different repository with no dependencies on the originating repository.
Fedora 2.2 updates the Batch Modify client utility to include changes related to the API-M method signature changes previously mentioned. Changes also include support for new features like datastream checksums and the ownerId property. For details about specific changes to the Batch Modify directives schema, please refer to the batchModify.xsd schema file.
All of the services included in the Fedora Services Framework are updated to include the latest versions of the Fedora standard libraries and jar files. This change synchronizes library versions in the Service Framework with changes included in Fedora 2.2 server and client code.
The refactoring of the codebase necessary to make Fedora a standalone webapp also required extensive refactoring of the JUnit tests. Fedora 2.2 includes streamlining and simplification of the JUnit tests that will make future code testing much easier.
Fedora 2.2 includes significant performance enhancements for API-M and the Resource Index as compared with Fedora 2.1.1. Please consult the Fedora API-M Performance Report which contains before/after performance measurements between a typical Fedora 2.1.1 and Fedora 2.2 server.
Refer to Fedora's Bugzilla for full descriptions of the resolved bugs.
The following list includes bugs that are still listed as open as of the release date for Fedora 2.2. For details on these issues, please refer to the links below or visit Fedora's Bugzilla for the most current information.
For instructions on installing and upgrading Fedora, please consult the Installation Guide and the Fedora Upgrade and Migration Guide.