Documentation for a newer release is available. View Latest

¿Cómo añado una extensión personalizada?

En extensiones se comentaron los distintos tipos de extensiones disponibles. Esta guía explica cómo proporcionar tu propia extensión personalizada.

La clase importante a tener en cuenta aquí es ExtensionsProvider, que te permite especificar cualquiera de los puntos de extensión que necesitas usar en tus flujos. No es necesario proporcionar todas las extensiones aquí, ya que cualquier extensión que no se proporcione simplemente volverá a usar las implementaciones por defecto.

Todas las extensiones se registran a través de la clase de dominio del modelo. Después de construir tu dominio del modelo, verás:

new XXXDomain.Builder(actorSystem)
    .withXXXExtensions(ExtensionProvider.<XXXAggregate>builder().build())
    .withFallbackExtensions(ExtensionProvider.<Aggregate>builder().build())
    .build();

En esta definición del Builder, podemos ver que hay dos métodos clave disponibles:

  • withXXXExtensions - esto nos permite definir un proveedor de extensiones que es específico para un flujo dado (definido a través de la definición del aggregate).

  • withFallbackExtensions - esto nos permite definir un proveedor de extensiones por defecto que se aplicará a todos los flujos. Nota: cualquier extensión proporcionada a nivel de flujo tendrá prioridad sobre estas extensiones de respaldo.

Por ejemplo, aquí podemos ver un dominio estándar que se construye y al que se le ha proporcionado una extensión específica de manejo de errores:

new ErrorHandlingDomain.Builder(actorSystem)
                .withErrorHandlingMappingAdapter(errorHandlingMappingPort)
                .withErrorHandlingExternalDomainActionAdapter(errorHandlingExternalDomainActionPort)
                .withErrorHandlingExtensions(ExtensionProvider.<ErrorHandlingAggregate>builder().flowErrorExtensions(flowErrorExtensions).build())
                .withEventBus(systemEventBus)
                .withDispatcher(new SimpleFloDispatcher())
                .build();