{"id":3042,"date":"2011-02-16T11:29:36","date_gmt":"2011-02-16T10:29:36","guid":{"rendered":"http:\/\/blog.jteam.nl\/2011\/02\/16\/axon-framework-1-0-first-release-candidate-available\/"},"modified":"2011-02-16T11:29:36","modified_gmt":"2011-02-16T10:29:36","slug":"axon-framework-1-0-first-release-candidate-available","status":"publish","type":"post","link":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/","title":{"rendered":"Axon Framework 1.0, first release candidate available"},"content":{"rendered":"<p>The Axon Framework 1.0 release is closing in. After over a year of development, all features planned for the 1.0 version are included. With the latest added features, Axon has become a powerful framework that helps developers implementing applications using on a CQRS based architecture.<\/p>\n<p>Although the 1.0-rc1 version doesn\u2019t add a lot of new features to the previous release (0.7), it does represent a major milestone in Axon\u2019s lifecycle. If Axon continues to prove it works as expected in production environments, the final 1.0 release can be expected before summer. Meanwhile, development will start on the remote messaging components required for scalability in larger systems.<\/p>\n<p> <!--more-->  <\/p>\n<h4>Background<\/h4>\n<p>Command Query Responsibility Segregation (CQRS) is an architectural pattern that makes a clear distinction between command processing -telling an application what to do- and query execution -which provides insight in the state of the application. This very simple separation of components opens up a large number of interesting possibilities, such as scalability and extensibility. But even if you never expect to need to scale, the basic pattern of CQRS can help tremendously.<\/p>\n<p>Axon Framework helps build scalable, extensible and maintainable applications by supporting developers apply the CQRS architectural pattern. It does so by providing implementations of the most important building blocks, such as aggregates, repositories and event busses (the dispatching mechanism for events). Furthermore, Axon provides annotation support, which allows you to build aggregates and event listeners without tying your code to Axon specific logic. This allows you to focus on your business logic, instead of the plumbing, and helps to test your code in isolation.<\/p>\n<h4>New features and changes<\/h4>\n<h5>Support for asynchronous handling of Sagas<a href=\"http:\/\/code.google.com\/p\/axonframework\/wiki\/ReleaseNotes10rc1#Support_for_asynchronous_handling_of_Sagas\"><\/a><\/h5>\n<p>Similar to asynchronous event handling for event listeners, Sagas can also be invoked asynchronously from the dispatching process. All that is required is the configuration of an (asynchronous) Executor on the SagaManager. It will make sure each Saga processes the events in the order they arrive, one at a time. Multiple saga instances will execute concurrently if the provided Executor allows that.<\/p>\n<h5><a name=\"Create_hybrid_event_sourcing_repository\"><\/a>Create hybrid event sourcing repository<\/h5>\n<p>In some cases, it might be valuable to keep both the state of aggregates as well as the generated events. The hybrid repository does exactly that. It append newly generated events to the event store, while reading the current state from a relational model. This could speed up the loading of aggregates and removes the need for upcasters. Until you need to read in old events, of course.<\/p>\n<h5><a name=\"Event_time_stamp_is_DateTime_instead_of_LocalDateTime\"><\/a>Event time stamp is DateTime instead of LocalDateTime<\/h5>\n<p>In geographically larger systems, it might be valuable to keep information about time zones in the events. The previously used LocalDateTime does not contain that information. Now, all events use a DateTime instead. This change is completely backwards compatible if you are using the XStreamEventSerializer in your event store.<\/p>\n<h5>Other, smaller changes<\/h5>\n<p>Besides these major changes, there is a number of smaller changes that are worth mentioning.<\/p>\n<p>All dependencies on Spring have been removed, with the exception of the Spring specific configuration options, of course. This means that, if you don&#8217;t use any of the Spring config options, you don&#8217;t need Spring on your classpath anymore.<\/p>\n<p>Test fixtures are configured to fail when two events are generated with the same sequence number. This allows tests to fail when an aggregate is accidentally created, instead of modified, for example.<\/p>\n<p>The JPA Event Store will do a batched fetch from the database when it is reconstructing an aggregate from a large number of events. This will reduce memory consumption, with the penalty reconnecting to the database. The size of the batches is configurable.<\/p>\n<p>The locking repository now uses Pessimistic Locking by default. Only the pessimistic lock can guarantee that events are dispatched in exactly the same order as they are generated by the aggregate.<\/p>\n<h4>Migration notes<\/h4>\n<p>The only API change in the 1.0-rc1 version is the timestamp of the event. If you recompile your project using 1.0-rc1, you might get compilation errors, as the type was changed from LocalDateTime to DateTime (both joda time classes). Migrating these types in your codebase is safe and easy to do. The only difference is that DateTime contains an explicit time zone (which defaults to the server time zone), while LocalDateTime always assumes the server time zone.<\/p>\n<p>The format of the abstract aggregate root classes in Axon has changed. This means that, when upgrading from previous versions, the snapshot events should be cleared from the event store before launching the application on the new version. If you build custom snapshot events, you do not have to do this. The API of the aggregates hasn&#8217;t changed.<\/p>\n<p>If you have questions or doubts about migrating or anything else, don\u2019t hesitate to send a message to the Axon mailing list (axonframework@googlegroups.com, registration required: www.axonframework.org\/group). The community behind Axon is growing, so if I\u2019m not there to answer your question quickly, someone else is likely to be.<\/p>\n<h4>Contact<\/h4>\n<p>If you have questions or doubts about migrating or anything else, don\u2019t hesitate to send a message to the Axon mailing list (<a href=\"mailto:axonframework@googlegroups.com\">axonframework@googlegroups.com<\/a>, registration required:<a href=\"http:\/\/www.axonframework.org\/group\">www.axonframework.org\/group<\/a>). The community behind Axon is growing, so if I\u2019m not there to answer your question quickly, someone else is likely to be.<\/p>\n<p>If you need hands-on help, don\u2019t hesitate to <a href=\"http:\/\/www.jteam.nl\/contact\">contact JTeam<\/a> about support and consulting.<\/p>\n<h4>More information<\/h4>\n<p>You can find more information about Axon Framework on <a href=\"http:\/\/www.axonframework.org\/\">www.axonframework.org<\/a>. Documentation is available <a href=\"http:\/\/www.axonframework.org\/docs\">online<\/a> (html) and in the <a href=\"http:\/\/www.axonframework.org\/download\">downloads section<\/a>. There is also a introductory <a href=\"http:\/\/www.jteam.nl\/training\/workshop\/cqrs-axon-framework-training-workshop.html\" target=\"_blank\" rel=\"noopener\">workshop on CQRS and Axon<\/a>.<\/p>\n<p>If you want to download the complete package (incl. documentation, sources and dependencies) directly, visit: <a href=\"http:\/\/www.jteam.nl\/products\/axonframework.html\">http:\/\/www.jteam.nl\/products\/axonframework.html<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The Axon Framework 1.0 release is closing in. After over a year of development, all features planned for the 1.0 version are included. With the latest added features, Axon has become a powerful framework that helps developers implementing applications using on a CQRS based architecture. Although the 1.0-rc1 version doesn\u2019t add a lot of new [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[81,98,10],"tags":[80,11,9],"class_list":["post-3042","post","type-post","status-publish","format-standard","hentry","category-axon-framework","category-microservices","category-development","tag-axon-framework","tag-java","tag-open-source"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Axon Framework 1.0, first release candidate available - Trifork Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Axon Framework 1.0, first release candidate available - Trifork Blog\" \/>\n<meta property=\"og:description\" content=\"The Axon Framework 1.0 release is closing in. After over a year of development, all features planned for the 1.0 version are included. With the latest added features, Axon has become a powerful framework that helps developers implementing applications using on a CQRS based architecture. Although the 1.0-rc1 version doesn\u2019t add a lot of new [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/\" \/>\n<meta property=\"og:site_name\" content=\"Trifork Blog\" \/>\n<meta property=\"article:published_time\" content=\"2011-02-16T10:29:36+00:00\" \/>\n<meta name=\"author\" content=\"Allard Buijze\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Allard Buijze\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/\",\"url\":\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/\",\"name\":\"Axon Framework 1.0, first release candidate available - Trifork Blog\",\"isPartOf\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#website\"},\"datePublished\":\"2011-02-16T10:29:36+00:00\",\"author\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63\"},\"breadcrumb\":{\"@id\":\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trifork.nl\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Axon Framework 1.0, first release candidate available\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/trifork.nl\/blog\/#website\",\"url\":\"https:\/\/trifork.nl\/blog\/\",\"name\":\"Trifork Blog\",\"description\":\"Keep updated on the technical solutions Trifork is working on!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/trifork.nl\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63\",\"name\":\"Allard Buijze\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/3e7130b2465615e105b1addd400a3f06?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/3e7130b2465615e105b1addd400a3f06?s=96&d=mm&r=g\",\"caption\":\"Allard Buijze\"},\"description\":\"Allard (@allardbz) is CTO of Trifork Amsterdam and founder of Axon Framework. He is a trainer and speaker at conferences on topics related to scalable architecture and domain driven design. He strongly believes that good craftsmanship can only be achieved through continuous and intensive exchange of experience with others. The last years, he has been investigating and applying CQRS to a number of projects. As a result, he created the Axon Framework, an open source Java framework that helps developers create scalable and extensible applications. Axon has a growing community and has already been successfully introduced in several high-profile projects around the world.\",\"url\":\"https:\/\/trifork.nl\/blog\/author\/allard\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Axon Framework 1.0, first release candidate available - Trifork Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/","og_locale":"en_US","og_type":"article","og_title":"Axon Framework 1.0, first release candidate available - Trifork Blog","og_description":"The Axon Framework 1.0 release is closing in. After over a year of development, all features planned for the 1.0 version are included. With the latest added features, Axon has become a powerful framework that helps developers implementing applications using on a CQRS based architecture. Although the 1.0-rc1 version doesn\u2019t add a lot of new [&hellip;]","og_url":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/","og_site_name":"Trifork Blog","article_published_time":"2011-02-16T10:29:36+00:00","author":"Allard Buijze","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Allard Buijze","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/","url":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/","name":"Axon Framework 1.0, first release candidate available - Trifork Blog","isPartOf":{"@id":"https:\/\/trifork.nl\/blog\/#website"},"datePublished":"2011-02-16T10:29:36+00:00","author":{"@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63"},"breadcrumb":{"@id":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/trifork.nl\/blog\/axon-framework-1-0-first-release-candidate-available\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trifork.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"Axon Framework 1.0, first release candidate available"}]},{"@type":"WebSite","@id":"https:\/\/trifork.nl\/blog\/#website","url":"https:\/\/trifork.nl\/blog\/","name":"Trifork Blog","description":"Keep updated on the technical solutions Trifork is working on!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trifork.nl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63","name":"Allard Buijze","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3e7130b2465615e105b1addd400a3f06?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3e7130b2465615e105b1addd400a3f06?s=96&d=mm&r=g","caption":"Allard Buijze"},"description":"Allard (@allardbz) is CTO of Trifork Amsterdam and founder of Axon Framework. He is a trainer and speaker at conferences on topics related to scalable architecture and domain driven design. He strongly believes that good craftsmanship can only be achieved through continuous and intensive exchange of experience with others. The last years, he has been investigating and applying CQRS to a number of projects. As a result, he created the Axon Framework, an open source Java framework that helps developers create scalable and extensible applications. Axon has a growing community and has already been successfully introduced in several high-profile projects around the world.","url":"https:\/\/trifork.nl\/blog\/author\/allard\/"}]}},"_links":{"self":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/3042","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/comments?post=3042"}],"version-history":[{"count":0,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/3042\/revisions"}],"wp:attachment":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media?parent=3042"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/categories?post=3042"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/tags?post=3042"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}