Community
Participate
Working Groups
This is a regression. Tests: JPA 1.0 TCK Test environment: - Glassfish v2 UR2 - Apache Derby Network Server 10.8.1.2(Client driver) The same for 2.4.0.v20110920-r10119. So please refer to this link for detailed error message/stack trace: http://ottvm054.ca.oracle.com/eclipselink/main/2011-09-20/jpatck-index.html
61 test failures in JPA 1.0 TCK with 2.3.1.v20110917-r10108. These tests passed with previous revision - 10106. They are related to David's check-in on revision 10108.
Error message: ============== Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.0.v20110920-r10119): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: It is not allowed for both operands of '*' to be ? parameters. Error Code: -1 Call: SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM LINEITEM_TABLE t0, CUSTOMER_TABLE t2, ORDER_TABLE t1 WHERE (((t0.QUANTITY < ?) AND ((t1.TOTALPRICE < ((? + (? * ?)) + ?)) OR (t2.NAME = ?))) AND ((t0.FK1_FOR_ORDER_TABLE = t1.ID) AND (t2.ID = t1.FK4_FOR_CUSTOMER_TABLE))) bind => [6 parameters bound] Query: ReadAllQuery(referenceClass=Order sql="SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM LINEITEM_TABLE t0, CUSTOMER_TABLE t2, ORDER_TABLE t1 WHERE (((t0.QUANTITY < ?) AND ((t1.TOTALPRICE < ((? + (? * ?)) + ?)) OR (t2.NAME = ?))) AND ((t0.FK1_FOR_ORDER_TABLE = t1.ID) AND (t2.ID = t1.FK4_FOR_CUSTOMER_TABLE)))") at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:644) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:535) at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1716) at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566) 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:646) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2621) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2580) at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:420) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1081) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844) at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1128) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1515) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1497) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1462) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:742) at com.sun.ts.tests.ejb30.persistence.query.language.Client.queryTest10(Client.java:624) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at com.sun.ts.lib.harness.EETest.run(EETest.java:495) at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:112) at com.sun.ts.tests.common.vehicle.ejb3share.EJB3ShareBaseBean.runTest(EJB3ShareBaseBean.java:57) at com.sun.ts.tests.common.vehicle.appmanaged.AppManagedVehicleBean.runTest(AppManagedVehicleBean.java:44) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1067) at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176) at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2895) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3986) at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203) at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:77) at $Proxy216.runTest(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687) at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088) at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563) at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555) Caused by: java.sql.SQLException: It is not allowed for both operands of '*' to be ? parameters. at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:475) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1423) at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585) ... 56 more Caused by: org.apache.derby.client.am.SqlException: It is not allowed for both operands of '*' to be ? parameters. at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source) at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source) at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source) ... 62 more 09-20-2011 07:52:23: TRACE: SLEPT FOR: 2000 STATUS:Failed.Test case throws exception: queryTest10 failed result: Failed. Test case throws exception: queryTest10 failed
Change info: See https://fisheye2.atlassian.com/changelog/eclipselink?cs=10108 The VendorNameToPlatformMapping.properties file has the following change: (?i).*derby=org.eclipse.persistence.platform.database.JavaDBPlatform to: (?i).*derby.*=org.eclipse.persistence.platform.database.JavaDBPlatform
We found that if a session's database platform was set to org.eclipse.persistence.platform.database.DatabasePlatform and the following query executed: Query query = em.createQuery("SELECT OBJECT(b) FROM BasicObject b WHERE b.id > (1 * 7)"); List<BasicObject> results = query.getResultList(); The following error would be received: Caused by: java.sql.SQLSyntaxErrorException: It is not allowed for both operands of '*' to be ? parameters. at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatement(Unknown Source) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1474) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1423) at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:697) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585) ... 38 more Caused by: org.apache.derby.client.am.SqlException: It is not allowed for both operands of '*' to be ? parameters. at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source) at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source) at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source) at org.apache.derby.client.am.Statement.readPrepareDescribeOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.readPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.flowPrepareDescribeInputOutput(Unknown Source) at org.apache.derby.client.am.PreparedStatement.prepare(Unknown Source) at org.apache.derby.client.am.Connection.prepareStatementX(Unknown Source) ... 43 more Exception in thread "main" Local Exception Stack: Exception [EclipseLink-4002] (Eclipse Persistence Services - @VERSION@.@QUALIFIER@): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLSyntaxErrorException: It is not allowed for both operands of '*' to be ? parameters. Error Code: -1 Call: SELECT ID, NAME FROM BASICOBJECT WHERE (ID > (? * ?)) bind => [1, 7] Query: ReadAllQuery(referenceClass=BasicObject sql="SELECT ID, NAME FROM BASICOBJECT WHERE (ID > (? * ?))") at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) Whereas if the same code was executed with the JavaDBPlatform, the query would execute fine: [EL Finest]: 2011-09-22 18:00:43.532--UnitOfWork(10288833)--Execute query ReadAllQuery(referenceClass=BasicObject sql="SELECT ID, NAME FROM BASICOBJECT WHERE (ID > (? * ?))") [EL Finest]: 2011-09-22 18:00:43.532--ServerSession(4337374)--Connection(18871350)--Connection acquired from connection pool [default]. [EL Fine]: 2011-09-22 18:00:43.532--ServerSession(4337374)--Connection(18871350)--SELECT ID, NAME FROM BASICOBJECT WHERE (ID > (1 * 7)) [EL Finest]: 2011-09-22 18:00:43.563--ServerSession(4337374)--Connection(18871350)--Connection released to connection pool [default]. This suggests that the fix has potentially caused the TCK to use the generic DatabasePlatform class, instead of JavaDBPlatform.
Next steps: - Instrument an eclipselink jar - Run TCK tests with instrumented jar and EclipseLink logging set to FINEST - Examine EclipseLink logs from TCK tests - Determine what string is being returned from conn.getMetaData().getDatabaseProductName() within Glassfish with the Derby driver - Correct the VendorNameToPlatformMapping.properties file, as appropriate - Potentially retain instrumentation code within the product, for future use
Noticed the following error in the log: Caused by: java.lang.NoSuchMethodError: java.lang.String.isEmpty()Z at org.eclipse.persistence.internal.helper.DBPlatformHelper.validateLineForReturnAsKeyValueArray(DBPlatformHelper.java:194) at org.eclipse.persistence.internal.helper.DBPlatformHelper.load(DBPlatformHelper.java:162) at org.eclipse.persistence.internal.helper.DBPlatformHelper.loadFromResource(DBPlatformHelper.java:140) at org.eclipse.persistence.internal.helper.DBPlatformHelper.initializeNameToVendorPlatform(DBPlatformHelper.java:85) at org.eclipse.persistence.internal.helper.DBPlatformHelper.getDBPlatform(DBPlatformHelper.java:59) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:609) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:206) at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:488) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:188) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:277) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:294) at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:272) at com.sun.enterprise.util.EntityManagerFactoryWrapper.createEntityManager(EntityManagerFactoryWrapper.java:104) at com.sun.ts.tests.common.vehicle.appmanaged.AppManagedVehicleBean.runTest(AppManagedVehicleBean.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1067) at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:176) at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2895) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:3986) at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203) ... 17 more DBPlatformHelper.validateLineForReturnAsKeyValueArray() uses String.isEmpty(), which is present in JDK 1.6, but not present in JDK 1.5. The code needs to be changed to use String.size() == 0 instead.
This should be resolved by the minor updates done in bug 357569 https://bugs.eclipse.org/bugs/show_bug.cgi?id=357569 Checkins: trunk (2.4) - revision 10173 2.3.1 - revision 10174
These failures are confirmed as resolved with yesterday's checkin fix.
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink