{"id":6738,"date":"2013-01-22T17:31:53","date_gmt":"2013-01-22T16:31:53","guid":{"rendered":"http:\/\/blog.trifork.nl\/?p=6738"},"modified":"2013-01-22T17:31:53","modified_gmt":"2013-01-22T16:31:53","slug":"axon-framework-2-0-released","status":"publish","type":"post","link":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/","title":{"rendered":"Axon Framework 2.0 Released!"},"content":{"rendered":"<p>After laying the ground work for this release about a year ago, we now proudly announce the next major release of Axon Framework! The 2.0 release is a big step forward compared to the previous version, as it contains a thorough restructuring of components, making it even easier to build scalable and extensible applications.<br \/>\n<!--more--><\/p>\n<h2>About Axon Framework<\/h2>\n<p>With growing user communities and on-line activity, application developers need to cope with problems related to concurrency and scalability. The market moves quickly, and the ability to react swiftly is crucial for a business\u2019 existence. With today\u2019s elastic cloud solutions, companies are able to be flexible in how they scale their hardware, and the Axon Framework hereby makes sure your software solution scales too!<\/p>\n<p>Many applications built in a traditional style expect the database to take on the scalability task. Axon Framework addresses these issues right in the core architecture. That\u2019s why, once an application is built, scaling up an Axon based application is merely a matter of configuration. Axon Framework\u2019s software architecture approach doesn\u2019t only address scalability, it addresses five common challenges that applications very often face: Scalability, Agility, Performance, Security and Integration. Not just as a side effect or add-on, but right from its core.<\/p>\n<p>Axon\u2019s ability to address these common issues in applications makes it useful in various applications and domains. It has been used in complex trading systems in the banking industry, electronic medical records in the healthcare domain as well as in the online gaming industry. While each application has different requirements, they can all be found in the Axon Framework, making it incredibly easy to develop scalable, high performance software applications.<\/p>\n<h2>New in Axon 2<\/h2>\n<p>Thanks to the contributions of the community backing Axon, we\u2019ve managed to make large improvements. First and foremost, the API is now a lot simpler, yet more powerful. We\u2019ve also managed to squeeze more processing out of Axon, making applications run faster on the same hardware. And finally, we\u2019ve included components that you can use to scale dynamically at runtime.<\/p>\n<h3>Easier, more powerful API<\/h3>\n<p>Axon tries to minimize the amount of Axon specific code in your domain model. In Axon 1, Command objects were merely POJOs sent over a Command Bus. Events, however, needed to extend from an Axon class. In Axon 2, Events are pojos as well. When published, they are wrapped in messages, on which Axon specific information is attached. Despite the advantages, you don\u2019t have to work with these messages.<\/p>\n<p>Methods annotated with\u00a0<code>@CommandHandler<\/code>\u00a0and\u00a0<code>@EventHandler<\/code>\u00a0are now much more flexible. Not only can you have the payload of a message (i.e. your actual Command or Event object) passed as a parameter, you can also inject specific meta data values or the message\u2019s timestamp. If you\u2019re a Spring Framework user, you can even inject Spring Beans in your methods, simply by adding them as a parameter. The resolution process of these parameters is customizable, allowing you to write your own parameter resolvers.<\/p>\n<p>The Command Bus provides a low-level API to dispatch Command Messages to your command handlers. Axon 2 allows you to define a\u00a0<code>CommandGateway<\/code>, which acts as a higher level interface towards a Command Bus. To create a gateway, all you need to do is provide Axon with an interface. The implementation is automatically generated based on the method signatures. This way, you can easily define meta-data values to be added to the command, as well as dispatch-and-wait-for-result style operations.<\/p>\n<p>Axon 2 comes with a much more powerful and yet easier to use API for <a href=\"http:\/\/blog.trifork.nl\/2012\/04\/17\/refactoring-in-an-event-sourced-world-upcasting-in-axon-2\/\" title=\"Refactoring in an event-sourced world - Upcasting in Axon 2\">Event Upcasting<\/a>. You can choose the representation of the serialized Event you prefer to work with, such as a\u00a0String, byte[]\u00a0or a Dom4J document. The available formats depend on the serializer you use (e.g. using Dom4J requires an XML-based serializer), but can easily be extended by implementing custom Data Converters. Axon 2 will automatically combine available Converters to translate one representation to another, even if that cannot be done by a single converter.<\/p>\n<h3>Performance improvements<\/h3>\n<p>Some applications have performance needs that simply outgrow the characteristics of the <code>SimpleCommandBus<\/code>. For those applications, Axon 2 comes with a high performance Command Bus that uses a lockless algorithm to process commands using multiple threads. This implementation is capable of processing 4 times more commands than the\u00a0<code>SimpleCommandBus <\/code>implementation, while only using 2 or 3 threads.<\/p>\n<p>When reading Events, either from the Event Store when reconstructing aggregate state, or from a remotely invoked Event Handler, Axon will automatically determine whether it is necessary to deserialize the Event Message. This greatly reduces the amount of processing needed to reconstruct aggregates that don\u2019t require all events. The same is valid for upcasters, they are only invoked when Axon detects that the result of their transformation is actually needed.<\/p>\n<p>When processing Commands, the generated events are often written to an Event Store and published to an Event Bus. When both use the same serializer, Axon can ensure that serialization is done only once, using the same result for both operations. Your application specific code is completely unaffected. All you need to do is enable the feature in your configuration.<\/p>\n<p>Replaying large numbers of events (&gt;10 Million) is now much faster. Furthermore, it is also possible to define a selection of events to replay, such as events that occurred within a certain period of time, or Events that have been applied on a specific type of aggregate. Improvements in the queries executed as well as the deserialize-when-needed algorithm will make replaying events drastically faster.<\/p>\n<p>Axon generates unique identifiers for all messages. By default, the generated values are <code>java.util.UUID<\/code>\u00a0instances. While they generate as-good-as-never-colliding identifiers, the performance is not great. For applications requiring high-performance, it is possible to hook in a custom identifier generator. For example one that generates version 1 UUIDs.<\/p>\n<h3>Out of the box scalability support<\/h3>\n<p>Besides the basic implementations of building blocks, Axon 2 comes with some out-of-the-box implementations that allow you to horizontally scale an application.<\/p>\n<p>The Distributed Command Bus with the JGroups Connector allows you to scale horizontally, completely at runtime. Scale your command handlers up and down to match the load on your application. Axon takes into account that some machines may be more powerful than others, spreading the load accordingly.<\/p>\n<p>Events can be distributed over AMQP (version 0.9.1) by using the Spring AMQP terminal. It will ensure that Events are transported to the Event Listeners over AMQP . While this implementation requires Spring, another implementation will soon be available that uses a plain AMQP client.<\/p>\n<h3>MongoDB Event Store<\/h3>\n<p>The\u00a0MongoEventStore\u00a0is now a full member of the Axon family. This means you can safely use a Mongo Database, which is built to store large amounts of data, as an Event Store. Axon 2 also comes with a Serializer that allows the MongoEventStore to store events as BSON structures, so that you can easily query your Event store for specific event details.<\/p>\n<h2>Upcoming events<\/h2>\n<h3>Axon 2 Launch Seminar<\/h3>\n<p>To celebrate the release, we are organizing a free seminar, in which we will show how Axon Framework helps to develop scalable and extensible software using the CQRS architectural pattern.<\/p>\n<p>The adoption of CQRS is a strategic choice in the battle against growing complexity of scalable applications. This makes Axon more than just a developer framework. The seminar targets Software Architects and IT Managers, and focuses on the business value of CQRS and Axon Framework. Don\u2019t take our word for it, two companies will present a case study, in which they show how they benefit from Axon.<\/p>\n<p>The first case study will be presented by E.Novation, a European ICT company that connects people, systems and organizations. One of their solutions is AZERA, an application to manage care registration and declarations for the healthcare industry. E.Novation will explain how Axon helps them react to changes in the Dutch law faster, while keeping application complexity at bay.<\/p>\n<p>The second case study is presented by Aktive Reply, an Italian company, part of the European Reply Group. After having used Axon in several projects, among which a top 50 bank, they have extracted a set of best practices, and bundled them in a product which they use to serve their other customer faster.<\/p>\n<p>There will also be an open forum, in which a panel of experts will present their vision on CQRS and software development in general, based on questions from the audience.<\/p>\n<p><em>Event details:<\/em><br \/>\nLocation: De Observant, Amersfoort, Netherlands<br \/>\nDate &amp; time: Feb 28<sup>th<\/sup>, 12:30 &#8211; 18:00<br \/>\nPrice: free, registration required<\/p>\n<p>Space is limited, so <a href=\"http:\/\/info.trifork.nl\/axon2.0launchevent.html\" target=\"_blank\" rel=\"noopener\">register now<\/a>.<\/p>\n<h3>Swiss Java Usergroup &#8211; Axon 2 Presentation<\/h3>\n<p>On March 12<sup>th<\/sup>, the Swiss Java User Group (JUGS) will host a presentation about CQRS and Axon. In this presentation, Allard Buijze, the creator of Axon Framework, will give an overview of CQRS and Axon, and how it is used to develop scalable software.<\/p>\n<p><em>Event details:<\/em><br \/>\nLocation: <a href=\"http:\/\/www.technopark.ch\/start.cfm?p=90&amp;s=0\" target=\"_blank\" rel=\"noopener\">Technopark<\/a>, Z\u00fcrich, Switzerland<br \/>\nDate &amp; time: March 12<sup>th<\/sup>, 16:00 &#8211; 17:00<br \/>\nPrice: free for JUGS members<br \/>\nFor more information and registration, visit <a href=\"http:\/\/www.jug.ch\" target=\"_blank\" rel=\"noopener\">jug.ch<\/a><\/p>\n<h3>Workshops<\/h3>\n<p>We have also planned a number of CQRS and Axon workshops. In the one-day workshop, you will learn how to build a scalable application using Axon 2. The workshops contain both theory and practice, so that you can apply the new ideas and concepts immediately.<\/p>\n<p>Currently, we have two workshops planned for March:<\/p>\n<ul>\n<li>March 13<sup>th<\/sup>, Z\u00fcrich, Switzerland<\/li>\n<li>March 21<sup>st<\/sup>, Amsterdam, The Netherlands<\/li>\n<\/ul>\n<p>For more information and registration, visit <a href=\"http:\/\/www.axonframework.org\/workshop\" target=\"_blank\" rel=\"noopener\">axonframework.org\/workshop<\/a>.<\/p>\n<p>If you are interested in a workshop or training in another location or at another time, don&#8217;t hesitate to <a href=\"http:\/\/www.trifork.nl\/en\/home\/contact-us.html\" target=\"_blank\" rel=\"noopener\">contact us<\/a>.<\/p>\n<h2>More information &amp; getting started<\/h2>\n<p>If you want to get started using Axon, visit\u00a0<a href=\"http:\/\/www.axonframework.org\" target=\"_blank\" rel=\"noopener\">www.axonframework.org<\/a>. In the <a href=\"http:\/\/www.axonframework.org\/download\" target=\"_blank\" rel=\"noopener\">downloads section<\/a>, you\u2019ll find the 2.0 download package. If you use Maven, you can simply update your dependencies to use version 2.0.<\/p>\n<p>If you have any questions about Axon, you can ask them on the\u00a0<a href=\"groups.google.com\/group\/axonframework\" target=\"_blank\" rel=\"noopener\">Axon Framework User Mailing list<\/a> (<a href=\"mailto:axonframework@googlegroups.com\">axonframework@googlegroups.com<\/a>). If you have found bugs, or want to report a feature request, don\u2019t hesitate to let us know through the\u00a0<a href=\"http:\/\/issues.axonframework.org\" target=\"_blank\" rel=\"noopener\">Issue Tracker<\/a>.<\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>After laying the ground work for this release about a year ago, we now proudly announce the next major release of Axon Framework! The 2.0 release is a big step forward compared to the previous version, as it contains a thorough restructuring of components, making it even easier to build scalable and extensible applications.<\/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,31,98,10],"tags":[140,80,277],"class_list":["post-6738","post","type-post","status-publish","format-standard","hentry","category-axon-framework","category-java","category-microservices","category-development","tag-architecture","tag-axon-framework","tag-release"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Axon Framework 2.0 Released! - 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-2-0-released\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Axon Framework 2.0 Released! - Trifork Blog\" \/>\n<meta property=\"og:description\" content=\"After laying the ground work for this release about a year ago, we now proudly announce the next major release of Axon Framework! The 2.0 release is a big step forward compared to the previous version, as it contains a thorough restructuring of components, making it even easier to build scalable and extensible applications.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/\" \/>\n<meta property=\"og:site_name\" content=\"Trifork Blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-01-22T16:31:53+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=\"8 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-2-0-released\/\",\"url\":\"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/\",\"name\":\"Axon Framework 2.0 Released! - Trifork Blog\",\"isPartOf\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#website\"},\"datePublished\":\"2013-01-22T16:31:53+00:00\",\"author\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63\"},\"breadcrumb\":{\"@id\":\"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trifork.nl\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Axon Framework 2.0 Released!\"}]},{\"@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 2.0 Released! - 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-2-0-released\/","og_locale":"en_US","og_type":"article","og_title":"Axon Framework 2.0 Released! - Trifork Blog","og_description":"After laying the ground work for this release about a year ago, we now proudly announce the next major release of Axon Framework! The 2.0 release is a big step forward compared to the previous version, as it contains a thorough restructuring of components, making it even easier to build scalable and extensible applications.","og_url":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/","og_site_name":"Trifork Blog","article_published_time":"2013-01-22T16:31:53+00:00","author":"Allard Buijze","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Allard Buijze","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/","url":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/","name":"Axon Framework 2.0 Released! - Trifork Blog","isPartOf":{"@id":"https:\/\/trifork.nl\/blog\/#website"},"datePublished":"2013-01-22T16:31:53+00:00","author":{"@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/a4e232a11dc57a2c4c581956ce6fde63"},"breadcrumb":{"@id":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/trifork.nl\/blog\/axon-framework-2-0-released\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trifork.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"Axon Framework 2.0 Released!"}]},{"@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\/6738","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=6738"}],"version-history":[{"count":0,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/6738\/revisions"}],"wp:attachment":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media?parent=6738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/categories?post=6738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/tags?post=6738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}