I've isolated a the combination that
hit the error:
<shared-cache-mode>ALL</shared-cache-mode>
+
<property name="eclipselink.id-validation"
value="NULL"/>
<property name="eclipselink.cache.shared.default" value="true"/>
And application freeze in like explained.
Now, if I execute with:
<shared-cache-mode>ALL</shared-cache-mode>
+
<property name="eclipselink.id-validation"
value="NULL"/>
<property name="eclipselink.cache.shared.default" value="false"/>
Now, if I execute with:
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
+
<property name="eclipselink.id-validation"
value="NULL"/>
<property name="eclipselink.cache.shared.default" value="false"/>
This cause error in sequencing (only in many side of one-to-many
relationship).
All my objects have a Integer id (I don't use composite foreign
keys anywhere - all of them are related to a artificial primary
key).
Regards,
Edson
Em 31/05/2013 15:04, Edson Richter escreveu:
Unfortunately, not.
I can provide persistence.xml, but a simple example is not
something I can provide.
This is a very complex application with hundred tables in 23Gb
PgSQL database, lots of many-to-one and few one-to-many (always
eager because of GWT serialization process), and several
activities running in parallel threads and users using a Tomcat
control panel written in GWT (Google Web Toolkit). Also, all user
activity is logged in a huge "log" table with millions of records
(insert only).
Perhaps, I can provide full thread and memory dumps, and can make
as many tests as required.
Regards,
Edson
Em 31/05/2013 14:24, Andrei Ilitchev escreveu:
Could you please post a very simple
example (persistence.xml + entities + test) that reproduces the
problem.
Thanks,
Andrei
On 5/31/2013 12:28 PM, Edson Richter wrote:
Em 31/05/2013 12:30, Andrei Ilitchev
escreveu:
Sequencing has nothing to do with
shared cache mode, should work with
any mode.
By default id validation is set to ZERO for simple primary
key and
NULL for compound primary key.
Yes.
If you set id validation to NULL for a simple primary key,
then all
the values except NULL will be accepted as a legitimate pk
value and
won't be overridden by sequencing.
For example:
public class Employee {
@Id
@GeneratedValue(strategy=TABLE,
generator="EMPLOYEE_TABLE_GENERATOR")
@TableGenerator(
name="EMPLOYEE_TABLE_GENERATOR",
pkColumnValue="EMPLOYEE_SEQ",
)
int id
...
}
When an Employee object is persisted and it's id=0, if id
validation
is ZERO, then sequencing fetches a value from sequence table
that's
assigned to the Employee.
However with id validation set to null:
@PrimaryKey(validation=IdValidation.NULL)
public class Employee {
...
}
the Employee object is inserted in the db with id=0.
If this doesn't help please explain what are you trying to
do,
may be provide a simple example.
That's what I expected. I've put in persistence.xml the value
"eclipselink.id-validation = 'NULL'", and I expect that
Eclipselink
honor that. But when I have shared cache "ENABLE_SELECTIVE",
then it
doesn't honor sequencing for many side of one-to-many
relationship.
If I put shared cache as "ALL", then it honor sequencing for
many side,
but then I get deadlock if multiple users are working with
objects of
same kind.
I've captured the two threads that are frozen when using
shared cache
ALL, and the threads are frozen here (two thread dumps):
Stack Trace
java.lang.Thread.sleep line: not available [native method]
org.eclipse.persistence.internal.helper.ConcurrencyManager.releaseDeferredLock
line: 466
org.eclipse.persistence.internal.identitymaps.CacheKey.releaseDeferredLock
line: 385
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 861
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally
line: 719
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork
line: 672
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 605
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 564
org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject
line: 777
org.eclipse.persistence.queries.ReadObjectQuery.registerResultInUnitOfWork
line: 787
org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery
line: 460
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery
line:
1150
org.eclipse.persistence.queries.DatabaseQuery.execute
line: 852
org.eclipse.persistence.queries.ObjectLevelReadQuery.execute
line: 1109
org.eclipse.persistence.queries.ReadObjectQuery.execute
line: 421
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork
line: 1197
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery
line: 2875
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1602
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1584
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1535
org.eclipse.persistence.internal.jpa.EntityManagerImpl.executeQuery
line: 838
org.eclipse.persistence.internal.jpa.EntityManagerImpl.findInternal
line: 778
org.eclipse.persistence.internal.jpa.EntityManagerImpl.find
line: 671
org.eclipse.persistence.internal.jpa.EntityManagerImpl.find
line: 543
br.com.simfreteV1.broker.TabelaBroker.getTabelasDestino
line: 1782
...
and the other thread that is blocked:
Stack Trace
http-nio-8088-exec-34 [190] (WAITING)
java.lang.Object.wait line: not available [native method]
java.lang.Object.wait line: 485
org.eclipse.persistence.internal.helper.ConcurrencyManager.acquire
line: 94
org.eclipse.persistence.internal.identitymaps.CacheKey.acquire
line:
132
org.eclipse.persistence.internal.identitymaps.AbstractIdentityMap.acquireLock
line: 122
org.eclipse.persistence.internal.identitymaps.IdentityMapManager.acquireLock
line: 150
org.eclipse.persistence.internal.sessions.IdentityMapAccessor.acquireLock
line:
93
org.eclipse.persistence.internal.sessions.IdentityMapAccessor.acquireLock
line:
84
org.eclipse.persistence.internal.sessions.AbstractSession.retrieveCacheKey
line: 4803
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 777
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 607
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 564
org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject
line: 777
org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery
line: 462
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery
line:
1150
org.eclipse.persistence.queries.DatabaseQuery.execute
line: 852
org.eclipse.persistence.queries.ObjectLevelReadQuery.execute
line: 1109
org.eclipse.persistence.queries.ReadObjectQuery.execute
line: 421
org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery
line: 2946
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1602
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1584
org.eclipse.persistence.internal.indirection.NoIndirectionPolicy.valueFromQuery
line: 323
org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRowInternal
line: 2135
org.eclipse.persistence.mappings.OneToOneMapping.valueFromRowInternal
line: 1716
org.eclipse.persistence.mappings.ForeignReferenceMapping.valueFromRow
line: 2024
org.eclipse.persistence.mappings.ForeignReferenceMapping.readFromRowIntoObject
line: 1369
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject
line: 448
org.eclipse.persistence.internal.descriptors.ObjectBuilder.refreshObjectIfRequired
line: 3673
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 831
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally
line: 719
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork
line: 672
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 605
org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject
line: 564
org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject
line: 777
org.eclipse.persistence.queries.ReadObjectQuery.registerResultInUnitOfWork
line: 787
org.eclipse.persistence.queries.ReadObjectQuery.executeObjectLevelReadQuery
line: 460
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery
line:
1150
org.eclipse.persistence.queries.DatabaseQuery.execute
line: 852
org.eclipse.persistence.queries.ObjectLevelReadQuery.execute
line: 1109
org.eclipse.persistence.queries.ReadObjectQuery.execute
line: 421
org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork
line: 1197
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery
line: 2875
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1602
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1584
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery
line: 1549
org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery
line: 231
org.eclipse.persistence.internal.jpa.QueryImpl.getResultList
line: 403
br.com.simfreteV1.broker.DocumentoTransporteBroker.getDocumentoTransporte
line:
457
...
Edson
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
|