Table of Contents

  1. Fedora 2.2 Release
  2. New Features And Enhancements
  3. Performance Tuning
  4. Bug Fixes
  5. Known Issues
  6. Installation
  7. Historic Release Notes (prior releases)

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.

  1. Fedora 2.2 Release

    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 http://fedora.info/wiki/index.php/UpgradingYourApplicationForFedora2.2.

  2. New Features and Enhancements
    1. Fedora now requires Java 1.5 or highernew item image

      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.

    2. Fedora WAR file repackaging and installernew item image

      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.

    3. Refactoring authentication using ServletFiltersnew item image

      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.

    4. New method "compareDatastreamChecksum" added to API-Mnew item image

      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:

      public String compareDatastreamChecksum(String PID, String datastreamID, String versionDate)

      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.

    5. Journalingnew item image

      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

    6. Add ownerId object property for a digital objectnew item image

      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.,

      <foxml:objectProperties> <foxml:property NAME="http://www.w3.org/1999/02/22-rdf-syntax-ns#type" VALUE="FedoraObject"/> <foxml:property NAME="info:fedora/fedora-system:def/model#state" VALUE="A"/> <foxml:property NAME="info:fedora/fedora-system:def/model#label" VALUE="Image of Coliseum in Rome"/> <foxml:property NAME="info:fedora/fedora-system:def/model#contentModel" VALUE="UVA_STD_IMAGE"/> <foxml:property NAME="info:fedora/fedora-system:def/model#ownerId" VALUE="payette"/> </foxml:objectProperties>

      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.,

      <METS:metsHdr CREATEDATE="2006-12-07T13:23:46.962Z" LASTMODDATE="2006-12-07T13:23:46.962Z" RECORDSTATUS="A"> <METS:agent ROLE="IPOWNER"> <METS:name>payette</METS:name> </METS:agent> </METS:metsHdr>

      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:

      Old public String modifyObject(String PID, String state, String label, String logMessage) New public String modifyObject(String PID, String state, String label, String ownerId, String logMessage)

      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.

    7. Fedora Supports Log4j Loggingnew item image

      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.

    8. Fedora Generic Search integrated into Fedora Service Frameworknew item image

      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

    9. New support for PostgreSQL databasenew item image

      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

    10. VERSIONABLE attribute on datastreams fully implemented

      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:

      public String setDatastreamVersionable(String PID, String datastreamID, boolean versionable, String logMessage)

      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.

    11. Changes to "addDatastream" method in API-M

      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:

      Old public String addDatastream(String pid, String dsID, String[] altIds, String label, boolean versionable, String MIMEType, String formatURI, String location, String controlGroup, String dsState, String logMessage) New public String addDatastream(String pid, String dsID, String[] altIds, String label, boolean versionable, String MIMEType, String formatURI, String location, String controlGroup, String dsState, String checksumType, String checksum, String logMessage)
    12. Changes to "modifyDatastreamByReference" method in API-M

      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:

      Old public String modifyDatastreamByReference(String PID, String datastreamID, String[] altIDs, String dsLabel, boolean versionable, String mimeType, String formatURI, String dsLocation, String dsState, String logMessage, boolean force) New public String modifyDatastreamByReference(String PID, String datastreamID, String[] altIDs, String dsLabel, String mimeType, String formatURI, String dsLocation, String checksumType, String checksum, String logMessage, boolean force)
    13. Changes to "modifyDatastreamByValue" method in API-M

      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:

      Old public String modifyDatastreamByValue(String PID, String datastreamID, String[] altIDs, String dsLabel, boolean versionable, String mimeType, String formatURI, byte[] dsContent, String dsState, String logMessage, boolean force) New public String modifyDatastreamByValue(String PID, String datastreamID, String[] altIDs, String dsLabel, String mimeType, String formatURI, byte[] dsContent, String checksumType, String checksum, String logMessage, boolean force)
    14. Change to "purgeDatastream" method in API-M

      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:

      Old public String[ ] purgeDatastream(String pid, String datastreamID, String endDT, String logMessage, boolean force) New public String[ ] purgeDatastream(String PID, String datastreamID, String startDT, String endDT, String logMessage, boolean force)

      Changes supporting this new functionality have also been made in the Fedora administrative client.

    15. Resource Index Enhancements

      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.

    16. WSDL changes

      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.

    17. WSDL servlet

      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.

    18. METS schema changes

      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)

    19. FOXML schema changes

      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)

    20. Export Context Of "Archive" Implemented

      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.

    21. Changes to Batch Modify Client Utility

      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.

    22. Updates To Services In Fedora Services Framework

      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.

    23. JUnit Refactoring

      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.

  3. Performance Tuningnew item image

    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.

  4. Bug Fixes

    Refer to Fedora's Bugzilla for full descriptions of the resolved bugs.

    • Bug #28: purging object does not close object pane in Admin GUI
    • Bug #030: Admin GUI--if datastreams entered first, can't bind disseminators
    • Bug #119: backslash in dc:anything fails sometimes
    • Bug #120: ant build sometimes requires priming action, e.g., deleting a file
    • Bug #121: ant clean nulls mckoi db
    • Bug #123: autoFlushDoemantSeconds takes an integer value, not a boolean
    • Bug #124: API-A Lite search does not correctly handle international characters
    • Bug #128: Proai rcAdmin date should be per-format
    • Bug #129: Proai robustness - transactions and error recovery
    • Bug #140: Problems using Fedora-API-A WSDL in .NET framework
    • Bug #141: using WSDL tool to create C# class
    • Bug #160: fedora-reload-policies.sh gives Usage error if run with no arguments
    • Bug #163: OAI Provider update query fails when sets are not configured
    • Bug #165: API-M ingest has 'xml' as param name, which causes soap:lite problems
    • Bug #167: Object Editor window always acts as if modification has occurred
    • Bug #169: fedora-start.bat script failure due to certain characters
    • Bug #170: DefaultAuthorization.postInitModule ModuleInitializationException
    • Bug #171: Delayed shutdown while deleting Trippi tempfiles
    • Bug #172: OAI Provider Service: deleted status via custom property not working
    • Bug #173: FedoraClient takes over logging
    • Bug #176: "log_dir does not exist" error message when log directory does exist
    • Bug #177: fedora-start.bat script: sleep is not a command
    • Bug #179: PID namespace syntax: conflicting definitions
    • Bug #180: Too Many Open Files error message
    • Bug #182: bMech Builder does not properly serialize multiple mimetypes in DSInputSpec
    • Bug #183: Datastream ID beginning with a alphanumeric allowed by admin client
    • Bug #184: Problem exporting objects as METS that were originally ingested in METS format
    • Bug #185: Concurrent modification of same object can cause deletion
    • Bug #186: Double URL encoding for PIDs that contain escape characters
    • Bug #189: Oracle CLOB size limit for FieldSearch indexing
    • Bug #190: Dupes in RI (triples not being deleted?); duplicate of #193
    • Bug #191: MIMETYPE not properly xml-escaped in FOXML and METS serializations
    • Bug #193: Missing/duplicate RDF triples from Resource Index
    • Bug #194: ResourceIndex disseminationTypes incorrect when parm is unfixed
    • Bug #195: ResourceIndex leaves triples for purged datastreams and disseminators
    • Bug #196: ResourceIndex gives extra dissType when user param is required
    • Bug #197: Various incorrect use of Boolean.getBoolean(String)
    • Bug #198: Lots of character encoding problems in Fedora documentation
    • Bug #199: POLICY datastream parsing fails when description is empty
    • Bug #200: BasicPIDGenerator lazy initialization can create multi instances
    • Bug #201: RFC 2616 Section 3.6.1 not supported for transfer-encoding=chunked
    • Bug #202: Fedora server and client limited to 2 GB max file size transfer
    • Bug #203: DefaultAuthorization.enforceIngestObject ignores PID
    • Bug #204: PolicyFinderModule classErrors static, necessitates reboot
    • Bug #205: policy file deny-inactive-or-deleted-disseminations-if-not-administrator.xml incorrect

  5. Known Issues

    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.

    • Bug #10: Behavior Mechanisms with SOAP Bindings Not Yet Supported
    • Bug #118: fix soap/axis error detail
    • Bug #122: size attribute only works with "X" datastreams
    • Bug #126: LLStore pluggability
    • Bug #153: validation error when namespace for in-line XML datastreams is in root element
    • Bug #161: Minor typos in tutorial2.pdf
    • Bug #164: Invalid policies embedded in POLICY datastream of objects makes objects inaccessible
    • Bug #168: SRB LowlevelStore Issues (for pre Fedora 2.2)
    • Bug #174: iTQL less-than queries only work on xsd:double datatyped values
    • Bug #175: User-provided logMessages NOT recorded for object-level API-M methods
    • Bug #178: Shutdown relies on servlet container to ensure requests are complete
    • Bug #187: Unhelpful error from server when adding/modding disseminator with invalid binding
    • Bug #188: WSDL should declare faults
    • Bug #192: Hash collision can cause rebuilder to skip some objects
  6. Installation

    For instructions on installing and upgrading Fedora, please consult the Installation Guide and the Fedora Upgrade and Migration Guide.

  7. Historic Release Notes
     Release notes for previous versions of Fedora: [2.1.1], [2.1], [2.1b], [2.0], [1.2.1], [1.2], [1.1.1], [1.1], [1.0], [0.9], [Beta 1], [Alpha 1]