Merge pull request #4 from rpetrano/signalr_mono

Added SignalR for Mono.

Mono's UriTemplateMatch implementation has a bug: wildcard parameters get matched with an '/' at the beginning. For example:

var fullUri = new Uri("http://localhost:8999/Crud.svc/Client.ClientSession/d83049ff-d8b8-4138-861d-e4d45ad5e835");
var template = new UriTemplate("/Crud.svc/{domainObject}/{*uri}");
When you match those two, you get uri == "/d83049ff-d8b8-4138-861d-e4d45ad5e835".

This is a simple workaround. However it won't work in this example:

var fullUri = new Uri("http://localhost:8999/Crud.svc/Client.ClientSession?uri=/d83049ff-d8b8-4138-861d-e4d45ad5e835");
var template = new UriTemplate("/Crud.svc/{domainObject}?uri={uri}");
Now URI doesn't have a starting '/' because the workaround deleted it. Since you said that most URI's starts with an '/' I should delete it.
Strong name removal from plugins.

Plugins should not be referenced from any project, only among themselves.
Since latest version of plugin is always preferrable and they are xcopied instead of placed into GAC,
strong naming should be removed.

Removed references to rest cache project - this currently causes problems in Mono since not all dlls are copied to output path.

TODO: add script in Monodevelop for copying plugins dll to output path.
Removed unneeded references.
Merge pull request #5 from rpetrano/build_script

Removed unneeded references.
Revenj.Core project.

For using Revenj as standalone library (inside ASP.NET MVC for example),
only few dependencies are required.

Provide Revenj.Core.dll as entry point with requirements for additional dependencies (such as database persistence plugins.

Plugins configuration extended with assemblies property.
By default instead of scaning folder, use only core libraries available in App domain as plugins.
While this is not ideal for extensibility, if one wishes to use all kind of libraries, it can use Revenj server projects,
or change the code.
This is mostly zero configuration entry point.
Merge branch 'master' of git@github.com:ngs-doo/revenj.git

Conflicts:
	Code/Server/Revenj.Http/Revenj.Http.Mono.csproj
Service locator improvements.

Removed additional arguments from resolve api.
If someone whishes to use them, he can use IObjectFactory directly anyway.
Provide service locator under IServiceProvider interface.
This removes dependency from Revenj if required for external code.
Changed resolution to use first public constructor instead of matching a single constructor for reflection construction.
IServiceProvider returns null when component can't be created.
Improved like comparison.

Since %, _ and \ are special characters in LIKE comparison, they must be escaped.
Escape provided argument in memory, or send REPLACE command to the database.

Added missing Oracle string.Compare and various string methods.

TODO: Oracle still behaves differently from .NET due to NULL and "" being same thing.
Special paths for this behavior are required.
TODO: Postgres can use = and <> on few places istead of LIKE comparison.
Postgres LINQ byte[].Length fix.

Special method must be used in Postgres to calculate length of bytea: octet_length
Redirect array size shortcut to detect such use case.
Add member to common members (currently is not called since array size takes precedence).

TODO: investigate behavior in Oracle
Added duration to requests.

Duration in milliseconds added to processing result.
X-Duration header added to web requests.
Since most of rest commands are doing serialization and deserialization outside of processing engine,
timing doesn't cover full duration, but only most of it.
Autofac updated.

Previous version of Autofac didn't handle well high concurrency situations due to broken circular dependency detection.
Removed circular dependency detection, but fixed concurrency issues.

Since current components are correctly registered, circular dependency can only occur if new components are registered.
It will manifest in stack overflow error, so there is not much difference from application perspective - it will fail in both scenarios.
NGS.Core refactoring.

NGS.Core should not depend on outside projects.
Previously it had dependency on domain patterns.
Removed dependency by providing features through BCL types,
ie. IRepository<T>.Find available through Func<string[], T[]>
IObservable<T> instead of IDataChangeNotification
...

Since IRepository requires implementation to inherit from IIdentifiable,
few things are not ideal - must use Func<string, T> instead of repository for custom interfaces.
IRepository<custom interface> can't be resolved anymore (while this could work,
since we can know if custom interface implements IIdentifiable, in practice
custom code is not provided and we don't have enough knowledge about it.

Removed requirement for IIdentifiable on Track api for IDataChangeNotification.

Removed reference from Oracle in Revenj.Core since Oracle is causing problems with it's
32/64 bit versions. Leave it as is for now since Oracle can't be used as is from DSL Platform.

TODO: Func<string, T> should redirect to IDataCache for specialized types.
Not really a Revenj issue, but that feature is currently missing, which means that
security provider will hit DB as is - it should to be specialy initialized instead.
TODO: still missing nicer API for Track<T> Observable.
New Templater version.

Sync with latest Templater v1.9
Improved LINQ Count/Length support. Support for more collection types.

Array size subquery simplification should be used on parameters too.
Missing context name included in array size simplification variable naming.

Extracted type collection detection into utility method.
Added support for ReadOnlyCollection, Stack, Queue and LinkedList since those collections are mapped to dsl concepts.

Since Remotion doesn't rewrite Count member access on Queue and other collection types, added member access support for those collection types.
Hotfix for Postgres driver.

On Linux due to thread scheduling algorithms, Thread.Sleep(0) doesn't work as expected.
Use Thread.Sleep(1) instead to yield control from that Thread.
Reverted LINQ context prefix.

Some test failed due to invalid SQL.
Caching support + Postgres LINQ count fix (again).

Added eager, lazy and lookup cache.
Notifications are now synchronized with dispose on current server.
This fixes sync lag on current server.

Fix again for array_upper and context.
Need to use it for parameters since otherwise it will not work as expected on Postgres version without named parameters.

Current cache renamed to WeakCache.
Added LookupCache which uses MemoryCache and it's configuration.
Added EagerCache which keeps data source up to date.
Added LazyCache which refreshes data source if it's out of sync.

Guard for broken transactions - keep in transaction as true if transaction is broken.
Transaction will become broken on database exception.
Currently database projects reference domain implementation (instead of interface) since it's not clear wheater Notify method should be part of public interface.

TODO: Implement missing LRU cache
TODO: promote IEagerNotification to interface project
Mailer compiled dll upgraded.

Due to various changed in API mailer dll new build was required.
Fix for problem with Postgress.
Merge pull request #6 from kzaher/fixes

Fix for problem with Postgres. Missing signature registration