dijous, 23 de maig del 2013

Error 17002 d'Oracle desde Tomcat

Avui hem trobat un nou problema: en una aplicació executant-se sobre Tomcat 7, usant les llibreries de persistència EclipseLink, un cop fet loguin es quedava tot penjat.

Mirant el catalina.out hi havia els missatges:


[EL Info]: 2013-05-22 23:24:06.515--ServerSession(9509498)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461 
[EL Info]: 2013-05-22 23:24:06.624--ServerSession(9509498)--file:/usr/local/apache-tomcat-7.0.40/webapps/BopGestioUsuaris/WEB-INF/classes/_BopGestioUsuarisPU login successful 
[EL Info]: 2013-05-22 23:39:34.411--UnitOfWork(27713589)--Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception 
[EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseExceptionInternal 
Exception: java.sql.SQLException: Excepción de E/S: Expiró el tiempo de conexión 
Error Code: 17002Call: SELECT COUNT(CODIENTITAT) FROM ENTITAT WHERE (? = ?)        bind => [2 parameters bound]Query: ReportQuery(referenceClass=Entitat sql="SELECT COUNT(CODIENTITAT) FROM ENTITAT WHERE (? = ?)").

Era un error curiós, ja que en reiniciar el Tomcat, funcionava durant una estona correctament.
Buscant informació, hem trobat que això és degut a un error de xarxa, ja que no és capaç de trobar el servidor de base de dades.

Solució: modificar el fitxer persistence.xml per a modificar la URL de connexió i especificar el nom complet del servidor.