2 Replies Latest reply on Aug 29, 2006 2:57 AM by Micha? ?elechowski

    PostPersist callbacks

    milan wölke Newbie

      Hello,

      I've a problem with PostPersist callbacks. I discovered that these callbacks are invoked within the persist method of the entitymanager (see stacktrace). As I read the specification they should be called after a call to persist.

      The problem is, that after a call to EntityManager.persist an Id(generate=GeneratorType.AUTO) is set to a valid value. Before that, for example within a PostPersist callback the id is unset and invalid.

      In my opinion this should be considered a bug, but if it is not, then what is the difference between PrePersist and PostPersist callbacks?

      I'm not sure whether this is the right location to post this. If it is not, please tell me where to send it otherwise.

      Milan Wölke

      ObservableEntityMonitor.notifyObservers4Insert(ObservableEntity) line: 125--> the PostPersist callback method.
      NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
      NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
      DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
      Method.invoke(Object, Object...) line: 585
      ListenerCallback.invoke(Object) line: 25
      EntityCallbackHandler.callback(Callback, Object) line: 75
      EntityCallbackHandler.postCreate(Object) line: 49
      EJB3PostInsertEventListener.onPostInsert(PostInsertEvent) line: 25
      EntityIdentityInsertAction.postInsert() line: 67
      EntityIdentityInsertAction.execute() line: 52
      ActionQueue.execute(Executable) line: 243
      EJB3PersistEventListener(AbstractSaveEventListener).performSaveOrReplicate(Object, EntityKey, EntityPersister, boolean, Object, EventSource) line: 269
      EJB3PersistEventListener(AbstractSaveEventListener).performSave(Object, Serializable, EntityPersister, boolean, Object, EventSource) line: 167
      EJB3PersistEventListener(AbstractSaveEventListener).saveWithGeneratedId(Object, String, Object, EventSource) line: 101
      EJB3PersistEventListener(DefaultPersistEventListener).entityIsTransient(PersistEvent, Map) line: 131
      EJB3PersistEventListener(DefaultPersistEventListener).onPersist(PersistEvent, Map) line: 87
      EJB3PersistEventListener(DefaultPersistEventListener).onPersist(PersistEvent) line: 38
      SessionImpl.firePersist(PersistEvent) line: 589
      SessionImpl.persist(String, Object) line: 567
      EntityManagerImpl(AbstractEntityManagerImpl).persist(Object) line: 130
      InjectedEntityManager.persist(Object) line: 97--> the call to persist.
      PartnerManagerBean.insertOrUpdateRecordOrganisation(Record) line: 206
      NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
      NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
      DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
      Method.invoke(Object, Object...) line: 585
      PartnerManagerBean(ServerBean).executeService(ServiceKey, Object[], String[], Integer) line: 215 (out of synch)
      NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
      NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
      DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
      Method.invoke(Object, Object...) line: 585
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 109
      AllowedOperationsInterceptor.invoke(Invocation) line: 32
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      Ejb3TxPolicy(TxPolicy).invokeInCallerTx(Invocation, Transaction) line: 113
      TxInterceptor$Required.invoke(Invocation) line: 138
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      TxPropagationInterceptor.invoke(Invocation) line: 61
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      StatelessInstanceInterceptor.invoke(Invocation) line: 39
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      Ejb3AuthenticationInterceptor(AuthenticationInterceptor).invoke(Invocation) line: 63
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      ENCPropagationInterceptor.invoke(Invocation) line: 32
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      AsynchronousInterceptor.invoke(Invocation) line: 91
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      StatelessContainer.localInvoke(Method, Object[], FutureHolder) line: 148
      StatelessLocalProxy.invoke(Object, Method, Object[]) line: 60
      $Proxy207.executeService(ServiceKey, Object[], String[], Integer) line: not available
      ServiceControlBean.executeService(ServiceKey, Object[], String[], Integer) line: 77
      NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
      NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
      DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
      Method.invoke(Object, Object...) line: 585
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 109
      AllowedOperationsInterceptor.invoke(Invocation) line: 32
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      Ejb3TxPolicy(TxPolicy).invokeInOurTx(Invocation, TransactionManager) line: 66
      TxInterceptor$Required.invoke(Invocation) line: 134
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      TxPropagationInterceptor.invoke(Invocation) line: 61
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      StatelessInstanceInterceptor.invoke(Invocation) line: 39
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      Ejb3AuthenticationInterceptor(AuthenticationInterceptor).invoke(Invocation) line: 63
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      ENCPropagationInterceptor.invoke(Invocation) line: 32
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      AsynchronousInterceptor.invoke(Invocation) line: 91
      EJBContainerInvocation(MethodInvocation).invokeNext() line: 98
      StatelessContainer.dynamicInvoke(Object, Invocation) line: 189
      Dispatcher.invoke(Invocation) line: 107
      AOPRemotingInvocationHandler.invoke(InvocationRequest) line: 69
      SocketServerInvoker(ServerInvoker).invoke(InvocationRequest) line: 566
      SocketServerInvoker(ServerInvoker).invoke(Object) line: 436
      ServerThread.processInvocation() line: 247
      ServerThread.dorun() line: 285
      ServerThread.run() line: 169