| Summary: | 61 test failures in JPA 1.0 TCK with 2.3.1.v20110917-r10108 | ||
|---|---|---|---|
| Product: | z_Archived | Reporter: | Edwin Tang <edwin.tang> |
| Component: | Eclipselink | Assignee: | Nobody - feel free to take it <nobody> |
| Status: | RESOLVED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P2 | CC: | david.minsky, tom.ware |
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Windows XP | ||
| Whiteboard: | |||
|
Description
Edwin Tang
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 The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink |