Na verdade, pode resolver o seu problema.
O contêiner EJB "escuta" qualquer exceção que o seu método de negócio reutilizável possa lançar, e quando captura uma, investiga toda a sua cadeia de causas. Se encontrar uma exceção que está na lista de retryOn, então o método será tentado novamente.
O que é um pouco estranho aqui é o seu caso de uso específico. Em uma situação normal, você não pode lidar com DuplicateKeyException com um método de tentativa novamente, porque esta exceção indica que está tentando violar o estado do banco de dados. Em um método de tentativa novamente, você só pode ter sucesso se realizar alguma lógica de exclusão (para limpar a tabela), talvez...