Ну ... с чего мне начать?
Если вы просто хотите сгенерировать последовательные числа, что делать с базой данных? Например, используя последовательность или оператор обновления в форме
update Card
set cardnumber = cardnumber + 1 where id = ?
Или, если только один процесс генерирует числа, как насчет синхронизации генератора в Java? В конце концов, увеличение счетчика вряд ли займет достаточно много времени, чтобы считаться узким местом параллелизма.
Далее, ваш генератор не является потокобезопасным, поскольку вы сохраняете изменчивое состояние в переменной экземпляра (количество повторных попыток) без какой-либо синхронизации.
Я не знаю Seam, но если hibernate выдает исключение, сеанс hibernate больше не должен использоваться, и типичным ответом является откат текущей транзакции. Ваш рекурсивный вызов не запускает новую транзакцию, и, очевидно, менеджер сущностей нуждается в ней. Посмотрите, как ваша структура выполняет разграничение транзакций.