Condense Light

Condense Light Condense.Light

Condense Light is a runtime that is designed to be embedded in your web or desktop application.


Everything in this document is based on an early preview of the Condense runtime.

Prerequisites

The Preview is available on Nuget.

Condense.Core: 0.9.0.0, or Install-Package Condense.Core

Condense.Light: 0.9.0.0, or Install-Package Condense.Light

Couchbase Server (recommended): http://couchbase.com. This can be installed locally, or remotely (eg: EC2 - with AMIs available). (Or use the in-memory storage provider)

Your Domain Assembly

You may use a separate assembly or include these types in your application directly.

Reference Condense.Core.

Create your entities as POCO object. Decorate them with the Entity attribute.

Create static classes containing your static lambda methods. Decorate these with the Lambda attribute. Be sure to set the ContextType, you generally care that inputs have some sort of shared lineage.

Create an interface for interoperability.

Create interoperability methods. Input entity parameters are treated as new events. If a return type is specified the call will block until an event of that type occurs in the context of the inputs, and then the event entity will be returned.

Your Hosting Application

Reference Condense.Light and dependancies.

Configure your app or web.config file with the details of your Couchbase cluster.

In your application initialization construct a CondenseLight host providing your domain assembly to the constructor, or CondenseLight.BuildFor<TDomain>() where TDomain is a type in your domain assembly. This assembly will be scanned for entities and lambdas. Keep a reference to the returned host.

Call .GetIntegration<TIntegration>() on the host. This will return an constructed implementation of TIntegration, following the integration rules.

Differences between Light and Cloud

Condense Light runs as a single independent node in-process. While work is performed according to the same transactional rules as Cloud, the local work-queue is non-persistent ( at this stage). The runtime may need a few seconds after a request to complete any trailing work before shutting down the application (or drain-stopping a web node).

As it runs in-process, you may be able to access data between lambdas using static fields or other local storage. On the Cloud platform lambdas that are not explicitly flagged for ‘in process chaining’ will likely run on a completely different worker node.

Diagnostics

Condense will log to Common.Logging. Listeners and outputs can be configured, and adapters to other logging frameworks such as NLog and log4net are available.

Storage Providers

In-memory

Condense Light can be configured to run using a lightweight in-memory storage provider. This is primarily intended for integration testing. It may also be useful for using Condense to orchestrate workflow in situations where persistence of state isn’t needed.

Couchbase

Condense Light persists domain entities and support metadata in a Couchbase cluster.

Connection information must be specified in the .config file. The storage provider is currently hard-coded to use the bucket “default”. The GSI index must be created on this bucket, as the currently implementation uses N1QL queries for some data retrieval (this is likely to change to regular views for performance reasons).

<configuration>
    <configSections>
        <sectionGroup name="couchbaseClients">
            <section name="couchbase" type="Couchbase.Configuration.Client.Providers.CouchbaseClientSection, Couchbase.NetClient" />
        </sectionGroup>
    </configSections>

    <couchbaseClients>
        <couchbase useSsl="false">
            <servers>
                <add uri="http://127.0.0.1:8091/pools"></add>
            </servers>
        </couchbase>
    </couchbaseClients>
</configuration>

Sample Gist