Here's the full stacktrace :
[junit-coverage] Testcase: testChannelItem took 0.063 sec
[junit-coverage] Caused an ERROR
[junit-coverage] null
[junit-coverage] <openjpa-1.0.0-r420667:568756 fatal user error>
org.apache.openjpa.util.CallbackException: null
[junit-coverage] at
org
.apache
.openjpa.kernel.BrokerImpl.handleCallbackExceptions(BrokerImpl.java:651)
[junit-coverage] at
org
.apache.openjpa.kernel.BrokerImpl.fireLifecycleEvent(BrokerImpl.java:
637)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.fireLifecycleEvent(StateManagerImpl.java:333)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.initialize(StateManagerImpl.java:305)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2391)
[junit-coverage] at
org
.apache
.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:
760)
[junit-coverage] at
org
.apache
.openjpa.kernel.SingleFieldManager.preFlushPCs(SingleFieldManager.java:
735)
[junit-coverage] at
org
.apache
.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:637)
[junit-coverage] at
org
.apache
.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:562)
[junit-coverage] at
org
.apache
.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:478)
[junit-coverage] at
org
.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:
2775)
[junit-coverage] at
org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:940)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1884)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1844)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1615)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:
505)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:590)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1451)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:
1434)
[junit-coverage] at
com.joost.model.InventoryItem.getId(InventoryItem.java)
[junit-coverage] at
com.joost.model.InventoryItem.initPublicIdIfNull(InventoryItem.java:331)
[junit-coverage] at
org
.apache
.openjpa
.event
.MethodLifecycleCallbacks.makeCallback(MethodLifecycleCallbacks.java:93)
[junit-coverage] at
org
.apache
.openjpa
.event.LifecycleEventManager.makeCallbacks(LifecycleEventManager.java:
322)
[junit-coverage] at
org
.apache
.openjpa
.event.LifecycleEventManager.fireEvent(LifecycleEventManager.java:284)
[junit-coverage] at
org
.apache.openjpa.kernel.BrokerImpl.fireLifecycleEvent(BrokerImpl.java:
637)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.fireLifecycleEvent(StateManagerImpl.java:333)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.initialize(StateManagerImpl.java:305)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2391)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2216)
[junit-coverage] at
org
.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingBroker.java:
1005)
[junit-coverage] at
org
.apache
.openjpa.persistence.EntityManagerImpl.persist(EntityManagerImpl.java:
541)
[junit-coverage] at
org.springframework.orm.jpa.SharedEntityManagerCreator
$
SharedEntityManagerInvocationHandler
.invoke(SharedEntityManagerCreator.java:180)
[junit-coverage] at $Proxy9.persist(Unknown Source)
[junit-coverage] at
com
.joost
.service.impl.AbstractAssetManager.persist(AbstractAssetManager.java:22)
[junit-coverage] at
com.joost.model.ChannelItemT.testChannelItem(ChannelItemT.java:43)
[junit-coverage] at
org
.springframework
.test.ConditionalTestCase.runBare(ConditionalTestCase.java:69)
[junit-coverage] at
junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
[junit-coverage] at junit.extensions.TestSetup
$1.protect(TestSetup.java:21)
[junit-coverage] at junit.extensions.TestSetup.run(TestSetup.java:25)
[junit-coverage] Caused by: java.lang.reflect.InvocationTargetException
[junit-coverage] at
org
.apache
.openjpa
.event
.MethodLifecycleCallbacks.makeCallback(MethodLifecycleCallbacks.java:93)
[junit-coverage] at
org
.apache
.openjpa
.event.LifecycleEventManager.makeCallbacks(LifecycleEventManager.java:
322)
[junit-coverage] at
org
.apache
.openjpa
.event.LifecycleEventManager.fireEvent(LifecycleEventManager.java:284)
[junit-coverage] Caused by: <openjpa-1.0.0-r420667:568756 fatal user
error> org.apache.openjpa.util.InvalidStateException: Detected
reentrant flush. Make sure your flush-time instance callback methods
or event listeners do not invoke any operations that require the in-
progress flush to complete.
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1840)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1615)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:
505)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:590)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1451)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:
1434)
[junit-coverage] at
com.joost.model.InventoryItem.getId(InventoryItem.java)
[junit-coverage] at
com.joost.model.InventoryItem.initPublicIdIfNull(InventoryItem.java:331)
[junit-coverage]
On Nov 15, 2007, at 2:10 PM, Geir Magnusson Jr. wrote:
Woe is me :)
I'm using @PostPersist to create some kind of machine-generated data
for entities on insert, and I'm running into the following problem
when an entity for which I called persist() has in it a new,
unmanaged entity.
[junit-coverage] Caused by: <openjpa-1.0.0-r420667:568756 fatal user
error> org.apache.openjpa.util.InvalidStateException: Detected
reentrant flush. Make sure your flush-time instance callback
methods or event listeners do not invoke any operations that require
the in-progress flush to complete.
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1840)
[junit-coverage] at
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1615)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:505)
[junit-coverage] at
org
.apache
.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:
590)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1451)
[junit-coverage] at
org
.apache
.openjpa
.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1434)
[junit-coverage] at
com.joost.model.InventoryItem.getId(InventoryItem.java)
[junit-coverage] at
com.joost.model.InventoryItem.initPublicIdIfNull(InventoryItem.java:
331)
in InventoryItem, getId is the PK, and my read of the spec says that
I am guaranteed to have it in @PostPersist.
Bug? me doing something wrong?
geir