Advertise with us

Our eBooks

How do you keep your EJB callbacks separated from biz. methods?

JBoss daily recipe

If you have need to use callback methods in your EJB Entity Beans then it's likely that your code is a mess! With EJB 3.0 you can add the  @EntityListeners annotation to indicate that the callback methods are located in another class.

Example: recall the Note class in the EJB 3.0 tutorial:



import javax.persistence.Entity;   
import javax.persistence.GeneratedValue;   
import javax.persistence.Id;   
import javax.persistence.Table;   
@Table(name = "NOTE")   
public class Note implements Serializable {   
long noteId;   
String text;   
String actor;   
String attachment;   
public long getNoteId() {   
 return noteId;   
public void setNoteId(long noteId) {   
 this.noteId = noteId;   
public String getActor() {   
 return actor;   
public void setActor(String actor) { = actor;   
public String getAttachment() {   
 return attachment;   
public void setAttachment(String attachment) {   
 this.attachment = attachment;   
public String getText() {   
 return text;   
public void setText(String text) {   
 this.text = text;   

and this is the Class holding the listener:

import javax.persistence.PreRemove;
import javax.persistence.PostRemove;
import javax.persistence.PreUpdate;
import javax.persistence.PostUpdate;
import javax.persistence.PostLoad;
import javax.persistence.PrePersist;
import javax.persistence.PostPersist;

public class NoteCallbackListener
   public void doPrePersist(Note note)
      System.out.println("doPrePersist: About to create Note: " + Note.getId());

   public void doPostPersist(Object Note)
      System.out.println("doPostPersist: Created Note: " + ((Note)Note).getId()));

   public void doPreRemove(Note note)
      System.out.println("doPreRemove: About to delete Note: " + Note.getId());

   public void doPostRemove(Note note)
      System.out.println("doPostRemove: Deleted Note: " + Note.getId());

   public void doPreUpdate(Note note)
      System.out.println("doPreUpdate: About to update Note: " + Note.getId());

   public void doPostUpdate(Note note)
      System.out.println("doPostUpdate: Updated Note: " + Note.getId());

   public void doPostLoad(Note note)
      System.out.println("doPostLoad: Loaded Note: " + Note.getId());
© 2021 All Rights Reserved.

Please publish modules in offcanvas position.