0

I have the following code:

final List<NotificationTrace> searchResult = entityManager
                .createNamedQuery(NotificationTrace.FIND_BY_NOTIFICATION_ID, NotificationTrace.class)
                .setParameter(NotificationTrace.NOTIFICATION_ID_PARAMETER_NAME, notificationId).getResultList();

named query definition:

@NamedQuery(name = NotificationTrace.FIND_BY_NOTIFICATION_ID, query = "select a from NotificationTrace a where a.notificationId = :"+NOTIFICATION_ID_PARAMETER_NAME)

the query is called from a Stateless EJB, which on his turn is also called by a stateless SOAP web service endpoint. The deployemnt environment is also clustered, containing more instances.

This results in the following error:

Internal Exception: java.sql.SQLException: Exhausted Resultset
Error Code: 17011
Call: SELECT ID, CREATED_AT, CREATED_BY, INTERACTION_ID, MODIFIED_AT, MODIFIED_BY, NOTIFICATION_ID, PROCESSING_MESSAGE, UPD_VERSION FROM S_SFD_NOTIFICATION_TRACE WHERE (NOTIFICATION_ID = ?)
    bind => [xxx]
Query: ReadAllQuery(name="NotificationTrace.findByNotificationId" referenceClass=NotificationTrace sql="SELECT ID, CREATED_AT, CREATED_BY, INTERACTION_ID, MODIFIED_AT, MODIFIED_BY, NOTIFICATION_ID, PROCESSING_MESSAGE, UPD_VERSION FROM S_SFD_NOTIFICATION_TRACE WHERE (NOTIFICATION_ID = ?)")
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDetailedException(EJBQueryImpl.java:594)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:487)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:761)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.4.v20160520-8886999): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Exhausted Resultset
Error Code: 17011
Call: SELECT ID, CREATED_AT, CREATED_BY, INTERACTION_ID, MODIFIED_AT, MODIFIED_BY, NOTIFICATION_ID, PROCESSING_MESSAGE, UPD_VERSION FROM S_SFD_NOTIFICATION_TRACE WHERE (NOTIFICATION_ID = ?)
    bind => [xxx]
Query: ReadAllQuery(name="NotificationTrace.findByNotificationId" referenceClass=NotificationTrace sql="SELECT ID, CREATED_AT, CREATED_BY, INTERACTION_ID, MODIFIED_AT, MODIFIED_BY, NOTIFICATION_ID, PROCESSING_MESSAGE, UPD_VERSION FROM S_SFD_NOTIFICATION_TRACE WHERE (NOTIFICATION_ID = ?)")
    at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1494)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1235)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.fetchRow(DatabaseAccessor.java:999)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processResultSet(DatabaseAccessor.java:723)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:621)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535)
    at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1717)
    at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:253)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:264)
    at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:648)
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2617)
    at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2570)
    at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1084)
    at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1043)
    at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392)
    at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1131)
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
    at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1463)
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485)
    ... 165 more
Caused by: java.sql.SQLException: Exhausted Resultset
    at oracle.jdbc.driver.OracleResultSetImpl.getTimestamp(OracleResultSetImpl.java:1381)
    at com.sun.gjc.spi.base.ResultSetWrapper.getTimestamp(ResultSetWrapper.java:327)
    at org.eclipse.persistence.platform.database.OraclePlatform.getObjectFromResultSet(OraclePlatform.java:461)
    at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.getObject(DatabaseAccessor.java:1206)
    ... 188 more

I have already seen other threads like plain exhausted result set exceptions, but here I do not have interactions with the ResultSet, everything is already abstracted by JPA.

Implementation comes from glassfish-embedded-all-3.1.2.2.jar (EclipseLink). The database is an Oracle 11 Database.

What is strange, that in not all cases the error occurs, have seen successful queries, and afterwards, without any change in code or application, the error occurs again.

What is the cause of the error?

Thanks.

David Laci
  • 146
  • 1
  • 12
  • Could you please edit your question in order to include the definition of the named query identified by NotificationTrace.FIND_BY_NOTIFICATION_ID? – Jorge_B Apr 10 '18 at 10:12
  • hi @Jorge_B, added definition of named query – David Laci Apr 10 '18 at 10:17
  • Does the problem happen in an isolated environment (e.g. your development computer)? Do we assume you only have observed it to happen some times in a real, concurrent environment? – Jorge_B Apr 10 '18 at 10:35
  • hi @Jorge_B, yes, your assumption is correct, added additional information to the question – David Laci Apr 10 '18 at 11:07
  • This starts looking like a race condition. Maybe we should guard the transaction and connection management inside your EJB, have you had a look at https://docs.oracle.com/javaee/5/tutorial/doc/bncij.html ? – Jorge_B Apr 10 '18 at 11:56

0 Answers0