Время на прочтение
6 мин
Количество просмотров 14K
AXON — это нотация для сериализованного представления объектов, документов и данных в текстовой форме. Она объединяет в себе простоту JSON, расширяемость XML и удобочитаемость YAML.
Есть проект pyaxon на python, с которым можно «поиграться». Впрочем, он создавался таким образом, чтобы не сильно уступать по скорости с модулем json. Поэтому он может сгодиться и для реальных дел.
Зачем AXON?
AXON
появился как попытка справиться с недостатками или неудобствами JSON
и XML
, но сохранить при этом их достоинства и возможности, дополнительно добавив удобочитаемость, присущую YAML
.
AXON содержит «улучшенный» вариант JSON
1. JSON
имеет два неудобства:
- имена атрибутов/ключей, которые являются идентификаторами приходится заключать в кавычки;
- легко забыть запятую в случае вставки новой пары ключ: значение.
AXON
устраняет эти неудобства следующим образом:
- можно не заключать в кавычки имена, которые являются идентификаторами;
- совершенно опускаются разделительные запятые, используются только пробельные символы для разделения элементов.
В результате получается более компактное представление и удобство восприятия при форматировании.
Для сравнения:
JSON
{ "name": "Alex",
"birth": "1979-12-25",
"email": "mail@example.com"}
[ "Alex"
"1979-12-25"
"mail@example.com"]
AXON
{ name: "Alex"
birth: ^1979-12-25
email: "mail@example.com"}
[ "Alex"
^1979-12-25
"mail@example.com"]
2. В JSON
не гарантируется, что после загрузки
{ "name": "Alex",
"birth": "1979-12-25",
"email": "mail@example.com"}
порядок ключей/атрибутов сохранится.
В AXON
констатируется, что
{ name: "Alex"
birth: ^1979-12-25
email: "mail@example.com"}
преобразуется в mapping
без сохранения порядка ключей.
В то же время констатируется, что
[ name: "Alex"
birth: ^1979-12-25
email: "mail@example.com"]
преобразуется в mapping
с сохранением порядка ключей.
3. AXON
поддерживает синтаксиc для представления даты и времени в ISO
-подобном формате:
- даты
^2010-12-31
- времени
^12:30
^12:30:15
^12:30+03:00
^12:30:15-04:30
- даты и времени
^2010-12-31T12:30
^2010-12-31T12:30:05.0125
^2010-12-31T12:30+04:00
^2010-12-31T12:30:05.0123-04:00
а также для представления десятичных чисел:
1D 123456789D
3.14D 1.23e-6D
4. AXON
также позволяет определять метки неатомарных значений и использовать их в качестве внутренних ссылок. Это позволяет при необходимости не создавать копии многократно используемых неатомарных значений при сериализации/десериализации.
Например:
[ { prev: &a (2012-12-30 10:00)
next: &c (2012-01-01 12:00) }
{ prev: &b (2012-12-31 13:00)
next: *a }
{ prev: *c
next: *b } ]
Метка имеет префикс &
(&a &b &c
), а ссылка имеет префикс *
(*a *b *c
).
Модель данных AXON содержит вариант модели Infoset XML в более компактной нотации
Рассмотрим иллюстративный пример XML
представления структурированных данных:
<person>
<name>John Smith</name>
<age>25</age>
<address type="home">
<street>21 2nd Street</street>
<city>New York</city>
<state>NY</state>
</address>
<phone type="home">212-555-1234</phone>
</person>
AXON
реализует идею более простого синтаксиса для представления XML
структурированных данных:
person {
name {"John Smith"}
age {25}
address {
type: "home"
street {"21 2nd Street"}
city {"New York"}
state {"NY"}
}
phone {type:"home" "212-555-1234"}
}
Представление в формате AXON
можно построить из формата XML
за 5 шагов:
- Заменить
<tag>
наtag {
- Заменить
</tag>
на}
- Заменить
attr=value
наattr: value
- Текст внутри элементов заключить в двойные кавычки (
"
) - Удалить символ запятой (
,
) или заменить его на один пробел
Результат такого преобразования структурно идентичен первоначальному XML
документу. По-существу это синтаксически более компактная форма представления XML
документа.
Для сравнения также приведем представление в AXON
с форматированием сложных элементов без {} с использованием принципа одинакового отступа для подэлементов структуры:
person
name {"John Smith"}
age {25}
address
type: "home"
street {"21 2nd Street"}
city {"New York"}
state {"NY"}
phone
type: "home"
"212-555-1234"
Это представление получается из предыдущего удалением всех символов { и }, а также ненужных пустых строк.
AXON расширяет возможности XML и JSON
В XML
атрибуты могут иметь только простые значения, в AXON
значением атрибута может любое значение (как и в JSON
). Кроме того простые значения имеют тип (текст в формате unicode
, число, десятичное число, дата и время, массив байтов в кодировке base64). AXON
можно рассматривать как расширение JSON
в том смысле, что объекты могут именованными, так же как и элементы XML
являются именованными.
Например:
person
name: "John Smith"
age: 25
burn: 1975-10-21
locations: [
address
type: "home"
street: "21 2nd Street"
city: "New York"
state: "NY"
]
contacts: [
phone
type: "home"
"212-555-1234"
email
type: "personal"
"mail@example.com"
]
В JSON
есть одно неудобство, связанное с представлением нерегулярных структур, в которых существенен порядок частей. В таких структурах доступ к элементам осуществляется в результате последовательного поиска по имени, а не в результате «прямого» доступа по имени.
В качестве примера рассмотрим структурированный документ в формате XML
:
<section title="Title">
<par style="normal">paragraph</par>
<enumerate style="enum">
<item>item text</item>
</enumerate>
<par style="normal">paragraph</par>
<itemize style="itemize">
<item>item text</item>
</itemize>
<par style="normal">paragraph</par>
</section>
Непосредственно, без преобразования структуры этот документ не транслируется в JSON
из-за важности порядка и повторяемости элементов. Один вариант трансляции, который эмулирует последовательность именованных элементов имеет вид:
{
"tag": "section",
"@": {"title": "Title"},
"*": [
{ "tag": "par",
"@": {"style":"normal", "text":"paragraph"}},
{ "tag":"enumerate",
"@": {"style": "enumerate"},
"*": [
{ "tag":"item",
"@": {"text":"item text"}}
]
},
{ "tag": "par", "@": {"style":"normal", "text":"paragraph"}},
{ "tag":"itemize",
"*": [
{ "tag":"item", "@": {"text":"item text"}}
]
},
{ "tag": "par", "@": {"style":"normal", "text":"paragraph"}}
]
}
В AXON
такие структуры транслируются «один в один»:
section
title: "Title"
par
style: "normal"
"paragraph"
enumerate
style: "enum"
item { "item text" }
par
style: "normal"
"paragraph"
itemize
style: "itemize"
item { "Item text" }
par
style: "normal"
"paragraph"
AXON поддерживает форматирование в стиле YAML
Привлекательной стороной YAML
является формат представления в стиле wiki
. AXON
также поддерживает подобный стиль форматирования.
Например, для сравнения:
- форматирование без {} (
YAML
-стиль)
person
name: "Alex"
age: 25
- форматирование с {} и отступами (
C/JSON
-стиль)
person {
name: "Alex"
age: 25}
- компактный формат
person{name:"Alex" age:25}
AXON может представлять серию объектов
Одно из ограничений JSON
и XML
связано с тем, что они представляют единственный корневой объект. Напротив, AXON
представляет серию объектов или серию пар ключ
:объект
, которые можно загружать по одному. Например:
- серия объектов
{ name: "Alex"
age: 32 }
{ name: "Michael"
age: 28 }
{ name: "Nick"
age: 19 }
- серия объектов с ключами
alex: {
message: "Hello"
datetime: ^2015-07-12T12:32:35
}
michael: {
message: "How are you"
datetime: ^2015-07-12T12:32:35
}
Основные статьи:
- Data mining Интеллектуальный анализ данных
- Управление качеством данных
- Управление данными (Data management)
Informatica Axon — интегрированное решение управления данными (Data Governance).
Управление политиками конфиденциальности
- Определение конфиденциальных и чувствительных данных
- Совместная работа
- Назначение владельцев и ответственных
- Документирование процессов
- Согласование документов
Маппинг политик, business и data контекста
- Инвентаризация бизнес-процессов, использующих конфиденциальные данные
- Маппинг систем и процессов для конфиденциальных данных
- Визуализация результатов процессов обеспечения конфиденциальности и защиты в контексте
Мониторинг и отчетность (compliance)
- Отчетность о результатах для заинтересованных участников
- Инициирование и управление изменениями для оптимизации результатов
- Аудит для всех задействованных артефактов
2021: Axon Data Governance 7.2.1
27 июля 2021 года компания Informatica представила следующую версию Axon Data Governance 7.2.1 — своего ключевого продукта для управления данными. Версия не претерпела кардинальных изменений, тем не менее, содержит ряд существенных улучшений и полезных Функций.
Продукт Axon Data Governance содержит широкий набор возможностей для управления данными, включая бизнес глоссарий и инструментарий для работы с данными: ведение концептуальной и логической модели данных, поиск объектов любых категорий метаданных, создание и ведение дополнительных категорий метаданных, списков и ролей заинтересованных лиц, управление жизненным циклом данных, настройку процессов согласования (например, бизнес-терминов), построение связей между логической и физической моделями данных, отслеживание и визуализацию текущих показателей качества данных и т.д.
В обновленной версии Axon появилась возможность назначать пользователей на роли по умолчанию. Также теперь предоставляется статистика использования, на основе которой можно сформировать отчеты о количестве измененных объектов, обработанных запросов на изменения (Change Request), статусе и количестве запросов и так далее. Появилась возможность добавлять собственные поля в запросы на изменения и в карточки правил качества данных, а также есть функция сохранения отображения фасетов и результатов поиска в формате Microsoft Excel (прежде поддерживались только форматы PDF и CSV). Клиентское приложение для быстрого поиска терминов Axon QuickLook теперь доступно не только на платформе Windows, но и на MacOS.
В модуле Data Marketplace («Супермаркет данных»), позволяющем пользователям запрашивать и обмениваться своими информационными активами (например, отчетами и выгрузками данных), появилась возможность просмотра категорий и их составляющих, добавления в коллекции примеров данных, новых наборов данных, политик и требований, а при поиске коллекций — добавлять фильтры.
|
«В версии Axon 7.2.1 усилена функция поиска данных и улучшена визуализация в пользовательском интерфейсе, а также улучшена совместная работа продукта с другими инструментами Informatica. В частности, при работе с Enterprise Data Catalog стал возможным автоматический перенос в каталог различного рода атрибутов при срабатывании правил выявления доменов данных, таких как заинтересованные лица и другие, оптимизированы механизмы автоматической загрузки и удаления объектов, усилены функции API для взаимодействия с другими системами. Кроме того, расширено взаимодействие с Informatica Data Quality, где реализованы изменения в механизме привязки правил проверки качества данных к реестру. Дальнейшее развитие получили механизмы рекомендаций Informatica Claire для создаваемых пользователями правил проверки качества данных», – |
|
Среди наиболее значимых технических улучшений – поддержка новых версий
операционных систем, возможность совместной работы с новыми версиями продуктов Informatica в рамках Intelligent Data Platform, а также поддержка Kubernetes для развертывания Axon Data Governance в контейнерных средах.
2019: Функция Data Marketplace в Informatica Axon Data Governance
27 декабря 2019 года компания DIS Group сообщила, что в составе платформы управления данными Informatica Intelligent Data Platform с искусственным интеллектом (ИИ) CLAIRE появились дополнительные функции, среди которых – каталог каталогов Catalog of Catalogs (в решении Informatica Enterprise Data Catalog) и супермаркет данных Data Marketplace (в решении Informatica Axon Data Governance). Подробнее здесь.
2018: Интеграция с Data Quality, Data Catalog и Secure@Source
Компания DIS Group 5 июня 2018 года сообщила о том, что Axon Data Governance был интегрирован с Informatica Data Quality, Enterprise Data Catalog и Secure@Source.
Интегрированное решение автоматически обнаруживает важные данные, используя для этого правила, определённые бизнесом. Также оно идентифицирует и регистрирует чувствительные данные с целью защиты и поддержания их конфиденциальности. Кроме того, оно позволяет выставлять приоритетность защиты данных, находит и закрывает пробелы в Data Governance всей организации.
2017: Анонс ПО управления корпоративными данными Axon
21 марта 2017 года компания Informatica анонсировала ПО управления корпоративными данными в любых отраслях индустрии.
Informatica Axon основана на технологиях компании Diaku и интегрирована с лидирующими технологиями Informatica по управлению качеством данных, мастер-данными, Big Data, что эффективно позволяет решать бизнесу задачи управления данными в компаниях крупного, среднего и малого бизнеса.
Скриншот окна ПО, (2016)
|
Informatica Axon перевернет рынок решений по управлению корпоративными данными и будет особенно востребовано в индустриях, где требования регуляторов особенно высоки.
|
|
Informatica Axon позволяет повысить отдачу от актива — данных, посредством улучшения их качества, доступности и достоверности.
Интегрированные приложения Informatica Data Quality, Informatica MDM, Informatica Enterprise Information Catalog и Informatica Secure@Source вместе с Informatica Axon — полный продукт с точки зрения возможностей реализации задач управления данными.
Data Governance is a practice involving people, processes, and technology to effectively manage various risks involved in the data lifecycle (i.e., security, privacy, regulatory compliance, quality, reliability, etc.). The main objective is to establish the organization, principles, standards, and repeatable processes to collectively steward and manage company data. Having knowledge about the data an organization owns, different dependencies, and stakeholders involved in data management is important for effective data governance.
As a four-time leader in Gartner’s Magic Quadrant, Informatica Axon is a popular data governance tool that facilitates a collaborative environment to collect different data objects (metadata collection), link them, and control access to the metadata. This “knowledge repository” immensely helps data governance, as it provides information about what needs to be governed and how different assets in the organization are linked with an integrated view.
Features of Informatica Axon
- A collaborative environment for business-IT partnership
- Collect all the data assets in the organization
- Ability to define data governance policies and relate them to other facets
- Data quality rules, definition, and dashboard
- Integration with Informatica Enterprise Data Catalog and Data Quality
- Efficient search capability across data assets
- View information flow and connectedness (System Lineage and Data Lineage)
- Hierarchical structuring of different facets providing business context to the data
- Easy administration of Roles/Users
- User-friendly navigation across data assets
- Dissemination of knowledge across teams
- Bulk upload feature to create Data Assets[SV1]
- Receive notification alerts or emails for any user actions as part of change management
Benefits of Informatica Axon
- Alignment of resources and clear definition of policies to be compliant with statutory regulations
- Provides a platform for democratizing good quality data
- Reduces costs involved with poor data quality and lets the business and IT focus on data monetization
- Integration with other products provides better data discovery and insights about the data
- Improved ability to manage data risk
- Eliminates rework and optimizes staff effectiveness
- Gain better knowledge of business processes
- Better management and global view of projects across the enterprise
Informatica Axon Catalog
Informatica Axon provides the ability to manage inventory of the following type of objects.
Default facets visible in Axon without being added to the search view are System, Data Sets, Attributes, Glossary, Data Quality, and People:
- System: Used to manage the inventory of applications and systems that are used in an organization (web applications, ERP applications, Excel, etc.).
- Data Sets: This facet holds the data structures found in a system. The Data Set is an organized collection of attributes that describe a specific subject area/domain (Examples: Product, Order, Item, etc.).
- Attributes: Represents the characteristic of an entity (Examples: ProductID, ProductName, Price, etc.).
- Glossary: Holds a definition of business terms, data sets, attributes, and other objects.
- Data Quality: Holds data quality metrics or rules.
- People: Holds the information of users created in the Axon application. Each user is associated with a role-specific to the user’s function, and the users can perform actions in the application based on their roles.
Here is a screenshot of the default facets. We can add additional facets by clicking on the “+” button next to the “People” facet. Additional facet selection will have to be done every time we log in to the Axon application.
Here are the additional facets that can be added to the Axon search view:
- Interface: Lists all the interfaces that define the flow of information between the systems.
- Change Request: A change request is to facilitate discussion and change the approval process across object stakeholders and Axon users.
- Client: Used to classify the clients into different segments and associate resources defined in Axon with the client segments. For example, we could define different client segments or market segments (North, South, East, West, Gen Y, Gen X, etc.) and associate them with different data sets and systems.
- Policy: Holds detailed information about policies that are to be enforced in an organization. For instance, one could create detailed policies related to HIPAA and associate these policies to different Process objects.
- Process: Allows us to inventory the list of processes with details such as brief description, owner, inputs, outputs, parent process, etc. and associate these processes with other objects (Glossary, System, etc.).
- Product: Provides the ability to inventory production information about an organization and associate them with other facets.
- Project: Facilitates the capturing of data related to projects within the organization and links them to other facets such as Policy, Glossary, and System.
To create an object, click on the “Create” link at the top of the screen and select the corresponding object from the menu, as shown in the below picture. Here in this picture, a new interface object is created. And, you can observe that the prerequisite object for an interface is a “System.”
Creating Objects in the Right Order
The objects in Axon need to be created in sequential order. For example, a Dataset cannot be created until the System and the glossary item that describes it has been created. So, every object has a dependency on other parent objects to be created. Here is the sequential order of objects.
- Organization unit
- People
- Glossary
- System
- Data Set
- Attributes
- Interface
- Data Attribute Link
- Data Quality Rule
- Policy
- Process
- Project
Objects in Axon can be created manually using the “Create” link on top of the Axon view and then selecting the appropriate object from the menu options, as discussed earlier. Once an object is created and saved, additional tabs become available to establish relationships between other objects with the current object.
There is another option to create objects in Axon using the “Bulk Upload.” This facilitates bulk data upload using a CSV file format with pre-existing templates for each object or to create relationships between the objects.
Bulk upload can be done by selecting the “Create” link and clicking the menu option “Create from file.” By selecting the “upload type,” it can be one of the options of “Object,” “Relationships,” or “Roles.” Then, specify actual Object/Relationship/Role, define the upload options by New/Existing, and click “Next-Map Columns.” In the next screen, the mappings are properly mapped and then click “Upload.” The status bar will show the status of completion and when the upload is successful. Any data errors related to the file upload can be fixed, and the file can be uploaded again.
You can also download the template using the “Download Template” option. Here is a screenshot of the template for System objects.
The columns in red are required, and the rest of the columns are optional. The file cannot be uploaded if data is missing from the required columns.
Unison Search Vs Quick Search in Informatica Axon
Unison search unifies the search across different facets — for example, in the below screenshot, a search is performed on CMD-ID in the glossary inventory. The result is CMD-ID linked information filtered across all facets.
Below is a screenshot with filtered facets based on the Unison Search. We can see that the data sets count is reduced to 18 out of 85 datasets. When you click on the data sets inventory, you will see only 18 data sets, which are linked to a CMD-ID glossary object. We can perform a Unison Search on multiple objects concurrently. Select the row in the grid that needs to be added to the existing unison search, and click on the search button to add this row into the search. This way, we can search for multiple objects concurrently. We can clear the search as well by clicking the search button to “Remove the object” or “Clear search” to begin from scratch. This is a very useful search option when we need to filter based on an object to view linked objects across different facets.
On the other hand, a Quick Search is to search a specific object and the results will be displayed specific to that object and no filters will be applied on the other inventory tabs. We can find the quick search option on the right side of the Axon view with a magnifying glass icon.
Things to Keep in Mind While Using Axon
- Align Axon implementation with your organization’s DG vision, goals, objectives, and roadmap.
- Involve the entire business in Axon implementation and knowledge-gathering exercises.
- Start with a POC, build stakeholder confidence, and build the knowledge base iteratively.
- Leverage integration with other Informatica products (example: EDC, IDQ).
- Axon is not a data cataloging tool. Enterprise Data Catalog is a cataloging tool that can scan for all the physical (technical) data assets within the organization whereas Axon provides the ability to put the context to the data.
Summary
Business-IT collaboration is a key aspect of making Data Governance programs successful. Gathering knowledge about different enterprise assets and their relationships provides a business the context to help prioritize what needs to be governed. The Informatica Axon tool facilitates the collection of data inventory related to not just data sets, but also Systems, Processes, Projects, Regulations, Clients, etc., which are vital for a successful Data Governance program.
If you have questions about Data Governance, Informatica Axon, or need assistance with your Data Governance program, please engage with us via comments on this blog post or reach out to us here.
Руководство по Axon Framework
1. Overviewс
В этой статье мы рассмотримAxon и то, как он помогает нам реализовывать приложения с учетомCQRS (разделение ответственности командных запросов) иEvent Sourcing.
В этом руководстве будут использоваться как Axon Framework, так иAxon Server. Первый будет содержать нашу реализацию, а второй будет нашим специализированным решением для хранилища событий и маршрутизации сообщений.
Пример приложения, который мы создадим, ориентирован на доменOrder. Для этогоwe’ll be leveraging the CQRS and Event Sourcing building blocks Axon provides us.
Обратите внимание, что многие общие концепции взяты прямо изDDD,, что выходит за рамки данной статьи.
2. Maven Зависимости
Мы создадим приложение Axon / Spring Boot. Следовательно, нам нужно добавить последнюю зависимостьaxon-spring-boot-starter к нашемуpom.xml, а также зависимостьaxon-test для тестирования:
org.axonframework
axon-spring-boot-starter
4.1.2
org.axonframework
axon-test
4.1.2
test
3. Axon Server
Мы будем использоватьAxon Server в качествеEvent Store и нашего специального решения для маршрутизации команд, событий и запросов.
Как магазин событий, он дает нам идеальные характеристики, необходимые для хранения событий. В статьеThis объясняется, почему это желательно.
Как решение для маршрутизации сообщений, оно дает нам возможность соединять несколько экземпляров вместе, не сосредотачиваясь на настройке таких вещей, как тема RabbitMQ или Kafka, для обмена и отправки сообщений.
Axon Server можно загрузитьhere. Поскольку это простой файл JAR, для его запуска достаточно выполнить следующую операцию:
Это запустит один экземпляр Axon Server, доступный черезlocalhost:8024. Конечная точка предоставляет обзор подключенных приложений и сообщений, которые они могут обрабатывать, а также механизм запросов к хранилищу событий, содержащемуся в Axon Server.
Конфигурация Axon Server по умолчанию вместе с зависимостьюaxon-spring-boot-starter гарантирует, что наша служба заказов будет автоматически подключаться к нему.
4. API службы заказов — Команды
Мы настроим нашу службу заказов с учетом CQRS. Поэтому мы будем акцентировать внимание на сообщениях, которые проходят через наше приложение.
First, we’ll define the Commands, meaning the expressions of intent. Служба заказов может обрабатывать три различных типа действий:
-
Размещение нового заказа
-
Подтверждение заказа
-
Доставка заказа
Естественно, будет три командных сообщения, с которыми может работать наш домен —PlaceOrderCommand,ConfirmOrderCommand иShipOrderCommand:
public class PlaceOrderCommand {
@TargetAggregateIdentifier
private final String orderId;
private final String product;
// constructor, getters, equals/hashCode and toString
}
public class ConfirmOrderCommand {
@TargetAggregateIdentifier
private final String orderId;
// constructor, getters, equals/hashCode and toString
}
public class ShipOrderCommand {
@TargetAggregateIdentifier
private final String orderId;
// constructor, getters, equals/hashCode and toString
}
The TargetAggregateIdentifier annotation tells Axon that the annotated field is an id of a given aggregate to which the command should be targeted. Мы кратко коснемся агрегированных показателей позже в этой статье.
Также обратите внимание, что мы отметили поля в командах какfinal.. Это намеренно, какit’s a best practice for any message implementation to be immutable.
5. API службы заказов — События
Our aggregate will handle the commands, поскольку он отвечает за принятие решения о том, можно ли разместить, подтвердить или отправить Заказ.
Он уведомит остальную часть заявки о своем решении, опубликовав событие. У нас будет три типа событий —OrderPlacedEvent, OrderConfirmedEvent иOrderShippedEvent:
public class OrderPlacedEvent {
private final String orderId;
private final String product;
// default constructor, getters, equals/hashCode and toString
}
public class OrderConfirmedEvent {
private final String orderId;
// default constructor, getters, equals/hashCode and toString
}
public class OrderShippedEvent {
private final String orderId;
// default constructor, getters, equals/hashCode and toString
}
6. Командная модель — агрегированный порядок
Теперь, когда мы смоделировали наш основной API с учетом команд и событий, мы можем приступить к созданию модели команд.
Поскольку наш домен ориентирован на работу с заказами,we’ll create an OrderAggregate as the center of our Command Model.
6.1. Агрегатный класс
Итак, давайте создадим наш основной агрегатный класс:
@Aggregate
public class OrderAggregate {
@AggregateIdentifier
private String orderId;
private boolean orderConfirmed;
@CommandHandler
public OrderAggregate(PlaceOrderCommand command) {
AggregateLifecycle.apply(new OrderPlacedEvent(command.getOrderId(), command.getProduct()));
}
@EventSourcingHandler
public void on(OrderPlacedEvent event) {
this.orderId = event.getOrderId();
orderConfirmed = false;
}
protected OrderAggregate() { }
}
The Aggregate annotation is an Axon Spring specific annotation marking this class as an aggregate. Он уведомит платформу о том, что требуемые строительные блоки CQRS и Event Sourcing должны быть созданы для этогоOrderAggregate.
Поскольку агрегат будет обрабатывать команды, предназначенные для конкретного экземпляра агрегата, нам нужно указать идентификатор с аннотациейAggregateIdentifier.
Наш агрегат начнет свой жизненный цикл после обработкиPlaceOrderCommand в «конструкторе обработки команд»OrderAggregate. To tell the framework that the given function is able to handle commands, we’ll add the CommandHandler annotation.
When handling the PlaceOrderCommand, it will notify the rest of the application that an order was placed by publishing the OrderPlacedEvent. Для публикации события из агрегата мы будем использоватьAggregateLifecycle#apply(Object…).
С этого момента мы можем фактически начать использовать Event Sourcing как движущую силу для воссоздания агрегатного экземпляра из его потока событий.
Мы начинаем это с «события создания агрегата»,OrderPlacedEvent, которое обрабатывается аннотированной функциейEventSourcingHandler для установки состоянияorderId иorderConfirmed агрегата Order. .
Также обратите внимание, что для возможности получения агрегата на основе его событий Axon требуется конструктор по умолчанию.
6.2. Агрегированные обработчики команд
Теперь, когда у нас есть базовый агрегат, мы можем приступить к реализации остальных обработчиков команд:
@CommandHandler
public void handle(ConfirmOrderCommand command) {
apply(new OrderConfirmedEvent(orderId));
}
@CommandHandler
public void handle(ShipOrderCommand command) {
if (!orderConfirmed) {
throw new UnconfirmedOrderException();
}
apply(new OrderShippedEvent(orderId));
}
@EventSourcingHandler
public void on(OrderConfirmedEvent event) {
orderConfirmed = true;
}
В сигнатуре наших обработчиков источников команд и событий просто указаноhandle({the-command}) иon({the-event}) для сохранения краткого формата.
Кроме того, мы определили, что заказ может быть отправлен только в том случае, если он подтвержден. Таким образом, мы выбросимUnconfirmedOrderException, если это не так.
Это иллюстрирует необходимость для обработчика источникаOrderConfirmedEvent обновить состояниеorderConfirmed доtrue для агрегата Order.
7. Тестирование командной модели
Во-первых, нам нужно настроить наш тест, создавFixtureConfiguration дляOrderAggregate:
private FixtureConfiguration fixture;
@Before
public void setUp() {
fixture = new AggregateTestFixture<>(OrderAggregate.class);
}
Первый тестовый пример должен охватывать простейшую ситуацию. Когда агрегат обрабатываетPlaceOrderCommand, он должен выдатьOrderPlacedEvent:
String orderId = UUID.randomUUID().toString();
String product = "Deluxe Chair";
fixture.givenNoPriorActivity()
.when(new PlaceOrderCommand(orderId, product))
.expectEvents(new OrderPlacedEvent(orderId, product));
Затем мы можем проверить логику принятия решений, согласно которой мы можем отправить заказ только в том случае, если он подтвержден. В связи с этим у нас есть два сценария: в одном ожидается исключение, а в другом —OrderShippedEvent.
Давайте посмотрим на первый сценарий, в котором мы ожидаем исключения:
String orderId = UUID.randomUUID().toString();
String product = "Deluxe Chair";
fixture.given(new OrderPlacedEvent(orderId, product))
.when(new ShipOrderCommand(orderId))
.expectException(IllegalStateException.class);
А теперь второй сценарий, в котором мы ожидаемOrderShippedEvent:
String orderId = UUID.randomUUID().toString();
String product = "Deluxe Chair";
fixture.given(new OrderPlacedEvent(orderId, product), new OrderConfirmedEvent(orderId))
.when(new ShipOrderCommand(orderId))
.expectEvents(new OrderShippedEvent(orderId));
8. Модель запроса — обработчики событий
Пока что мы создали наш основной API с командами и событиями, и у нас есть командная модель нашей службы заказов CQRS, агрегат заказов.
Далееwe can start thinking of one of the Query Models our application should service.
Одна из таких моделей —OrderedProducts:
public class OrderedProduct {
private final String orderId;
private final String product;
private OrderStatus orderStatus;
public OrderedProduct(String orderId, String product) {
this.orderId = orderId;
this.product = product;
orderStatus = OrderStatus.PLACED;
}
public void setOrderConfirmed() {
this.orderStatus = OrderStatus.CONFIRMED;
}
public void setOrderShipped() {
this.orderStatus = OrderStatus.SHIPPED;
}
// getters, equals/hashCode and toString functions
}
public enum OrderStatus {
PLACED, CONFIRMED, SHIPPED
}
We’ll update this model based on the events propagating through our system. Компонент SpringService для обновления нашей модели сделает свое дело:
@Service
public class OrderedProductsEventHandler {
private final Map orderedProducts = new HashMap<>();
@EventHandler
public void on(OrderPlacedEvent event) {
String orderId = event.getOrderId();
orderedProducts.put(orderId, new OrderedProduct(orderId, event.getProduct()));
}
// Event Handlers for OrderConfirmedEvent and OrderShippedEvent...
}
Поскольку мы использовали зависимостьaxon-spring-boot-starter для запуска нашего приложения Axon, фреймворк автоматически просканирует все bean-компоненты на наличие существующих функций обработки сообщений.
ПосколькуOrderedProductsEventHandler имеет аннотированные функцииEventHandler для хранения и обновленияOrderedProduct, этот bean-компонент будет зарегистрирован платформой как класс, который должен получать события, не требуя какой-либо конфигурации с нашей стороны.
9. Модель запроса — обработчики запросов
Затем, чтобы запросить эту модель, например, чтобы получить все заказанные продукты, мы должны сначала ввести сообщение Query в наш основной API:
public class FindAllOrderedProductsQuery { }
Во-вторых, нам нужно обновитьOrderedProductsEventHandler, чтобы иметь возможность обрабатыватьFindAllOrderedProductsQuery:
@QueryHandler
public List handle(FindAllOrderedProductsQuery query) {
return new ArrayList<>(orderedProducts.values());
}
Аннотированная функцияQueryHandler будет обрабатыватьFindAllOrderedProductsQuery и должна возвращатьList<OrderedProduct> независимо, аналогично любому запросу «найти все».
10. Собираем все вместе
Мы дополнили наш основной API командами, событиями и запросами и настроили нашу модель команд и запросов, используя моделиOrderAggregate иOrderedProducts.
Далее следует связать свободные концы нашей инфраструктуры. Поскольку мы используемaxon-spring-boot-starter, это автоматически устанавливает большую часть необходимой конфигурации.
Во-первых, Axon Serveras we want to leverage Event Sourcing for our Aggregate, we’ll need an EventStore., который мы запустили на третьем шаге, заполнит эту дыру. __
Во-вторых, нам нужен механизм для хранения нашей модели запросаOrderedProduct. В этом примере мы можем добавитьh2 как базу данных в памяти иspring-boot-starter-data-jpa для простоты использования:
org.springframework.boot
spring-boot-starter-data-jpa
com.h2database
h2
runtime
10.1. Настройка конечной точки REST
Затем нам нужно иметь доступ к нашему приложению, для которого мы будем использовать конечную точку REST, добавив зависимостьspring-boot-starter-web:
org.springframework.boot
spring-boot-starter-web
С нашей конечной точки REST мы можем начать отправку команд и запросов:
@RestController
public class OrderRestEndpoint {
private final CommandGateway commandGateway;
private final QueryGateway queryGateway;
// Autowiring constructor and POST/GET endpoints
}
The CommandGateway is used as the mechanism to send our command messages, and the QueryGateway, in turn, to send query messages. Шлюзы предоставляют более простой и понятный API по сравнению сCommandBus иQueryBus, с которыми они соединяются.
С этого моментаour OrderRestEndpoint should have a POST endpoint to place, confirm, and ship an order:
@PostMapping("/ship-order")
public void shipOrder() {
String orderId = UUID.randomUUID().toString();
commandGateway.send(new PlaceOrderCommand(orderId, "Deluxe Chair"));
commandGateway.send(new ConfirmOrderCommand(orderId));
commandGateway.send(new ShipOrderCommand(orderId));
}
Это округляет командную часть нашего приложения CQRS.
Теперь все, что осталось, это конечная точка GET для запроса всехOrderedProducts:
@GetMapping("/all-orders")
public List findAllOrderedProducts() {
return queryGateway.query(new FindAllOrderedProductsQuery(),
ResponseTypes.multipleInstancesOf(OrderedProduct.class)).join();
}
In the GET endpoint, we leverage the QueryGateway to dispatch a point-to-point query. При этом мы создаем значение по умолчаниюFindAllOrderedProductsQuery, но нам также необходимо указать ожидаемый тип возврата.
Поскольку мы ожидаем возврата нескольких экземпляровOrderedProduct, мы используем статическую функциюResponseTypes#multipleInstancesOf(Class). Благодаря этому мы обеспечили базовый вход в сторону запросов нашей службы заказов.
Мы завершили настройку, поэтому теперь мы можем отправлять некоторые команды и запросы через наш контроллер REST после того, как мы запустилиOrderApplication.
POST-передача в конечную точку/ship-order создаст экземплярOrderAggregate, который будет публиковать события, которые, в свою очередь, сохранят / обновят наш GET-запросOrderedProducts. из конечной точки/all-orders опубликует сообщение запроса, которое будет обрабатыватьсяOrderedProductsEventHandler, которое вернет все существующиеOrderedProducts.
11. Заключение
В этой статье мы представили Axon Framework как мощную базу для создания приложения, использующего преимущества CQRS и Event Sourcing.
Мы внедрили простой сервис Order, используя платформу, чтобы показать, как такое приложение должно быть структурировано на практике.
Наконец, Axon Server выдавал себя за хранилище событий и механизм маршрутизации сообщений.
Реализацию всех этих примеров и фрагментов кода можно найти вover on GitHub.
Перейти к содержанию
На чтение 1 мин Просмотров 15 Опубликовано 21.03.2017
В результате использования технологий недавно приобретенной компании Diaku корпорация Informatica создала решение Axon для управления данными. Новый продукт в области Enterprise Data Governance позволяет реализовывать программы по управлению данными для любых индустрий.
В Informatica Axon технологии Diaku интегрированы с технологиями Informatica по управлению качеством данных, мастер-данными и Big Data. Бизнес-пользователи получат быстрый поиск и доступ к нужным данным, что снизит время реализации бизнес-инициатив, повысит эффективность работы с данными и снизит затраты на их обработку, что позволит достичь целостного подхода к управлению разрозненными данными и знаниями. Informatica Axon позволит повысить отдачу от данных посредством улучшения их качества, доступности и достоверности.
Informatica анонсировала продукт Informatica Axon – первое полностью интегрированное решение по управлению данными (Data Governance). Informatica Axon разработана таким образом, чтобы технические и бизнес-пользователи могли эффективно управлять корпоративными данными. В результате решение позволяет реализовывать программы по управлению данными для любых индустрий.
Informatica Axon основана на технологиях приобретенной компании Diaku и интегрирована с лидирующими технологиями Informatica по управлению качеством данных, мастер-данными, Big Data, что эффективно позволяет решать бизнесу задачи по управлению данными в компаниях крупного, среднего и малого бизнеса. “Informatica Axon перевернет рынок решений по управлению корпоративными данными и будет особенно востребовано в индустриях, где требования регуляторов особенно высоки”,- добавил Амит Валиа (Amit Walia), исполнительный директор корпорации Informatica. Интегрированные приложения Informatica Data Quality, Informatica MDM, Informatica Enterprise Information Catalog и Informatica Secure@Source вместе с Informatica Axon являются продуктом, который еще никто не мог предложить рынку с точки зрения полноты реализации задач по управлению данными (Data Governance).
В эру трансформации бизнеса в digital, когда в основе деятельности лежат большие данные, сложность и объем которых растут с каждым годом, возникает потребность их правильного использования. Успех активностей бизнеса зависит от эффективного управления данными в совокупности всеми сотрудниками: представителями бизнес-сегментов, архитекторами и топ-менеджерами. Традиционно функциональный разрыв между ИТ-специалистами и бизнес-пользователями, использующими соответствующие инструменты, довольно широкий, и именно Informatica Axon стала первым на рынке бизнес решением, которое нивелирует эту разницу. Как результат бизнес получает более быстрый поиск и доступ к нужным данным, тем самым снижается время реализации бизнес-инициатив, повышается эффективность работы с данными при снижение затрат на их обработку, а также достигается целостный подход к управлению разрозненными данными и знаниями.
Сейчас многие компании рассматривают данные, как основной актив. Informatica Axon позволяет повысить отдачу от этого актива посредством улучшения качества данных, их доступности и достоверности.
https://www.informatica.com/