Table of contents
No headers
Dream conforms to MindTouch's version naming convention of using thematic names in alphabetical order. Dream releases are named after colors.
| Release | When | Description |
| Aqua | July 24, 2006 | First public release of Dream. Runtime: - .Net 2.0 and Mono 1.1.16 compatible
- console host application
- complete asynchronous message processing pipeline
- http and direct in-memory message transports
- JSON and HTML document encodings for XML
- automatic service state serialization
Services: - Host
- Storage
- Directory
- Events
- Statistics
- Mount
- FileSystemMount
- Redirect
- Timer
|
| Beryl | October 14, 2006 | Runtime: - new XML document encodings: PHP, Versit, xSpan
- new prolog/epilog handling for features
- support for cookies
- new dream-request processing options
- new async plug processing
Services: - HostService (new features)
- Log4Net
- Events (new features)
- Directory (new features)
Misc: |
| Crimson | March 23, 2007 | Runtime: - much improved performance
- many improvements to XDoc, Plug, and XUri
- asynchronous programming with iterators
- managed global state for asynchronous free-threaded continuations
- improved Dream attributes
- services identified by global URIs (SIDs)
- support for path parameters based on URI templates (e.g. /path/{param}/)
- support for segment parameters (e.g. /segment;param/)
- unified access to path & query parameters
- DreamKernel (formerly DreamEnvironment) now fully decoupled from HTTPListener transport (allows embedding int ASP.Net, etc.)
- service URIs can now be a mixture of parameters and constant symbols (e.g. /name/{param}/action)
Toolbox: - mindtouch.apitest makes it easy to interact with Dream services
- mindtouch.blueprints generates publishable blueprint XML documents from compiled services
|
| Denim | September 24, 2007 | Runtime: - many improvement to XDoc
- more asynchronous core methods
- support for co-routines
- improved logging support for DreamHost
- support for multi-home host names (i.e. host name is relative to incoming request)
- added xml diff engine (XDocDiff)
- added xml structural check engine (XDocCop)
- hiding of many Dream infrastructure calls in debugger
- stability improvements
Services: - AtomService
- PrivateStorageService
Toolbox: - mindtouch.blueprint published DreamService documentation to any Deki Wiki site
|
Emerald | February 27, 2008 | Runtime: - performance tuning
- memory footprint tuning
- simpler instantiation of the host service
- XDoc diffing and 3-way merge
- catch handlers for asynchronous operations
- eliminated all uses of NameValueCollection (it's slow, a memory hog, and buggy)
- much improved support for instantiating objects from a catalog
- support for independent culture per request for multi-lingual services
|
| Emerald+ | March 17, 2008 | Runtime: - (bug 3504) audited all Dictionary<string, V> declaration to ensure they are culture invariant
- (bug 3493) added "server-path" config parameter that tells the host what the public URI path is
- (bug 3493) append 'server-path' to 'server-name' during initialization
- (bug 3495) fixed 'UnescapeString()' escaping issue
- (bug 3460) added 'AsInnerText' to retrieve all nested text in a node
- (bug 3449) 'RemoveAll()' and 'Remove()' now also works on attribute nodes
- (bug 3459) don't throw exceptions when the same file is PUT twice
- (bug 2426) features links in /@about are wrong
- (bug 3521) added 'AtPath()' to run xpath expression with custom namespaces
- (bug 3520) always define default namespace prefix (_)
- (bug 3522) refactored computation for public uri
|
| Emerald++ | May 5, 2008 | Runtime: - support for ICredentials with Plug
- support for IPv6 based network addresses
- support for HTTP Range headers
- enhanced methods for manipulating XML documents with XDoc
- improved performance for deployments with large number of aliases
- removed status filters on service features
- and other bug fixes
|
| Emerald+++ | June 3, 2008 | Runtime: - support for XML digital signatures with XDoc
- optimized this[string] xpath selector on XDoc for simple paths
- response caching in DreamService
- optimized text analysis in XDocDiffUtil
- (bug 4064) fixed comparison bug on XUri
- (bug 4136) preserve whitespace when parsing XML documents with XDocFactory
- allow wildcard element (i.e. "*") in definitions for XDocCop
|
| Emerald+4 | July 2, 2008 | Runtime: - fixed bug with HttpHandler always returning 200 under IIS
- recognize proper application root under IIS
- added TEXT_UTF8 to MimeType
- optimized Diff method in ArrayUtil
|
| Emerald+5 | July 28, 2008 | Runtime: - split XUri class into two files so that the base functionality can be used in other projects without using Dream
- GET/HEAD/OPTIONS requests no longer send in a content-type unless explicitly stated
- fixed XUri comparison when query parameters are present
- escape '?' in XUri query parmaters since IIS and Apache handle it differently
- dispose of iterator in coroutines when done
- allow overriding GET verb if override is HEAD or OPTIONS
- made 'Set-Cookie' header RFC 2965 compliant
|
| Emerald+6 | September 4, 2008 (October 21, 2008) | License: Runtime: - added WebDAV status codes
- services may check for optional activation key on startup
- services can now provide custom OPTIONS handler
- DreamMessage.AsDocument() now throws an exception if content is non-empty and cannot be parsed into an XML document
- XDoc now always preserves whitespace
- XDocDiff no longer splits words separated by underscore or digits separated by dot/comma
- Accept-Language header can now always instantiate a specific-culture, even if a neutral culture is specified (e.g. "de" vs "de-ch")
- fixed issue in XDocCop that was adding unnecessary characters during validation
- fixed issue in TaskTimer that could cause the timer queue to stall and not fire anymore
|
| Emerald+7 | December 8, 2008 | Runtime: - MimeType: added support for recognizing the proper mime-type for .pdf files
- XUri: improved error exception description when ChangePrefix() fails
- XUriMap: applied fix from trunk
- XDoc: don't throw exceptions for RemoveNodes() or RemoveAttr() when selection is empty
|
| Fire | February 26, 2009 | Runtime: - Async
- Added ForkThread to run forked code on dedicated background thread instead of threadpool thread
- BlockingQueue
- created BlockingQueue<T> for thread-safe producer/consumer scenarios
- Cookies
- Refactored Dream cookie logic to use DreamCookie rather than native Cookie class
- DreamCookie automatically handles local:// <-> http:// transition
- CookieJar
- will consider both public and local variants of a URL when fetching cookies
- CultureUtil
- Methods for retrieving non-neutral culture
- DreamContext
- added User property to retrieve and set IPrincipal
- ServerUri uses Ip instead of Hostname for default derivation
- PublicUri can be overriden with different value on a per request basis
- Skipping IPv6 addresses in host address inspection when trying to derive PublicUri
- DreamHost
- Fixed incorrect error message when script fails to load
- Posting against "services" to create a services now returns a result document with the internal and private keys
- DreamHostService
- DreamHostService: set IPrincipal for authenticated user
- Enumerates all loaded Assemblies, their version, build date and if applicable svn info at /host/version
- DreamMessage
- added Ok constructor using array of KeyValuePair<string, string>, which creates a form-encoded message (replaces similar constructor which was based on XUri)
- FromFile() no longer catches exceptions (e.g. FileNotFound) and let's them pass through instead
- DreamService
- Now contains a PubSub plug pointing at the default (or configured) PubSubService
- Added DreamContext as parameter to DetermineAccess
- DreamServiceState
- Email Service
- Can send smtp email messages
- Accepts multiple smtp server configurations indexed by caller determined key
- HttpHandler
- fetch IPrincipal for current request
- HttpPlugFactory
- use ToUri() on XUri to get a properly escape Uri
- HttpTransport
- fetch IPrincipal for current request
- Plug
- Allows overring the global CookieJar with a custom CookieJar
- use new DreamMessage constructor in PostQuery() to create form-encoded messages
- PlugHandler
- Now also receives the un-normalized Uri
- Plug mocking tools
- MockPlug
- Create a callback to incerpect Plug calls for testing
- AutoMockPlug
- Record/Playback/Verify style mocking tool for Plug calls
- Publish & Subscribe Service
- Event publish and subscribe service
- Can chain multiple services together with subscription progragation both up and down stream
- ResourcePlug
- set caching header and respond with Not-Modified (304) when the same resource is requested again by a conditional GET
- Storage Service / Private Storage Service
- Consolidated public and private storage into a single service and provide a shared private storage services as the default service to all services
- StringUtil
- 'ByteFromHexString()' now works for strings of arbitrary length
- added RepeatPattern() helper method
- 'ReplaceWithDelimiters()' now works even when the start and stop delimiter are the same
- XDoc
- added ReverseList() method to reverse selection
- XDocCop
- don't automatically replace CDATA section with their text equivalents
- added 'Verify()' function to check if a document would be affected if 'Enforce()' were invoked
- XDocDiff
- compute optionally attribute changes as well
- fixed bug in how attribute changes are tracked
- Highlight() now de-interleaves text changes when generating a composite diff document
- highlight changes in before and after documents as well
- XException
- added XML deserialization for exceptions
- Xuri
- improved error reporting for 'ChangePrefix()' method
- when converting to Uri, escape trailing '.' characters in segments as Uri will otherwise remove them
- XUriChildMap
- As opposed to XUriMap which returns the best matching entry for a XUri, XUriChildMap will returns a collection of all XUris matching an XUri.
- Accepts wildcard as map entries containing hostport and path trailing wildcards
- Can be made scheme insensitive
|
| Garnet | August 24, 2009 | Runtime: - Plug
- Added ext-http:// and ext-https:// XUri schemes to force connections for locally available endpoints to go across the wire
- Added InvokeAsyncEx()
- DreamContext & XriPlug changed to use InvokeAsyncEx()
- MockPlug
- Updated MockPlug to always win for any URL it might handle
- Added AutoMockPlug class for easily creating Arrange/Act/Assert style testing of DreamServices
- Dream
- Created IServiceActivator to separate service instantiation by Dream for possible substitution interception by an IoC Container
- Fixed request uri handling for HttpHandler and HttpTransport
- Changed @api/host/version to include build date and svn info
- Tasking
- Deprecated TaskBehavior to be replaced by TaskEnv
- Result
- Returning/throwing a result is now done in a lock-free fashion
- Added support for cancellation
- Inlined RendezVousEvent into ResultBase
- Coroutine
- Inlined coroutine iteration loop to minimize number of nested delegate calls
- Show name of function with missing result when possible
- Introduced Task helpers for wrapping a delegate in a TaskEnv
- Async
- Async.Fork logic uses TaskEnv wrapper to capture current environment
- ExecuteProcess: added try-catch around closing standard input stream
- Added .From() for adapting existing asynchronous callbacks to Dream Async Method Pattern
- Updated Read/Write to use the new From() methods
- Added ForkThread to fork work onto a dedicated, non-threadpool thread
- Added GlobalClock: Central clock that pings at regular intervals all instances that require regular maintenance
- TaskTime: Using central GlobalClock instead of dedicated thread for regular scheduled maintenance work
- Data
- Added SLOW Sql logging to DataCommand
- Revised how DbProviderFactories are discovered and accessed
- Obsoleted DataCatalog constructor that was mysql specific
- Misc
- StringUtil
- Added support hexadecimcal literal html entities to DecodeHtmlEntities()
- Replaced InvariantCulture with Ordinal for string comparisons
- Replaced all doc.opengarden.org with developer.mindtouch.com
- Converted all solutions & projects to VS2k8
- Various clean-up of improper disposal of IDisposables
- Fixed Timezone bug in Dreamcookie (would render as UTC, without making sure datetime was actually utc)
- SysUtil
- Added IsMono() method to detect the mono runtime
- Added Rethrow() method to rethrow an exception without destroying it's existing stack-trace (if possible)
- Added CAS<T>() method for Lockfree operations
- Added a number of lock-free collections for more efficient concurrent access
- First version of new Threadpool
- Currently has to be manually activated to displace standard threadpool
- Provides distinct elastic workqueues
- Provides work stealing mechanisms for workload balancing
- Uses GloblalClock for thread maintenance work
- DispatchThread: thread with local work-item queue that can be stolen from
Services - PubSubService
- PubSub Dispatcher: blocking on queued item execution to prevent excessive async task scheduling
- refactored PubSub Dispatcher to no longer use throttling WorkQueue instead of IBlockingQueue
- refactored PubSub.Dispatcher to use coroutines instead of methods to stay clear or ElasticThreadpool issue
- refactored PubSubService /subscribers/{id} authorization logic to use an access-key token in query args or cookies
- refactored separate Publish and Subscribe Uri's for DreamServices to use just PubSub, since pub and sub are irrevocably coupled for upstream and downstream chaining
- EmailService
- added ability for email service to have different configurations
- added ability to set headers for emails
|
| Garnet+ | October 26, 2009 | Runtime - Dream
- DreamFeatureStage, XUri: removed lock around XmlNameTable (it's threadsafe now)
- DreamHostService: show more information about XmlNameTable; added feature to list all strings in the XmlNameTable
- DreamHostService: show stats for LockFreeXmlNameTable in GET:/status
- DreamHostService, status.xslt: show app.config settings and avg. lookup overhead for global xml nametable
- status.xslt: added conditional display of global LockFreeXmlNameTable statistics
- Tasking
- Result: changed 'AcceptCancel()' to 'Canceled()'
- XDoc
- XDoc: use XmlNameeTable from SysUtil
- Misc
- LockFreeXmlNameTable:
- compute distribution differently by counting the number of keys for each level (instead of the buckets and their depths)
- compute avg. lookup overhead
- improved returned statistics about the XmlNameTable instance
- MimeType: default charset for text/* is ASCII (not ISO-8859-1)
- SysUtil: XmlNameTable capacity can be configured using "xmlnametable-capacity" in App.config
- StringUtil: added custom hashcode methods
|
| Garnet++ | December 18, 2009 | Bug 7255: Cookie parsing was incorrect when comma present in unquoted value |
| Hammerhead | TBD | |
| Indigo | TBD | |
| Jade | TBD | |
| Khaki | TBD | |
| Lapis | TBD | |
| Mocha | TBD | |
| Navy | TBD | |
| Opal | TBD | |
| Pearl | TBD | |
| Quartz | TBD | |
| Ruby | TBD | |
| Sapphire | TBD | |
| Topaz | TBD | |
| Ultramarine | TBD | |
| Violet | TBD | |
| White | TBD | |
| X | TBD | |
| Yellow | TBD | |
| Zenith | TBD | |