Archive for March 3rd, 2008

JBO-29000: Exception [TOPLINK-4002] – Luchando contra JDeveloper y ADF

Monday, March 3rd, 2008

Definitivamente en Oracle necesitan contratar a algún que otro incompetente. El motivo esta bien claro, al ser todos tan eficaces y preparados, cuando se encuentran con un mensaje de error semejante siempre sabrían como resolverlo inmediatamente.Este error ocurria siempre que intentabamos insertar un usuario en la tabla USERS a traves de un formulario. Depurando paso por paso hemos descubierto que todo funcionaba correctamente hasta llegar a la llamada a uow.commit(); donde se lanza la excepción.

Hemos seguido todos los pasos (incluso varias veces) del tutorial para ADF que Oracle proporciona intentando adaptar todos los pasos a nuestra aplicación.

Dejando nuestro código en la clase que hace de PublicFacadeBean de la siguiente manera:

public Users createUser(Long userID, String name,String password, String email, String perm){
UnitOfWork uow = getSessionFactory().acquireUnitOfWork();

Users newInstance = (Users)uow.newInstance(Users.class);

newInstance.setId(userID);
newInstance.setName(name);
newInstance.setEmail(email);
newInstance.setPassword(password);
newInstance.setPerm(perm);
newInstance.setAtempts(0);

uow.commit();

return newInstance;
}

Tras probar un montón de alternativas y buscar información por todos lados (solo hemos descubierto que esta excepción se lanza siempre sea cual sea el problema, así que no nos vale investigar), al final nos iluminamos con la idea feliz de usar la técnica del avestruz, consistente en meter el “commit” en un bloque “try” (meter la cabeza debajo de la tierra y hacer como si no pasara nada).

try{
uow.commit();
}
catch (Exception e){

}

No dabamos crédito cuando descubrimos que con esto todo funciona bien, pero digo yo que podrían dar un poco más de detalle en los mensajes de error.