Some things to be aware of
1. SAF module uses a local space so if you have multiple servers you run into an out of order processing.
2. You need to add an additional encryption layer on top of the space that encrypts and decrypts the data as its puts the isomsg in the space and retrieves it. jPOS does allow to you to do this by writing spacelets. Needed for compliance.
You can take this further by storing your saf entries in the DB you use instead of a space.
Process the entries in order of insertion making sure you pick the ISOMsg based on pans (either its available or linked to an original that has a pan). If a pan is being processed/inflight do not process any other message with the same pan to maintain order, basically retrieve a list of unique pans based on insertion and process them and mark them with a state. Retrieve more rows and process based on pans and state.
You can have this custom participant configured with exponential backoff using a formula or simply hard coded delay values based on retry counts (based on your requirement).