Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 358426 - 61 test failures in JPA 1.0 TCK with 2.3.1.v20110917-r10108
Summary: 61 test failures in JPA 1.0 TCK with 2.3.1.v20110917-r10108
Status: RESOLVED FIXED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: Eclipselink (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P2 normal (vote)
Target Milestone: ---   Edit
Assignee: Nobody - feel free to take it CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-09-21 10:21 EDT by Edwin Tang CLA
Modified: 2022-06-09 10:21 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Edwin Tang CLA 2011-09-21 10:21:53 EDT
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
Comment 1 Edwin Tang CLA 2011-09-21 10:25:46 EDT
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.
Comment 2 Edwin Tang CLA 2011-09-21 10:27:25 EDT
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
Comment 3 David Minsky CLA 2011-09-22 17:56:59 EDT
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
Comment 4 David Minsky CLA 2011-09-22 18:02:41 EDT
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.
Comment 5 David Minsky CLA 2011-09-22 18:18:19 EDT
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
Comment 6 David Minsky CLA 2011-09-26 13:26:13 EDT
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.
Comment 7 David Minsky CLA 2011-09-26 17:56:14 EDT
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
Comment 8 David Minsky CLA 2011-09-27 10:30:58 EDT
These failures are confirmed as resolved with yesterday's checkin fix.
Comment 9 Eclipse Webmaster CLA 2022-06-09 10:17:15 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink
Comment 10 Eclipse Webmaster CLA 2022-06-09 10:21:29 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink