jcainelli eu não sou especialista nesse assunto, mas trabalho com ele rsrs
Vou passar a forma que trabalho, se eu disser alguma besteira, fiquem os especialista a vontade para corrigir:
No seu código java vc deixou a responsabilidade de gerenciar as transações para o container,
caso precise vc mesmo gerenciar isso, teria que adicionar as a notações ± assim:
@Stateless(name = "UnidadeMedidaDAOImpl")
@TransactionManagement(TransactionManagementType.BEAN)
public class UnidadeMedidaDAOImpl implements IUnidadeMedidaDAO{
private String nomeDescritivoClasse = "Unidade de Medida";
@PersistenceContext(unitName = "residuos")
private EntityManager manager;
@Resource
UserTransaction userTransaction;
public List<Erro> incluirUnidade(UnidadeMedida unidade) throws SlmrException{
List<Erro> retorno = validatorUnidade(unidade, "");
if (retorno.size() > 0)
return retorno;
try {
userTransaction.begin(); // AQUI DA O ERRO - AO PEGAR A TRANSACAO
manager.persist(unidade);
userTransaction.commit();
} catch (Exception e) {
e.printStackTrace();
throw new SlmrException("Problemas ao incluir " + nomeDescritivoClasse +". Tente novamente!");
}
return retorno;
}
}
Mas se quiser deixar por conta do servidor basta tirar do seu código original as linhas que fazem o begin e commit, em teoria o container fará pra vc,
aqui no meu projeto eu tive um caso que precisei gerenciar pelo bean, pois precisava que fosse feito um commit a cada registro
de um while, mas pelo container ele só da commit ao final de todo o processo.