eclipse-ee4j / glassfish

Eclipse GlassFish
https://eclipse-ee4j.github.io/glassfish/
386 stars 144 forks source link

[Blocking] Exceptions in eclipselink module while running specjenterprise 2010 benchmarks #12965

Closed glassfishrobot closed 14 years ago

glassfishrobot commented 14 years ago

Eclipselink module throws following exceptions when we ran specj enterprise 2010 benchmarks on build 13 & 14. The same benchmark use to work with v3 and v3 update 1.

Exception [EclipseLink-7197] (Eclipse Persistence Services - 2.1.0.v20100614-r7608): org.eclipse.persistence.exceptions.ValidationException Exception Description: Null primary key encountered in unit of work clone [org.spec.jent.ejb.supplier.entity.PurchaseOrder@17a1]. at org.eclipse.persistence.exceptions.ValidationException.nullPrimaryKeyInUnitOfWorkClone(ValidationException.java:1424) at org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChanges(DeferredChangeDetectionPolicy.java:106) at org.eclipse.persistence.descriptors.changetracking.AttributeChangeTrackingPolicy.calculateChangesForExistingObject(AttributeChangeTrackingPolicy.java:48) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:634) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1512) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3182) at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:268) at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157) at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68) at com.sun.jts.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:99) at com.sun.jts.CosTransactions.RegisteredSyncs.distributeBefore(RegisteredSyncs.java:158) at com.sun.jts.CosTransactions.TopCoordinator.beforeCompletion(TopCoordinator.java:2553) at com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:279) at com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:251) at com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623) at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:318) at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:161) at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:848) at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5079) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4844) at com.sun.ejb.containers.MessageBeanContainer.afterMessageDeliveryInternal(MessageBeanContainer.java:1202) at com.sun.ejb.containers.MessageBeanContainer.afterMessageDelivery(MessageBeanContainer.java:1175) at com.sun.ejb.containers.MessageBeanListenerImpl.afterMessageDelivery(MessageBeanListenerImpl.java:82) at com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:139) at $Proxy256.afterDelivery(Unknown Source) at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:324) at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:92) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:492) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:528)

Here is e-mail exchanges between Scott Oaks & Mitesh for the same issue.

Hi Mitesh – The code is SPECjEnterprise, which of course is running fine on multiple appservers, including earlier releases of glassfish. So I don't expect that the code is getting a null PK. Not that I'm 100% sure of that, of course, which is why I wanted to try the version before eclipselink was updated.

We have not explicitly set a change policy that I am aware of. In fact, I don't really know much about how that works. But if I read this correctly: http://wiki.eclipse.org/Developing_Applications_Using_EclipseLinkJPA(ELUG)#How_to_Configure_Change_Tracking

Then deferred will be in effect for any JPA object that uses a one-to-many or a many-to-many relationship; is that correct? Because the entity in question (PurchaseOrder) has a one-to-many relationship (to PurchaseOrderLines) (and, for that matter, a ManyToOne relationship).

I've attached the PO class (if you're curious, the entire source is under /net/sfperf-x4100-15.sfbay/export/sdo/SPECjEnterprise2010_MWM). Because the PK for the calss is a generated composite, I don't think it could ever be null? And the site field can never be null since it constructed from an integer.

The code that creates the entity is simple: @PersistenceContext(unitName="Supplier") private EntityManager em; PurchaseOrder po = new PurchaseOrder(...); em.persist(po);

And the relevant part of the PU is simply:

org.eclipse.persistence.jpa.PersistenceProvider jdbc/SPECjSupplierDS org.spec.jent.ejb.supplier.entity.PurchaseOrder org.spec.jent.ejb.supplier.entity.PurchaseOrderLinePK

-Scott


Plugging in those jars leads to some client-side remote EJB exceptions; I guess that there is some packaging issue in th ORB? It's another inscrutable OSGi issue...

But it does appear that the null PK clone issue is resolved, so hopefully when the real integration is done, everything will be completely fixed. When is the next eclipselink integration scheduled?

-Scott

On 08/05/10 11:15, Mitesh Meswani wrote:

Hi Scott,

Scott, can you please try it. Grab a nightly from http://www.eclipse.org/eclipselink/downloads/nightly.php. The trunk builds are labeled 2.2.0 nightly builds. Get "osgi Plugins Archive" and replace org.eclipse.* and javax.persistence.jar bundles in GlassFish with the one downloaded

Thanks, Mitesh


Environment

Operating System: All Platform: All

Affected Versions

[3.1]

glassfishrobot commented 6 years ago
glassfishrobot commented 14 years ago

@glassfishrobot Commented ai109478 said: This is blocking SPECjEnterprise run on GlassFish 3.1.

glassfishrobot commented 14 years ago

@glassfishrobot Commented @vkraemer said: it looks like this is filed against the wrong subcomponent.

If you think it is an eclipse IDE issue, please add some additional info about what change to the IDE plugin you expect would resolve this.

I am changing the subcomponent to something that is owned by the folks that work on and with EclipseLink... which is a JPA implementation.

glassfishrobot commented 14 years ago

@glassfishrobot Commented @vkraemer said: change the owner

glassfishrobot commented 14 years ago

@glassfishrobot Commented mm110999 said: Hi Amit,

Please let me know how the run goes with today;s nightly. It contains version of EclipseLink that does not show this issue.

Thanks, Mitesh

glassfishrobot commented 14 years ago

@glassfishrobot Commented mm110999 said: The EclipseLink issue is reported to be fixed by Amit. Closing this bug as suggested by management.

Amit, from your mail, Specj run is still blocked with exception at [1]. Please add following data and file a bug against either connector runtime or transaction to debug this further.

There should be message "The resource manager is doing work outside a global transaction" and the actual exception in a warning. Error picking up correct connection?

Can you please check your server.log before the exception below for it. That should point to the actual cause.

[1] Exception during latest run I ran specj 2010 benchmarks against 3rd Sept nightly build. We don't see null PK issue but now observe following exceptions and unable to run the benchmark. FYI, the same setup works with V3 update 1.

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.1.v20100817- r8050): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: javax.transaction.SystemException Error Code: 0 Call: UPDATE M_INVENTORY SET IN_QTY = ?, IN_VERSION = ? WHERE (((IN_LOCATION = ?) AND (IN_P_ID = ?)) AND (IN_VERSION = ?)) bind => [7120, 3, 0, 00001ANTIA0000032828, 2] Query: UpdateObjectQuery(org.spec.jent.ejb.mfg.entity.Inventory@54b8755) at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseExcept ion.java:309) at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:138) at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94) at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceL ogin.java:162) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectIntern al(DatasourceAccessor.java:327) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal (DatabaseAccessor.java:291) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(Dat asourceAccessor.java:558) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(Datab aseAccessor.java:1433) at org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCall Count(DatasourceAccessor.java:302) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCal l(DatabaseAccessor.java:570) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(Dat abaseAccessor.java:526) at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSe ssion.java:980) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCal l(DatasourceCallQueryMechanism.java:206) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCal l(DatasourceCallQueryMechanism.java:192) at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.updateObje ct(DatasourceCallQueryMechanism.java:747) at org.eclipse.persistence.internal.queries.StatementQueryMechanism.updateObject(St atementQueryMechanism.java:430) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.updateObjectForW riteWithChangeSet(DatabaseQueryMechanism.java:1144) at org.eclipse.persistence.queries.UpdateObjectQuery.executeCommitWithChangeSet(Upd ateObjectQuery.java:84) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWith ChangeSet(DatabaseQueryMechanism.java:290) at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjec tQuery.java:58) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:736) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery. java:643) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObject LevelModifyQuery(ObjectLevelModifyQuery.java:108) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(Objec tLevelModifyQuery.java:85) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(Un itOfWorkImpl.java:2909) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractS ession.java:1291) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractS ession.java:1273) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractS ession.java:1233) at org.eclipse.persistence.internal.sessions.CommitManager.commitChangedObjectsForC lassWithChangeSet(CommitManager.java:265) at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsForClass WithChangeSet(CommitManager.java:190) at org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChan geSet(CommitManager.java:136) at org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithCha ngeSet(AbstractSession.java:3348) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOf WorkImpl.java:1422) at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToData base(RepeatableWriteUnitOfWork.java:546) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithCha ngeSet(UnitOfWorkImpl.java:1527) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletio n(UnitOfWorkImpl.java:3182) at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbefo reCompletion(RepeatableWriteUnitOfWork.java:268) at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeComple tion(AbstractSynchronizationListener.java:157) at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion( JTASynchronizationListener.java:68) at com.sun.jts.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:1 03) at com.sun.jts.CosTransactions.RegisteredSyncs.distributeBefore(RegisteredSyncs.jav a:162) at com.sun.jts.CosTransactions.TopCoordinator.beforeCompletion(TopCoordinator.java: 2557) at com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:283) at com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:255) at com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:627) at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:322) at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDis tributedTransaction(JavaEETransactionManagerJTSDelegate.java:188) at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEET ransactionManagerSimplified.java:852) at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5105) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4884) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2037) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1988) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvo cationHandler.java:203) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalOb jectInvocationHandlerDelegate.java:88) at $Proxy234.scheduleWorkOrder(Unknown Source) at org.spec.jent.ejb.mfg.mdb.LargerOrderMDB.onMessage(LargerOrderMDB.java:55) at sun.reflect.GeneratedMethodAccessor166.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityM anager.java:1052) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityMana ger.java:1124) at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:4 145) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5337) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5317) at com.sun.ejb.containers.MessageBeanContainer.deliverMessage(MessageBeanContainer. java:1092) at com.sun.ejb.containers.MessageBeanListenerImpl.deliverMessage(MessageBeanListene rImpl.java:81) at com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(Me ssageEndpointInvocationHandler.java:171) at $Proxy254.onMessage(Unknown Source) at com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:258) at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:104) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork (ThreadPoolImpl.java:496) at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadP oolImpl.java:532) Caused by: java.sql.SQLException: Error in allocating a connection. Cause: javax.transaction.SystemException at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:117) at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126) ... 70 more Caused by: javax.resource.spi.ResourceAllocationException: Error in allocating a connection. Cause: javax.transaction.SystemException at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(Connec tionManagerImpl.java:293) at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(Connectio nManagerImpl.java:179) at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(Connectio nManagerImpl.java:156) at com.sun.enterprise.connectors.ConnectionManagerImpl.allocateConnection(Connectio nManagerImpl.java:151) at com.sun.gjc.spi.base.DataSource.getConnection(DataSource.java:110) ... 71 more Caused by: com.sun.appserv.connectors.internal.api.PoolingException: javax.transaction.SystemException at com.sun.enterprise.resource.pool.PoolManagerImpl.getResource(PoolManagerImpl.jav a:216) at com.sun.enterprise.connectors.ConnectionManagerImpl.getResource(ConnectionManage rImpl.java:324) at com.sun.enterprise.connectors.ConnectionManagerImpl.internalGetConnection(Connec tionManagerImpl.java:287)

glassfishrobot commented 14 years ago

@glassfishrobot Commented Was assigned to mm110999

glassfishrobot commented 7 years ago

@glassfishrobot Commented This issue was imported from java.net JIRA GLASSFISH-12965

glassfishrobot commented 14 years ago

@glassfishrobot Commented Reported by amitagarwal

glassfishrobot commented 14 years ago

@glassfishrobot Commented Marked as fixed on Wednesday, September 8th 2010, 10:15:03 am