Pasos de Migración para IPF-2024.2.0
Pasos de Migración
MPS
Todos los proyectos que utilizan MPS los scripts de construcción deberán ser actualizados. Para hacer esto, abra el script de construcción en MPS al hacer clic en el archivo apropiado en el navegador:
Luego presione Ctrl+R y asegúrese de que 'incluir stub y modelos no relacionados con el proyecto seleccionados. Luego, ingrese 'icon dsl' en el menú desplegable y seleccione 'com.iconsolutions.dsl.dependencies'
Cuando se le solicite, acepte la importación del módulo.
Repita el proceso para 'com.iconsolutions.dsl.languages.
A continuación, en la sección de dependencias, añada una nueva línea (presione ENTER) y luego seleccione de 'com.iconsolutions.dsl.dependencies' en la autocompletación (presione Ctrl+Space).
En la sección de ubicación, utilice la función de autocompletar (presione Ctrl+Space) para seleccionar '$plugin_home', luego presione / y después seleccione nuevamente 'com.iconsolutions.dsl.dependencies' de la función de autocompletar.
Repita el proceso para 'com.iconsolutions.dsl.languages'. Entonces, sus dependencias deberían verse así:
Ahora, debería ver un error en su sección de solución para la compilación:
Para resolver, haga clic en el texto subrayado y presione Alt+Enter para abrir el popup de intenciones y seleccione 'Recargar Módulos Desde Disco'.
Eso debería resolver el error. Finalmente, debe regenerar el script de construcción. Para hacer esto, simplemente haga clic derecho en la solución de construcción en el navegador y seleccione 'Rebuild Solution'.
Ahora debería poder construir su proyecto a través de maven como de costumbre.
Actualizar pacs. 003 versión
El soportado pacs. 003 message type dentro de la IPF ISO20022 Modelo ha sido actualizado de pacs. 003.001.07 to pacs. 003.001.08.
Si su IPF solution incluye pacs. 003 mensajes, deberá realizar los siguientes cambios de tipo:
| Versión 7 Tipo | Versión 8 Tipo |
|---|---|
com.iconsolutions.iso20022.datatypes. Address Type2Code |
com.iconsolutions.iso20022.message.components.technical.address_type3_choice. Address Type3Choice |
com.iconsolutions.iso20022.message.components.direct_debit_mandate.amendment_information_details11.Información Sobre La Modificación11 |
com.iconsolutions.iso20022.message.components.direct_debit_mandate.amendment_information_details13.Información Sobre La Modificación13 |
com.iconsolutions.iso20022.message.components.organisation.branch_and_financial_institution_identification5.Branch And Financial Institution Identification5 |
com.iconsolutions.iso20022.message.components.organisation.branch_and_financial_institution_identification6.Branch And Financial Institution Identification6 |
com.iconsolutions.iso20022.message.components.organisation_identification.branch_data2.Branch Data2 |
com.iconsolutions.iso20022.message.components.organisation_identification.branch_data3Branch Data3 |
com.iconsolutions.iso20022.message.components.cash_account.cash_account24.Cash Account24 |
com.iconsolutions.iso20022.message.components.cash_account.cash_account38.Cuenta De Efectivo38 |
com.iconsolutions.iso20022.message.components.charges.charges2.Charges2 |
com.iconsolutions.iso20022.message.components.charges.charges7.Cargos7 |
com.iconsolutions.iso20022.message.components.person_identification.contact_details2.Contact Details2 |
com.iconsolutions.iso20022.mensaje.componentes.identificación_personal.contacto4.Contacto4 |
com.iconsolutions.iso20022.message.components.person.date_and_place_of_birth. DateAndPlaceOfBirth |
com.iconsolutions.iso20022.message.components.person.date_and_place_of_birth1.Fecha YLugar De Nacimiento1 |
com.iconsolutions.iso20022.message.components.date_time_period.date_period_details. DatePeriodDetails |
com.iconsolutions.iso20022.message.components.technical.date_period2.Date Period2 |
com.iconsolutions.iso20022.message.components.direct_debit.direct_debit_transaction9.Direct Debit Transaction9 |
com.iconsolutions.iso20022.message.components.direct_debit.direct_debit_transaction10.Direct Debit Transaction10 |
com.iconsolutions.iso20022.message.components.direct_debit.información_transacción_debito_directo21.Información Transacción Debito Directo21 |
com.iconsolutions.iso20022.message.components.direct_debit.información_de_transacción_de_débito_directo24.Información De Transacción De Débito Directo24 |
com.iconsolutions.iso20022.message.components.organisation_identification.financial_institution_identification8.Financial Institution Identification8 |
com.iconsolutions.iso20022.message.components.organisation_identification.financial_institution_identification18.Identificación De Institución Financiera18 |
com.iconsolutions.iso20022.message.definitions.payments_clearing_and_settlement.pacs003.FITo FICustomer Direct Debit V07 |
com.iconsolutions.iso20022.message.definitions.payments_clearing_and_settlement.pacs003.FITo FICustomer Direct Debit V08 |
com.iconsolutions.iso20022.message.components.garnishment.garnishment1.Garnishment1 |
com.iconsolutions.iso20022.message.components.garnishment.garnishment3.Garnishment3 |
com.iconsolutions.iso20022.message.components.payment.group_header50.Group Header50 |
com.iconsolutions.iso20022.mensaje.componentes.pago.encabezado_grupo94Encabezado Grupo94 |
com.iconsolutions.iso20022.message.components.direct_debit_mandate.mandate_related_information11.Mandate Related Information11 |
com.iconsolutions.iso20022.message.components.direct_debit_mandate.mandate_related_information14.Mandate Related Information14 |
com.iconsolutions.iso20022.message.components.party_identification_information.name_and_address10.Nombre YDirección10 |
com.iconsolutions.iso20022.message.components.party_identification_information.name_and_address16.Nombre YDirección16 |
com.iconsolutions.iso20022.datatypes. Name Prefix1Code |
com.iconsolutions.iso20022.datatypes. Name Prefix2Code |
com.iconsolutions.iso20022.message.components.organisation_identification.organisation_identification8.Organisation Identification8 |
com.iconsolutions.iso20022.message.components.organisation_identification.organisation_identification29. Organisation Identification29 |
com.iconsolutions.iso20022.message.components.party_identification_information.party11_choice. Party11Choice |
com.iconsolutions.iso20022.message.components.party_identification_information.party38_choice. Party38Choice |
com.iconsolutions.iso20022.message.components.party_identification_information.party_identification43.Party Identification43 |
com.iconsolutions.iso20022.message.components.party_identification_information.party_identification135.Party Identification135 |
com.iconsolutions.iso20022.message.components.payment_identification.payment_identification3.Payment Identification3 |
com.iconsolutions.iso20022.message.components.payment_identification.payment_identification7.Payment Identification7 |
com.iconsolutions.iso20022.message.components.payment_processing.payment_type_information25.Payment Type Information25 |
com.iconsolutions.iso20022.message.components.payment_processing.payment_type_information27.Payment Type Information27 |
com.iconsolutions.iso20022.message.components.person_identification.person_identification5.Person Identification5 |
com.iconsolutions.iso20022.message.components.person_identification.person_identification13.Person Identification13 |
com.iconsolutions.iso20022.message.components.postal_address.postal_address6.Postal Address6 |
com.iconsolutions.iso20022.message.components.postal_address.postal_address24Postal Address24 |
com.iconsolutions.iso20022.message.components.document.remittance_information11.Remittance Information11 |
com.iconsolutions.iso20022.message.components.document.remittance_information16.Remittance Information16 |
com.iconsolutions.iso20022.message.components.contact_point.remittance_location4.Remittance Location4 |
com.iconsolutions.iso20022.message.components.contact_point.remittance_location7.Remittance Location7 |
com.iconsolutions.iso20022.message.components.contact_point.remittance_location_details1.Remittance Location Details1 |
com.iconsolutions.iso20022.message.components.contact_point.remittance_location_data1.Remittance Location Data1 |
com.iconsolutions.iso20022.message.components.cash_settlement.settlement_instruction2.Settlement Instruction2 |
com.iconsolutions.iso20022.message.components.cash_settlement.settlement_instruction8.Settlement Instruction8 |
com.iconsolutions.iso20022.message.components.document.structured_remittance_information13.Información De Remesa Estructurada13 |
com.iconsolutions.iso20022.message.components.document.structured_remittance_information16.Información De Remesas Estructurada16 |
com.iconsolutions.iso20022.message.components.tax.tax_amount1.Tax Amount1 |
com.iconsolutions.iso20022.message.components.tax.tax_amount2.Tax Amount2 |
com.iconsolutions.iso20022.message.components.tax.tax_information4.Tax Information4 |
com.iconsolutions.iso20022.message.components.tax.tax_information7.Tax Information7 |
com.iconsolutions.iso20022.message.components.tax_period.tax_period1.Tax Period1 |
com.iconsolutions.iso20022.message.components.tax_period.tax_period2.Tax Period2 |
com.iconsolutions.iso20022.message.components.tax_record.tax_record1.Tax Record1 |
com.iconsolutions.iso20022.message.components.tax_record.tax_record2.Tax Record2 |
com.iconsolutions.iso20022.message.components.tax.tax_record_details1.Tax Record Details1 |
com.iconsolutions.iso20022.message.components.tax.tax_record_details2.Tax Record Details2 |
| Al comparar el pacs. 003.001.07 y pacs. 008.001.08 En los XSD, usted notará que se han añadido o eliminado un pequeño número de campos. Como resultado, puede que necesite realizar cambios en su código más allá de los cambios de tipo mencionados anteriormente. Por ejemplo, si anteriormente pobló un campo que ahora ha sido eliminado. |
Migrando a EVENT_STREAM_PER_FLOW flujos
Para apoyar el despliegue de nuevas versiones de flujo a través de rolling upgrades de sus servicios de orquestación, todos los journal processor s definidos por el servicio deben ser cambiados para utilizar EVENT_STREAM_PER_FLOW como su event-streaming-type.
Antes de que pueda realizar el cambio de configuración, sin embargo, deberá reducir su implementación de servicio a cero y ejecutar una migración similar a la que se especifica a continuación.
// all the unique flows in your service, as indicated by the
// `ipf.behaviour.event-processor.flows` configuration property
let flows = [
"moduleA. FlowAV1",
"moduleA. FlowAV2",
"moduleB. FlowBV5",
"moduleC. FlowBV10"
]
db.getCollection("mongoOffset")
.find({"_id.tag": /tag-.+/})
.forEach(doc => {
flows.forEach(flow => {
let flowTag = JSON.parse(JSON.stringify(doc));
flowTag.offset.objectId = doc.offset.objectId;
flowTag._id.tag = doc._id.tag.replace("tag", flow);
try {
db.getCollection("mongoOffset").insertOne(flowTag);
} catch (e) {
console.log(e)
}
});
});
| Es imperativo que usted liste todos los flujos presentes en la versión actual de su servicio de orquestación. Cualquier flujo que se pierda tendrá todos sus events reprocesado por el journal processor, que puede causar duplicados notifications a ser enviado a la customers, métricas incorrectas que aparecen en los paneles de control o simplemente causan una desaceleración masiva en el procesamiento de nuevos domain events ya que el procesador comenzará desde el principio del diario. |
Para obtener la lista correcta de flujos activos, puede ejecutar el siguiente comando curl contra una instancia de su servicio de orquestación:
curl your_service_host:port/actuator/info | jq | grep "ipf.behaviour.event-processor.flows"
Alternativamente, puede ejecutar el siguiente fragmento de prueba desde dentro del módulo que contiene el servicio de su SpringBootApplication-- la salida será el script de migración que debe ejecutar contra su base de datos.
import com.typesafe.config. ConfigFactory;
import org.junit.jupiter.api. Test;
import java.util.stream. Collectors;
public class MigrationGenerator {
@Test
void generateMigration() {
var flowsAsJsArray = ConfigFactory.parseResources("ipf-impl.conf")
.withFallback(ConfigFactory.parseResources("ipf.conf"))
.withFallback(ConfigFactory.defaultReference())
.resolve()
.getStringList("ipf.behaviour.event-processor.flows")
.stream().distinct()
.map("\"%s\""::formatted)
.collect(Collectors.joining(",\n ", "let flows = [\n ", "\n]\n"));
var migrationScriptWithoutFlows = """
db.getCollection("mongoOffset")
.find({"_id.tag": /tag-.+/})
.forEach(doc => {
flows.forEach(flow => {
let flowTag = JSON.parse(JSON.stringify(doc));
flowTag.offset.objectId = doc.offset.objectId;
flowTag._id.tag = doc._id.tag.replace("tag", flow);
try {
db.getCollection("mongoOffset").insertOne(flowTag);
} catch (e) {
console.log(e)
}
});
});
""";
System.out.println(flowsAsJsArray);
System.out.println(migrationScriptWithoutFlows);
}
}
Migrando a ODS Inquiry API V2
-
Detalles de versiones y la V2 completa ODS Inquiry API La guía de migración se puede encontrar en el ODS API versioning visión general página
Es importante señalar que un cambio de configuración DEBE aplicarse si ya está utilizando los conectores de cliente V1 y no desea migrar inmediatamente a los conectores de cliente V2. Su configuración debe actualizarse para anular la configuración de la versión del conector de cliente de la siguiente manera:`ods.inquiry.client.version=1`
Esto asegurará que sus conectores de cliente V1 actuales permanezcan habilitados y no será necesario un cambio de código. Consulte Consulta V1 API documentación del cliente para más información sobre el cliente V1 APIs que se puede habilitar.
Migrando a la última test framework
| Ha habido cambios menores en las estructuras de los paquetes en el test framework. 'ipf-test-fw-core' ahora se ha trasladado a 'ipf-test-fw-caja blanca'. |
El test-fw-extensions-xxx han sido eliminados del paquete principal para asegurar que las extensiones no requeridas no se carguen siempre. Como consecuencia, las implementaciones de prueba que dependían de estas dependencias ahora deberán declararlas explícitamente. Estas se enumeran a continuación y generalmente son requeridas al utilizar uno de los proporcionados.message transport ers:
|
Jackson cambio en el comportamiento de serialización
Tenga en cuenta que como resultado de la actualización Jackson to 2.17.x (actualizando Spring Boot 3.3.x), Jackson ya no está serializando objetos cuyos miembros son todos nulos. Por ejemplo, en IPF 2024.1 y más viejo un objeto que se ve así:
{
"myObject": {
"someKey": "someValue",
"someBlankParent": {}
}
}
Ahora se serializará (y deserializará) de la siguiente manera:
{
"myObject": {
"someKey": "someValue"
}
}
(i.e.someBlankParent ahora está totalmente ausente en lugar de ser una cáscara vacía)
Esto podría presentarse como un NullPointerException donde las comprobaciones nulas asumían que había una estructura vacía como un
objeto padre, cuando uno ya no existe. La solución es agregar una verificación nula al objeto padre también.
Tenga en cuenta que no se está perdiendo ningún dato, ya que los objetos que no se están serializando estaban vacíos desde el principio. Cualquier padre el objeto que contiene al menos un valor será serializado junto con sus miembros portadores de datos.
Colección de TransactionCacheEntry-cambio en los nombres de índice
Hubo un cambio en los nombres de índice que deben ser creados para transactionCacheEntry.mongodb colección (si no se crean y la creación de índices está habilitada).
-
findByTypeAndHashIndex se renombra a hash_1_type_1
-
findByTypeAndHashAndMessageIdIndex se renombra a hash_1_type_1_message Id_1.
Si su mongodb ya tiene esos índices con nombres antiguos, usted obtendrá este error en el registro:
TransactionCacheIndexInitialiser.accept - Failed to ensure index on TransactionCacheEntry
org.springframework.data.mongodb. UncategorizedMongoDbException: Command failed with error 85 (IndexOptionsConflict): 'Index already exists with a different name: findByTypeAndHashIndex' on server
Si desea corregir este error, renombre los índices existentes con nuevos nombres.