Publication Steps involve multiple steps and may involve multiple systems. For example below is a sample implementation we have done which involves Fedora.

  1. Start a transaction
  2. Create a version snapshot
  3. Create a container/folder to capture the details of the version
  4. Add properties to this container folder
  5. Invoke DOI service generation by posting XML to external DOI vendor
  6. Send provenance information to an ElasticSearch index
  7. Send a JMS message to external Preservation Manager component to perform AIP creation and replicating to other storage locations.
  8. Make entries to oracle table with details necessary for dissemination system for publication display.
  9. Commit transaction

Ideally we would like the capability to bind all this into a single global transaction using a JTA Implementation provider and Spring Framework.  

So hopefully if Fedora Transaction API is defined to work with  two-phase commit (2PC) strategy and allows hooks into readily available JTA providers will be great.

5 Comments

  1. On my reading, this is a use case for a long-running durable atomic operation, but it doesn't seem to require isolation or consistency. Can you describe what use would be made here of those two latter qualities?

  2. The Fedora API is a specification for HTTP behavior, so it's not clear to me in what sense it could "allow hooks into readily available JTA providers". This seems like perhaps a role for middleware like Apache Camel...

  3. I haven't given much thought so far into consistency and isolation. I will add more use cases as I explore our requirements.

    Isolation; Right now our use cases involves a single user editing the contents and then only versioned contents are visible to others in a read only mode. In that case it may not be a primary concern. But I can imagine it becoming a requirement if we allow users to share work space and edits on the same resources. I will think about it and add to the above list as I figure out, or at least requiring some kind of optimistic locks on records?

    Consistency:  My knowledge & experience is really limiting and am unable to clearly define this property for our use cases. Making sure reference URI exists? Or Datatypes enforced? Validated against ontology specification?

     

     

    1. Just to be clear, I was not suggesting that there is necessarily a component of isolation or consistency in your use cases, and there may very well not be. I was just asking you to clarify whether or not there is.

    2. Optimistic locking is currently achievable by passing in the etag retrieved from the previous GET request on a resource when you are subsequently making an update to that resource... in which case you will get a 412 Precondition Failed response.