Permalink
Browse files

Prepare 0.5.0 release

  • Loading branch information...
krasserm committed May 9, 2013
1 parent f8960ef commit f6ffc679f3cd997d23cad02ad0b153fa650ad1dd
Showing with 16 additions and 18 deletions.
  1. +12 −12 README.md
  2. +4 −6 project/ExampleBuild.scala
View
@@ -1,31 +1,31 @@
Overview
--------
-This project demonstrates how to implement an [event-sourced](http://martinfowler.com/eaaDev/EventSourcing.html) web application based on the Eligosource [Eventsourced](https://github.com/eligosource/eventsourced) library. It is based on [former work](https://github.com/krasserm/eventsourcing-example) that has been described in the articles
+This project demonstrates how to implement an [event-sourced](http://martinfowler.com/eaaDev/EventSourcing.html) web application based on the Eligosource [Eventsourced](https://github.com/eligosource/eventsourced/tree/0.5.0) library. It is based on [former work](https://github.com/krasserm/eventsourcing-example) that has been described in the articles
- [Building an Event-Sourced Web Application - Part 1: Domain Model, Events and State](http://krasserm.blogspot.com/2011/11/building-event-sourced-web-application.html)
- [Building an Event-Sourced Web Application - Part 2: Projections, Persistence, Consumers and Web Interface](http://krasserm.blogspot.com/2012/01/building-event-sourced-web-application.html)
Compared to the [old implementation](https://github.com/krasserm/eventsourcing-example), the whole service and persistence layer have been re-written and the domain events are now decoupled from the immutable domain model. The web UI and the web API remain unchanged.
-The example web application uses the [Eventsourced](https://github.com/eligosource/eventsourced) library for both event-sourcing and command-sourcing. Furthermore, it implements the [CQRS](http://martinfowler.com/bliki/CQRS.html) pattern and follows [domain-driven design](http://domaindrivendesign.org/resources/what_is_ddd) principles.
+The example web application uses the [Eventsourced](https://github.com/eligosource/eventsourced/tree/0.5.0) library for both event-sourcing and command-sourcing. Furthermore, it implements the [CQRS](http://martinfowler.com/bliki/CQRS.html) pattern and follows [domain-driven design](http://domaindrivendesign.org/resources/what_is_ddd) principles.
-![Architecture](https://raw.github.com/eligosource/eventsourced-example/master/doc/images/architecture.png)
+![Architecture](https://raw.github.com/eligosource/eventsourced-example/0.5.0/doc/images/architecture.png)
Legend:
-![Legend](https://raw.github.com/eligosource/eventsourced/master/doc/images/legend.png)
+![Legend](https://raw.github.com/eligosource/eventsourced/0.5.0/doc/images/legend.png)
-- The [domain model](https://github.com/eligosource/eventsourced-example/blob/master/src/main/scala/org/eligosource/eventsourced/example/domain/Invoice.scala) is a rich, immutable domain model. It is annotated with [JAXB](http://jcp.org/en/jsr/detail?id=222) annotations for XML and JSON binding.
-- The [service layer](https://github.com/eligosource/eventsourced-example/tree/master/src/main/scala/org/eligosource/eventsourced/example/service) implements the event-sourced and command-sourced actors (processors) together with service facades for asynchronous writes and synchronous, non-blocking reads of application state.
+- The [domain model](https://github.com/eligosource/eventsourced-example/blob/0.5.0/src/main/scala/org/eligosource/eventsourced/example/domain/Invoice.scala) is a rich, immutable domain model. It is annotated with [JAXB](http://jcp.org/en/jsr/detail?id=222) annotations for XML and JSON binding.
+- The [service layer](https://github.com/eligosource/eventsourced-example/tree/0.5.0/src/main/scala/org/eligosource/eventsourced/example/service) implements the event-sourced and command-sourced actors (processors) together with service facades for asynchronous writes and synchronous, non-blocking reads of application state.
- Processors manage application state via [STM](http://nbronson.github.com/scala-stm/) references.
- For reading current state, services facades access STM references directly (concurrent reads).
- For updating current state, services facades access STM references via processors where a single STM reference is updated by a single processor ([single-writer-principle](http://mechanical-sympathy.blogspot.de/2011/09/single-writer-principle.html))
- - On the command-side of the implemented CQRS pattern is the [InvoiceService](https://github.com/eligosource/eventsourced-example/blob/master/src/main/scala/org/eligosource/eventsourced/example/service/InvoiceService.scala) that manages application state and serves consistent reads of invoices.
- - On the query side of the implemented CQRS pattern is the [StatisticsService](https://github.com/eligosource/eventsourced-example/blob/master/src/main/scala/org/eligosource/eventsourced/example/service/StatisticsService.scala), a read model that serves eventually consistent reads about invoice update statistics.
- - The [PaymentProcess](https://github.com/eligosource/eventsourced-example/blob/master/src/main/scala/org/eligosource/eventsourced/example/service/PaymentGateway.scala) is an example of a stateful, potentially long-running and event-sourced business process.
-- The [web layer](https://github.com/eligosource/eventsourced-example/tree/master/src/main/scala/org/eligosource/eventsourced/example/web) provides a RESTful service interface to application resources and supports HTML, XML and JSON representation formats. It is built on top of [Jersey](http://jersey.java.net/) and [Scalate](http://scalate.fusesource.org/). A [Play](http://www.playframework.org/)-based version will follow (which supports asynchronous responses in contrast to Jersey).
-- The [application configuration](https://github.com/eligosource/eventsourced-example/blob/master/src/main/scala/org/eligosource/eventsourced/example/server/Appserver.scala) wires the pieces together.
+ - On the command-side of the implemented CQRS pattern is the [InvoiceService](https://github.com/eligosource/eventsourced-example/blob/0.5.0/src/main/scala/org/eligosource/eventsourced/example/service/InvoiceService.scala) that manages application state and serves consistent reads of invoices.
+ - On the query side of the implemented CQRS pattern is the [StatisticsService](https://github.com/eligosource/eventsourced-example/blob/0.5.0/src/main/scala/org/eligosource/eventsourced/example/service/StatisticsService.scala), a read model that serves eventually consistent reads about invoice update statistics.
+ - The [PaymentProcess](https://github.com/eligosource/eventsourced-example/blob/0.5.0/src/main/scala/org/eligosource/eventsourced/example/service/PaymentGateway.scala) is an example of a stateful, potentially long-running and event-sourced business process.
+- The [web layer](https://github.com/eligosource/eventsourced-example/tree/0.5.0/src/main/scala/org/eligosource/eventsourced/example/web) provides a RESTful service interface to application resources and supports HTML, XML and JSON representation formats. It is built on top of [Jersey](http://jersey.java.net/) and [Scalate](http://scalate.fusesource.org/). A [Play](http://www.playframework.org/)-based version will follow (which supports asynchronous responses in contrast to Jersey).
+- The [application configuration](https://github.com/eligosource/eventsourced-example/blob/0.5.0/src/main/scala/org/eligosource/eventsourced/example/server/Appserver.scala) wires the pieces together.
Build
-----
@@ -53,7 +53,7 @@ The example application's RESTful service interface supports HTML, XML and JSON
Click on [http://localhost:8080/invoice/invoice-3](http://localhost:8080/invoice/invoice-3). Provided you have created an invoice with id `invoice-3` before, you should see something like
-![invoice-3](https://github.com/krasserm/eventsourcing-example/raw/master/doc/images/invoice-3.png)
+![invoice-3](https://github.com/krasserm/eventsourcing-example/raw/0.5.0/doc/images/invoice-3.png)
### XML
View
@@ -8,7 +8,7 @@ import com.mojolly.scalate.ScalatePlugin.ScalateKeys._
object BuildSettings {
val buildOrganization = "dev.example"
- val buildVersion = "0.5-SNAPSHOT"
+ val buildVersion = "0.5.0"
val buildScalaVersion = "2.10.0"
val buildSettings = Defaults.defaultSettings ++ Seq (
@@ -29,8 +29,6 @@ object Resolvers {
val eligosourceReleasesRepo =
"Eligosource Releases Repo" at "http://repo.eligotech.com/nexus/content/repositories/eligosource-releases/"
- val eligosourceSnapshotsRepo =
- "Eligosource Snapshots Repo" at "http://repo.eligotech.com/nexus/content/repositories/eligosource-snapshots/"
}
object Versions {
@@ -55,8 +53,8 @@ object Dependencies {
lazy val scalaz = "org.scalaz" %% "scalaz-core" % "6.0.4" % "compile"
lazy val springWeb = "org.springframework" % "spring-web" % Spring % "compile"
- lazy val esCore = "org.eligosource" %% "eventsourced-core" % "0.5-SNAPSHOT" % "compile"
- lazy val esJournal = "org.eligosource" %% "eventsourced-journal-leveldb" % "0.5-SNAPSHOT" % "compile"
+ lazy val esCore = "org.eligosource" %% "eventsourced-core" % "0.5.0" % "compile"
+ lazy val esJournal = "org.eligosource" %% "eventsourced-journal-leveldb" % "0.5.0" % "compile"
// container dependencies TODO: switch from "compile" to "container" when using xsbt-web-plugin
lazy val jettyServer = "org.eclipse.jetty" % "jetty-server" % Jetty % "compile"
@@ -80,7 +78,7 @@ object ExampleBuild extends Build {
"eventsourced-example",
file("."),
settings = buildSettings ++ templateSettings ++ Seq (
- resolvers := Seq (typesafeRepo, eligosourceReleasesRepo, eligosourceSnapshotsRepo),
+ resolvers := Seq (typesafeRepo, eligosourceReleasesRepo),
// compile dependencies (backend)
libraryDependencies ++= Seq (akkaActor, scalaStm, esCore, esJournal, scalaz),
// compile dependencies (frontend)

0 comments on commit f6ffc67

Please sign in to comment.