ingo@332: 2011-09-19     RELEASE 1.4
ingo@332: 
ingo@332:     !! Release 1.4 is no longer API compatible with old versions of this module !!
ingo@332: 
ingo@332:     NEW:
ingo@332: 
ingo@332:         * Modified the signature of Artifact.setup() -> Artifact.setup(CallMeta).
ingo@332:           The CallMeta is required for I18N support while setting up an
ingo@332:           Artifact. !! THIS MODIFICATION BREAKS THE CURRENT API !!
ingo@332: 
ingo@332:         * Modified the signature of Service.setup() -> Service.setup(GlobalContext).
ingo@332: 
ingo@332:         * Introduced a LifetimeListener interface: applications can register
ingo@332:           instances of this interface to execute tasks after the system goes and
ingo@332:           and before the system goes down.
ingo@332: 
ingo@332:         * Introduced a BackendListener interface: applications can register
ingo@332:           instances of this interface to execute tasks after an event has been
ingo@332:           fired. See the JavaDoc of BackendListener for detailed descriptions of
ingo@332:           the events.
ingo@332: 
ingo@332:         * Introduced "Hooks": Hooks can be used to execute tasks at a specific
ingo@332:           point in time. In our cases, Hooks can be executed before/after feed()
ingo@332:           and advance() operations.
ingo@332: 
ingo@332:         * Introduced a GlobalContext interface for the global context object:
ingo@332:           this interface describes two method to put new objects into this
ingo@332:           context and a method to retrieve objects from this context.
ingo@332: 
ingo@332:         * Introduced a CreationFilter: this filter might be used to create
ingo@332:           Artifacts with restricted Outputs/Facets.
ingo@332: 
ingo@332:         * Introduced a Message interface: Messages might be used by background
ingo@332:           threads to provide information about the process (e.g. status reports).
ingo@332: 
ingo@332:         * Improved ArtifactDatabaseImpl to support background messages.
ingo@332: 
ingo@332:         * Improved the CallContext interface: added a method isInBackground()
ingo@332:           that determines if the current Artifact has started a background
ingo@332:           thread which is still processing.
ingo@332: 
ingo@332:         * Improved the CallContext interface: added methods to add/retrieve
ingo@332:           background messages.
ingo@332: 
ingo@332:         * Improved the State interface: added a endOfLife() method that should
ingo@332:           be called by owner Artifacts.
ingo@332: 
ingo@332:         * Improved the interface of Facets: added a deepCopy() method to be able
ingo@332:           to clone Facets.
ingo@332: 
ingo@332:         * Improved the interface of Facets: added a toXML() method.
ingo@332: 
ingo@332:         * Improved the ArtifactDatabase: added a method loadAllArtifacts(ArtifactLoadedCallback)
ingo@332:           to load all Artifacts of an ArtifactCollection.
ingo@332: 
ingo@332:         * Improved XMLUtils: added support for variables in XPath expression.
ingo@332: 
ingo@332:         * Added a FileTools helper class that implements some convinience
ingo@332:           functions to work with files.
ingo@332: 
ingo@332:         * Some little improvements in ClientProtocolUtils.
ingo@332: 
ingo@332:         * Bumped SLF4J up to 2.0.7.
ingo@332: 
ingo@332:         * Bumped H2 up to 1.3.158.
ingo@332: 
ingo@332:         * Bumped Apache DBCP up to 1.4.
ingo@332: 
ingo@332:         * Bumped PostgreSQL driver up to 8.4-702.jdbc4.
ingo@332: 
ingo@332: 
ingo@332:     FIXED:
ingo@332: 
ingo@332:         * flys/issue20 (Versions-Clash bei slf4j verhindert Start des Artefakt-Servers.)
ingo@332: 
ingo@332: 
ingo@332: 
ingo@287: 2011-06-27     RELEASE 1.3
ingo@287: 
ingo@287:     NEW:
ingo@287: 
ingo@287:         * Bumped Restlet to version 2.0.7.
ingo@287: 
ingo@287:         * Use a Jetty server by default to handle HTTP requests.
ingo@287: 
ingo@287:         * Introduced a config option that allows to switch the HTTP server
ingo@287:           manually.
ingo@287: 
ingo@287:         * Introduced a config option that allows to limit the max number of
ingo@287:           threads used by the Restlet server. Defaults to 1024.
ingo@287: 
ingo@287:         * New REST interface to set the time-to-live of a Collection. This
ingo@287:           operation takes a java native long value or one of the strings "INF" -
ingo@287:           which means a Collection lives forever - or "DEFAULT" which means to
ingo@287:           reset the time-to-live to the default value configured in the artifact
ingo@287:           server.
ingo@287: 
ingo@287:         * New REST interface to set the name of a Collection.
ingo@287: 
ingo@287:         * Improved the ClientProtocolUtils to create documents for the operation
ingo@287:           to set the Collection's time-to-live.
ingo@287: 
ingo@287:         * The time-to-live of Collections is accessible in Collection objects.
ingo@287: 
ingo@287:         * Introduced a "creation" timestamp for CollectionItems.
ingo@287: 
ingo@287:         * Facets got a new property "index".
ingo@287: 
ingo@287: 
ingo@287:     FIXED:
ingo@287: 
ingo@287:         * A a new out() method is called that takes the "type" parameter specified in
ingo@287:           the REST url to specify the concrete output type. This parameter has
ingo@287:           not been used until now.
ingo@287: 
ingo@287:         * flys/issue75 Fixed SQL syntax error in trigger creation.
ingo@287: 
ingo@287: 
ingo@287: 
ingo@259: 2011-05-13     RELEASE 1.2
ingo@259: 
ingo@259:     NEW:
ingo@259: 
ingo@259:         * Introduced "facets" as a new concept to select only parts/concrete
ingo@259:           types of an Artifact's output. E.g. a computation might return data
ingo@259:           that is used to draw two curves into a chart. With a "facet", just a
ingo@259:           single curve might be selected to be drawn into the chart.
ingo@259: 
ingo@259:         * New REST interfaces to set/get attributes of an ArtifactCollection.
ingo@259: 
ingo@259:         * Artifacts that live in ArtifactCollections don't die (because of their
ingo@259:           last_access time). A database trigger is used to update their
ingo@259:           last_access time if their owner ArtifactCollection is updated.
ingo@259: 
ingo@259:         * DatabaseCleaner removes outdated ArtifactCollections.
ingo@259: 
ingo@259:         * XML documents stored aside users, collections and collection items are
ingo@259:           compressed to reduce i/o costs.
ingo@259: 
ingo@259:         * Introduced a listener mechanism that is called if a context is
ingo@259:           created/closed. This listener might be implemented in concrete
ingo@259:           artifact packages.
ingo@259: 
ingo@259:         * Improvements in the ClientProtocolUtils: new functions to create
ingo@259:           special xml documents
ingo@259: 
ingo@259: 
ingo@259:     FIXED:
ingo@259: 
ingo@259:         * flys/issue8 (Cleanup des DatabaseCleaner schlägt fehl)
ingo@259: 
ingo@259:         * flys/issue9 (Fehler beim Laden von Artefakten - NO SUCH ARTIFACT obwohl Artefakt in DB vorhanden)
ingo@259: 
ingo@259: 
ingo@259: 2011-03-30     RELEASE 1.1
ingo@259: 
ingo@96: 2010-04-28     RELEASE 1.0
ingo@96: 
ingo@96:     New:
ingo@96: 
ingo@96:         * The path to database in the configuration can be relative to the
ingo@96:           central configuration document using ${artifacts.config.dir} as
ingo@96:           root.
ingo@96: 
ingo@96:         * New interfaces to export and import artifacts:
ingo@96: 
ingo@96:           HTTP GET  '/export/{uuid}'     returns an xml document representing
ingo@96:                                          the state of an artifact
ingo@96:           HTTP POST '/import'            takes an xml document that have
ingo@96:                                          been created by /export before
ingo@96: 
ingo@96:           The export mechanism uses a secret configured in the configuration
ingo@96:           to sign export documents. An artifact import fails if the
ingo@96:           signature of the xml document is not valid.
ingo@96: 
ingo@96:         * The time to live of an artifact is queriable at the CallContext
ingo@96:           object.
ingo@96: 
ingo@96: 
ingo@96:     Added:
ingo@96: 
ingo@96:         * JavaDoc documentation
ingo@96: 
ingo@96: 
ingo@96: 
ingo@96: 2010-03-08     RELEASE 0.5
ingo@96: 
ingo@96: 
hans@74: 2010-01-27     RELEASE 0.4
hans@74: 
hans@74:         New:
hans@74: 
hans@74: 		* Extended XML helper utilities a bit more
hans@74:                 * Added a new interface describing services 
hans@74:                 via XML documents via /services
hans@74:                 
hans@74: 
sascha@63: 2009-12-17      RELEASE 0.3
sascha@63: 
sascha@63: 	New:
sascha@63: 
sascha@63: 		* Extended XML helper utilities a bit
sascha@63: 		* Added a new general proxy artifact.
sascha@63: 		
sascha@63: 	FIXED:
sascha@63: 
sascha@63: 		* issue106: Konfiguration der GNV-Chart-Templates gehört nicht in das Artefakt-Framework
sascha@63: 
hans@57: 2009-11-13      RELEASE 0.2
hans@57: 
hans@57: 	New:
hans@57: 
hans@57:         * Configuration documents can be made relativ to
hans@57:         ${artifacts.config.dir}
hans@74:  
hans@57:         * Splitting up configuration of artifacts in depence to the
hans@57:         product.
hans@57: 
hans@57:         * Added a first HOWTO for setting up the environemt and the
hans@57:         artifact server
hans@57: 
sascha@53: 2009-10-07     RELEASE 0.1
sascha@53: 
sascha@53: 	New:
sascha@53: 
sascha@53: 	* Two sub projects: 'artifacts' and 'artifact-database'
sascha@53: 	
sascha@53: 		- 'artifacts' is a set of generic interfaces modelling 
sascha@53: 		  the workflow to parameterize a process and producing
sascha@53: 		  outputs.
sascha@53: 
sascha@53: 		  An artifact is created via factories. It describes
sascha@53: 		  itself via 'describe', it is parameterized via
sascha@53: 		  'feed' and brought to new states with 'advance'.
sascha@53: 		  Once able to produce output 'out' returns the
sascha@53: 		  requested product.
sascha@53: 
sascha@53: 		- 'artifact-database' is the default implemention
sascha@53: 		  of the workflow described with 'artifact'.
sascha@53: 
sascha@53: 	* artifact-database persists artifacts with a H2-database
sascha@53: 	  [http://www.h2database.com] (default) or a
sascha@53: 	  PostgeSQL 8.3+ database [http://www.postgresql.org/] (optional)
sascha@53: 
sascha@53: 	* artifacts may spawn background threads to copy with long running
sascha@53: 	  processes. After finishing work they are able to re-synchronize
sascha@53: 	  themselves to the artifact database.
sascha@53: 
sascha@53: 	* artifact-database is accessible via an HTTP REST server
sascha@53: 	  implemented on top of the Restlet API http://www.restlet.org/
sascha@53: 	  It has to be started as a service. Default TCP port: 8181
sascha@53: 
sascha@53: 	  HTTP GET  '/factories'             returns list of available factories.
sascha@53: 	  HTTP GET  '/create'                creates new artifact.
sascha@53: 	  HTTP GET  '/artifact/{uuid}'       returns a description of an artifact.
sascha@53: 	  HTTP POST '/artifact/{uuid}'       modifies an artifact ('feed', 'advance')
sascha@53: 	  HTTP POST '/artifact/{uuid}/{out}' delivers output for an artifact.
sascha@53: 
sascha@53: 	* artifact-database is configured with as XML file named conf.xml
sascha@53: 	  (default placement in directory $HOME/.artitactdb, directory
sascha@53: 	  may be changed with system property "artifact.database.dir")