Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.2 topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.3 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.2 Thu Jan 5 04:50:47 2006 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java Fri Jan 6 12:15:20 2006 @@ -23,20 +23,22 @@ * * @author poussin * - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Last update: $Date: 2006/01/05 04:50:47 $ by : $Author: bpoussin $ + * Last update: $Date: 2006/01/06 12:15:20 $ by : $Author: bpoussin $ */ package org.codelutin.topia.framework; import java.io.File; -import java.io.Serializable; import java.util.HashMap; -import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.WeakHashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,15 +48,18 @@ import org.codelutin.topia.TopiaVetoException; import org.codelutin.topia.event.TopiaEntityEvent; import org.codelutin.topia.event.TopiaEntityListener; +import org.codelutin.topia.event.TopiaTransactionEvent; +import org.codelutin.topia.event.TopiaTransactionListener; import org.codelutin.topia.event.TopiaVetoableEntityEvent; import org.codelutin.topia.event.TopiaVetoableEntityListener; import org.codelutin.topia.persistence.TopiaDAO; import org.codelutin.topia.persistence.TopiaDAODelegator; import org.codelutin.topia.persistence.TopiaEntity; import org.codelutin.topia.persistence.TopiaEntityAbstract; +import org.codelutin.util.ArrayUtil; import org.codelutin.util.CategorisedListenerSet; import org.codelutin.util.ListenerSet; -import org.hibernate.EmptyInterceptor; +import org.hibernate.EntityMode; import org.hibernate.FlushMode; import org.hibernate.HibernateException; import org.hibernate.Session; @@ -63,21 +68,16 @@ import org.hibernate.cfg.Configuration; import org.hibernate.event.PostDeleteEvent; import org.hibernate.event.PostDeleteEventListener; -import org.hibernate.event.PostInsertEvent; -import org.hibernate.event.PostInsertEventListener; import org.hibernate.event.PostLoadEvent; import org.hibernate.event.PostLoadEventListener; import org.hibernate.event.PostUpdateEvent; import org.hibernate.event.PostUpdateEventListener; import org.hibernate.event.PreDeleteEvent; import org.hibernate.event.PreDeleteEventListener; -import org.hibernate.event.PreInsertEvent; -import org.hibernate.event.PreInsertEventListener; import org.hibernate.event.PreLoadEvent; import org.hibernate.event.PreLoadEventListener; import org.hibernate.event.PreUpdateEvent; import org.hibernate.event.PreUpdateEventListener; -import org.hibernate.type.Type; /** * Le TopiaContextImpl est le point d'entre pour acceder aux donnees. Il est @@ -142,7 +142,7 @@ * Set des sous context creer avec un beginTransaction et donc sur lequel * nous sommes listener */ - protected Set childContext = new HashSet(); + protected Map childContext = new WeakHashMap(); protected CategorisedListenerSet listeners = new CategorisedListenerSet( TopiaEntityListener.class); @@ -150,6 +150,11 @@ protected ListenerSet vetoableListeners = new ListenerSet( TopiaVetoableEntityListener.class); + protected ListenerSet transactionListeners = new ListenerSet( + TopiaTransactionListener.class); + + protected List transactionEvents = new LinkedList(); + /** * constructeur utilisé par la factory pour creer les contexts initiaux * @@ -172,10 +177,14 @@ this.parentContext = parentContext; } - public Set getChildContext() { - return this.childContext; + public Set getChildContext() { + return this.childContext.keySet(); } + protected void addChildContext(TopiaContextImplementor child) { + childContext.put(child, null); + } + /* * (non-Javadoc) * @@ -235,6 +244,49 @@ } else { Configuration cfg = new Configuration(); + // Ajout du listeners pour les events + TopiaHibernateEvent listener = new TopiaHibernateEvent(this); + + PreLoadEventListener[] preLoadEventListeners = cfg + .getEventListeners().getPreLoadEventListeners(); + preLoadEventListeners = ArrayUtil.concatElems( + preLoadEventListeners, listener); + PreUpdateEventListener[] preUpdateEventListeners = cfg + .getEventListeners().getPreUpdateEventListeners(); + preUpdateEventListeners = ArrayUtil.concatElems( + preUpdateEventListeners, listener); + PreDeleteEventListener[] preDeleteEventListeners = cfg + .getEventListeners().getPreDeleteEventListeners(); + preDeleteEventListeners = ArrayUtil.concatElems( + preDeleteEventListeners, listener); + + PostLoadEventListener[] postLoadEventListeners = cfg + .getEventListeners().getPostLoadEventListeners(); + postLoadEventListeners = ArrayUtil.concatElems( + postLoadEventListeners, listener); + PostUpdateEventListener[] postUpdateEventListeners = cfg + .getEventListeners().getPostUpdateEventListeners(); + postUpdateEventListeners = ArrayUtil.concatElems( + postUpdateEventListeners, listener); + PostDeleteEventListener[] postDeleteEventListeners = cfg + .getEventListeners().getPostDeleteEventListeners(); + postDeleteEventListeners = ArrayUtil.concatElems( + postDeleteEventListeners, listener); + + cfg.getEventListeners().setPreLoadEventListeners( + preLoadEventListeners); + cfg.getEventListeners().setPreUpdateEventListeners( + preUpdateEventListeners); + cfg.getEventListeners().setPreDeleteEventListeners( + preDeleteEventListeners); + + cfg.getEventListeners().setPostLoadEventListeners( + postLoadEventListeners); + cfg.getEventListeners().setPostUpdateEventListeners( + postUpdateEventListeners); + cfg.getEventListeners().setPostDeleteEventListeners( + postDeleteEventListeners); + // ajout des repertoires contenant les mappings hibernate String[] dirs = getConfig().getProperty( TOPIA_PERSISTENCE_DIRECTORIES, "").split(","); @@ -284,10 +336,22 @@ @SuppressWarnings("unchecked") public TopiaDAO getDAO(Class entityClass) throws TopiaException { + if (entityClass == null) { + throw new IllegalArgumentException("null is not valid entity class"); + } if (getRootContext() == this) { - throw new TopiaException( - "Vous êtes sur le root context vous devez ouvrir une transaction pour pouvoir accèder aux données"); + throw new TopiaException("Vous êtes sur le root context vous" + + " devez ouvrir une transaction pour pouvoir accèder" + + " aux données"); + } + if (getHibernateFactory().getClassMetadata(entityClass) == null) { + log.debug("Class supporté par ce TopiaContext: " + + getHibernateFactory().getAllClassMetadata().keySet()); + throw new TopiaException("La classe " + entityClass.getName() + + " n'est pas supporté par ce TopiaContext. Vous avez sans" + + " doute oubliez d'ajouter son mapping"); } + TopiaDAO result = (TopiaDAO) daoCache.get(entityClass); if (result == null) { // recherche du type de DAO a instancier pour cette entity @@ -331,15 +395,6 @@ + " not found, use default TopiaDAOHibernate"); } daoCache.put(entityClass, result); - // si quelqu'un se met listener sur le TopiaContext, il faut qu'il - // soit prevenu des evenements de tout type d'entite - // on pourrait ne pas faire ca, et lorsque quelque demande - // a etre listener sur le context, on lui ajouter une entre - // dans les listeners pour la Class TopiaEntity dont herite - // toutes les classes topia, mais du coup le framework ne - // fonctionne plus pour les simples pojo non Topia pour lequel - // il fonction avec ca. - getListeners().addCategory(TopiaContext.class, entityClass); } return result; } @@ -356,19 +411,41 @@ public ListenerSet getVetoableListeners() { return this.vetoableListeners; } + + /** + * @return Returns the transactionListeners. + */ + public ListenerSet getTransactionListeners() { + return this.transactionListeners; + } + + public void addVetoableListener(TopiaVetoableEntityListener l) { + this.vetoableListeners.add(l); + } + public void removeVetoableListener(TopiaVetoableEntityListener l) { + this.vetoableListeners.remove(l); + } + + public void addTransactionListener(TopiaTransactionListener l) { + this.vetoableListeners.add(l); + } + + public void removeTransactionListener(TopiaTransactionListener l) { + this.vetoableListeners.remove(l); + } + /* * (non-Javadoc) * * @see org.codelutin.topia.TopiaContext#addTopiaEntityListener(org.codelutin.topia.event.TopiaEntityListener) */ public void addTopiaEntityListener(TopiaEntityListener l) { - // Note: si jamais on prend la decision de dire que toutes les entites - // doivent heriter de TopiaEntity alors il suffit de remplacer - // this.getClass() par TopiaEntity.class, de faire la meme chose - // pour le remove et de supprimer l'appel à addCategory dans le - // getDAO - getListeners().add(this.getClass(), l); + // Quoi qu'il arrive une entity herite toujours de Objet + // Donc si on veut recevoir tous les events, il suffit de + // s'enregistrer sur la class Objet. Le CategorisedListenerSet + // fait le reste + addTopiaEntityListener(Object.class, l); } /* @@ -387,7 +464,7 @@ * @see org.codelutin.topia.TopiaContext#removeTopiaEntityListener(org.codelutin.topia.event.TopiaEntityListener) */ public void removeTopiaEntityListener(TopiaEntityListener l) { - getListeners().remove(this.getClass(), l); + removeTopiaEntityListener(Object.class, l); } /* @@ -408,14 +485,13 @@ */ public TopiaContext beginTransaction() throws TopiaNotFoundException { TopiaContextImpl result = new TopiaContextImpl(this); - childContext.add(result); - result.hibernate = getHibernateFactory().openSession( - new TopiaInterceptor(result)); + addChildContext(result); + result.hibernate = getHibernateFactory().openSession(); + // new TopiaInterceptor(result)); // on ne synchronise jamais les données avec la base tant que // l'utilisateur n'a pas fait de commit du context result.hibernate.setFlushMode(FlushMode.NEVER); - // TODO se mettre listener sur ce context return result; } @@ -465,53 +541,78 @@ } } - public void fireVetoableLoad(Object id) { + public void fireVetoableLoad(Class entityClass, Object id) { + log.debug("fireVetoableLoad: " + id); try { - getVetoableListeners().fire("loadEntity", - new TopiaVetoableEntityEvent(this, id)); + TopiaVetoableEntityEvent event = new TopiaVetoableEntityEvent(this, entityClass, id); + for(Iterator l=getVetoableListeners().iterator(); l.hasNext();) { + l.next().loadEntity(event); + } + if (getParentContext() != null) { + getParentContext().fireVetoableLoad(entityClass, id); + } } catch (Exception eee) { throw new TopiaVetoException(eee); } } - public void fireVetoableCreate(Object id) { + public void fireVetoableCreate(Class entityClass, Object id) { + log.debug("fireVetoableCreate: " + id); try { - getVetoableListeners().fire("createEntity", - new TopiaVetoableEntityEvent(this, id)); + TopiaVetoableEntityEvent event = new TopiaVetoableEntityEvent(this, entityClass, id); + for(Iterator l=getVetoableListeners().iterator(); l.hasNext();) { + l.next().createEntity(event); + } + if (getParentContext() != null) { + getParentContext().fireVetoableCreate(entityClass, id); + } } catch (Exception eee) { throw new TopiaVetoException(eee); } } - public void fireVetoableUpdate(Object id) { + public void fireVetoableUpdate(Class entityClass, Object id) { + log.debug("fireVetoableUpdate: " + id); try { - getVetoableListeners().fire("updateEntity", - new TopiaVetoableEntityEvent(this, id)); + TopiaVetoableEntityEvent event = new TopiaVetoableEntityEvent(this, entityClass, id); + for(Iterator l=getVetoableListeners().iterator(); l.hasNext();) { + l.next().updateEntity(event); + } + if (getParentContext() != null) { + getParentContext().fireVetoableUpdate(entityClass, id); + } } catch (Exception eee) { throw new TopiaVetoException(eee); } } - public void fireVetoableDelete(Object id) { + public void fireVetoableDelete(Class entityClass, Object id) { + log.debug("fireVetoableDelete: " + id); try { - getVetoableListeners().fire("deleteEntity", - new TopiaVetoableEntityEvent(this, id)); + TopiaVetoableEntityEvent event = new TopiaVetoableEntityEvent(this, entityClass, id); + for(Iterator l=getVetoableListeners().iterator(); l.hasNext();) { + l.next().deleteEntity(event); + } + if (getParentContext() != null) { + getParentContext().fireVetoableDelete(entityClass, id); + } } catch (Exception eee) { throw new TopiaVetoException(eee); } } - public void fireOnLoaded(Object entity) { - // FIXME a faire - // il faut auss que l'interceptor Hibernate et les autres persistences - // appelle cette methode + public void fireOnLoaded(Class entityClass, Object id, Object entity) { + log.debug("fireOnLoaded: " + entity); if (entity instanceof TopiaEntityAbstract) { ((TopiaEntityAbstract) entity).setTopiaContext(this); } try { - getListeners().fire(entity.getClass(), "entityLoaded", - new TopiaEntityEvent(this, entity)); + TopiaEntityEvent event = new TopiaEntityEvent(this, entity); + transactionEvents.add(new TopiaTransactionEvent(this, entityClass, id)); + for(Iterator l=getListeners().iterator(entity.getClass()); l.hasNext();) { + l.next().entityLoaded(event); + } } catch (Exception eee) { if (log.isWarnEnabled()) { log.warn("Can't fire event loaded for entity: " + entity, eee); @@ -524,11 +625,14 @@ * * @see org.codelutin.topia.framework.TopiaContextImplementor#fireOnCreated(java.lang.Object) */ - public void fireOnCreated(Object entity) { - log.info("onCreated " + entity); + public void fireOnCreated(Class entityClass, Object id, Object entity) { + log.debug("fireOnCreated: " + entity); try { - getListeners().fire(entity.getClass(), "entityCreated", - new TopiaEntityEvent(this, entity)); + TopiaEntityEvent event = new TopiaEntityEvent(this, entity); + transactionEvents.add(new TopiaTransactionEvent(this, entityClass, id)); + for(Iterator l=getListeners().iterator(entity.getClass()); l.hasNext();) { + l.next().entityCreated(event); + } } catch (Exception eee) { if (log.isWarnEnabled()) { log.warn("Can't fire event created for entity: " + entity, eee); @@ -541,11 +645,14 @@ * * @see org.codelutin.topia.framework.TopiaContextImplementor#fireOnUpdated(java.lang.Object) */ - public void fireOnUpdated(Object entity) { - log.info("onUpdated " + entity); + public void fireOnUpdated(Class entityClass, Object id, Object entity) { + log.info("fireOnUpdated: " + entity); try { - getListeners().fire(entity.getClass(), "entityUpdated", - new TopiaEntityEvent(this, entity)); + TopiaEntityEvent event = new TopiaEntityEvent(this, entity); + transactionEvents.add(new TopiaTransactionEvent(this, entityClass, id)); + for(Iterator l=getListeners().iterator(entity.getClass()); l.hasNext();) { + l.next().entityUpdated(event); + } } catch (Exception eee) { if (log.isWarnEnabled()) { log.warn("Can't fire event updated for entity: " + entity, eee); @@ -558,11 +665,14 @@ * * @see org.codelutin.topia.framework.TopiaContextImplementor#fireOnDeleted(java.lang.Object) */ - public void fireOnDeleted(Object entity) { - log.info("onDeleted " + entity); + public void fireOnDeleted(Class entityClass, Object id, Object entity) { + log.debug("fireOnDeleted: " + entity); try { - getListeners().fire(entity.getClass(), "entityDeleted", - new TopiaEntityEvent(this, entity)); + TopiaEntityEvent event = new TopiaEntityEvent(this, entity); + transactionEvents.add(new TopiaTransactionEvent(this, entityClass, id)); + for(Iterator l=getListeners().iterator(entity.getClass()); l.hasNext();) { + l.next().entityDeleted(event); + } } catch (Exception eee) { if (log.isWarnEnabled()) { log.warn("Can't fire event deleted for entity: " + entity, eee); @@ -577,7 +687,17 @@ */ public void fireOnCommited() { log.info("onCommited"); - // TODO + try { + for(Iterator l=getTransactionListeners().iterator(); l.hasNext();) { + l.next().commit(transactionEvents); + } + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Can't fire event commit for entity", eee); + } + } finally { + transactionEvents.clear(); + } } /* @@ -587,56 +707,65 @@ */ public void fireOnRollbacked() { log.info("onRollbacked"); - // TODO - } - - static protected class TopiaInterceptor extends EmptyInterceptor { - - protected TopiaContextImplementor context = null; - - private static final long serialVersionUID = -6787010517746197446L; - - public TopiaInterceptor(TopiaContextImplementor context) { - this.context = context; - } - - @Override - public boolean onLoad(Object entity, Serializable id, Object[] state, - String[] propertyNames, Type[] types) { - boolean result = super.onLoad(entity, id, state, propertyNames, - types); - context.fireVetoableLoad(id); - return result; - } - - @Override - public void onDelete(Object entity, Serializable id, Object[] state, - String[] propertyNames, Type[] types) { - super.onDelete(entity, id, state, propertyNames, types); - context.fireVetoableDelete(id); - context.fireOnDeleted(entity); - } - - @Override - public boolean onSave(Object entity, Serializable id, Object[] state, - String[] propertyNames, Type[] types) { - boolean result = super.onSave(entity, id, state, propertyNames, - types); - context.fireVetoableUpdate(id); - context.fireOnUpdated(entity); - return result; + try { + for(Iterator l=getTransactionListeners().iterator(); l.hasNext();) { + l.next().commit(transactionEvents); + } + } catch (Exception eee) { + if (log.isWarnEnabled()) { + log.warn("Can't fire event commit for entity", eee); + } + } finally { + transactionEvents.clear(); } } + // static protected class TopiaInterceptor extends EmptyInterceptor { + // + // protected TopiaContextImplementor context = null; + // + // private static final long serialVersionUID = -6787010517746197446L; + // + // public TopiaInterceptor(TopiaContextImplementor context) { + // this.context = context; + // } + // + // @Override + // public boolean onLoad(Object entity, Serializable id, Object[] state, + // String[] propertyNames, Type[] types) { + // boolean result = super.onLoad(entity, id, state, propertyNames, + // types); + // context.fireVetoableLoad(id); + // return result; + // } + // + // @Override + // public void onDelete(Object entity, Serializable id, Object[] state, + // String[] propertyNames, Type[] types) { + // super.onDelete(entity, id, state, propertyNames, types); + // context.fireVetoableDelete(id); + // context.fireOnDeleted(entity); + // } + // + // @Override + // public boolean onSave(Object entity, Serializable id, Object[] state, + // String[] propertyNames, Type[] types) { + // boolean result = super.onSave(entity, id, state, propertyNames, + // types); + // context.fireVetoableUpdate(id); + // context.fireOnUpdated(entity); + // return result; + // } + // } + /** * Object permettant de faire le lien entre les events hibernate et topia * * @author poussin */ static protected class TopiaHibernateEvent implements - PostDeleteEventListener, PostInsertEventListener, - PostLoadEventListener, PostUpdateEventListener, - PreDeleteEventListener, PreInsertEventListener, + PostDeleteEventListener, PostLoadEventListener, + PostUpdateEventListener, PreDeleteEventListener, PreLoadEventListener, PreUpdateEventListener { /** */ @@ -671,9 +800,8 @@ } } catch (TopiaException eee) { if (log.isWarnEnabled()) { - log.warn("Error durant la recherche d'un context pour" + - " lancer un event", - eee); + log.warn("Error durant la recherche d'un context pour" + + " lancer un event", eee); } } } @@ -686,24 +814,13 @@ * @see org.hibernate.event.PreLoadEventListener#onPreLoad(org.hibernate.event.PreLoadEvent) */ public void onPreLoad(PreLoadEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireVetoableLoad(event.getId()); + context.fireVetoableLoad(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId()); } } - org.hibernate.impl.SessionImpl b; - /* - * (non-Javadoc) - * - * @see org.hibernate.event.PreInsertEventListener#onPreInsert(org.hibernate.event.PreInsertEvent) - */ - public boolean onPreInsert(PreInsertEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); - if (context != null) { - context.fireVetoableCreate(event.getId()); - } - return false; - } /* * (non-Javadoc) @@ -711,9 +828,11 @@ * @see org.hibernate.event.PreUpdateEventListener#onPreUpdate(org.hibernate.event.PreUpdateEvent) */ public boolean onPreUpdate(PreUpdateEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireVetoableUpdate(event.getId()); + context.fireVetoableUpdate(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId()); } return false; } @@ -724,9 +843,11 @@ * @see org.hibernate.event.PreDeleteEventListener#onPreDelete(org.hibernate.event.PreDeleteEvent) */ public boolean onPreDelete(PreDeleteEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireVetoableDelete(event.getId()); + context.fireVetoableDelete(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId()); } return false; } @@ -737,21 +858,11 @@ * @see org.hibernate.event.PostLoadEventListener#onPostLoad(org.hibernate.event.PostLoadEvent) */ public void onPostLoad(PostLoadEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); - if (context != null) { - context.fireOnLoaded(event.getEntity()); - } - } - - /* - * (non-Javadoc) - * - * @see org.hibernate.event.PostInsertEventListener#onPostInsert(org.hibernate.event.PostInsertEvent) - */ - public void onPostInsert(PostInsertEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireOnCreated(event.getEntity()); + context.fireOnLoaded(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId(), event.getEntity()); } } @@ -761,9 +872,11 @@ * @see org.hibernate.event.PostUpdateEventListener#onPostUpdate(org.hibernate.event.PostUpdateEvent) */ public void onPostUpdate(PostUpdateEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireOnUpdated(event.getEntity()); + context.fireOnUpdated(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId(), event.getEntity()); } } @@ -773,9 +886,11 @@ * @see org.hibernate.event.PostDeleteEventListener#onPostDelete(org.hibernate.event.PostDeleteEvent) */ public void onPostDelete(PostDeleteEvent event) { - TopiaContextImplementor context = getContext(rootContext, event.getSession()); + TopiaContextImplementor context = getContext(rootContext, event + .getSession()); if (context != null) { - context.fireOnDeleted(event.getEntity()); + context.fireOnDeleted(event.getPersister().getMappedClass( + EntityMode.POJO), event.getId(), event.getEntity()); } } } Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.2 topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.3 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java:1.2 Thu Jan 5 04:50:47 2006 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImplementor.java Fri Jan 6 12:15:20 2006 @@ -23,9 +23,9 @@ * Created: 3 janv. 2006 21:27:24 * * @author poussin - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Last update: $Date: 2006/01/05 04:50:47 $ + * Last update: $Date: 2006/01/06 12:15:20 $ * by : $Author: bpoussin $ */ @@ -54,7 +54,7 @@ /** * @return Returns the childContext. */ - public Set getChildContext(); + public Set getChildContext(); /** * @return Returns the parentContext. @@ -103,12 +103,17 @@ public ListenerSet getVetoableListeners(); /** + * @return Returns the transactionListeners. + */ + public ListenerSet getTransactionListeners(); + + /** * Appele avant de charger un objet, le listener peut lever une exception * s'il ne souhaite pas que l'objet soit chargé * @param id identifiant de l'objet a charger * @throws Exception If one listener don't accepte this action */ - public void fireVetoableLoad(Object id); + public void fireVetoableLoad(Class entityClass, Object id); /** * Appele avant de creer un objet, le listener peut lever une exception @@ -116,7 +121,7 @@ * @param id identifiant de l'objet a creer * @throws Exception If one listener don't accepte this action */ - public void fireVetoableCreate(Object id); + public void fireVetoableCreate(Class entityClass, Object id); /** * Appele avant d'updater un objet, le listener peut lever une exception @@ -124,7 +129,7 @@ * @param id identifiant de l'objet a updater * @throws Exception If one listener don't accepte this action */ - public void fireVetoableUpdate(Object id); + public void fireVetoableUpdate(Class entityClass, Object id); /** * Appele avant de supprimer un objet, le listener peut lever une exception @@ -132,31 +137,31 @@ * @param id identifiant de l'objet a supprimé * @throws Exception If one listener don't accepte this action */ - public void fireVetoableDelete(Object id); + public void fireVetoableDelete(Class entityClass, Object id); /** * Appeler apres le chargement d'une entity * @param entity l'entite qui vient d'etre chargée */ - public void fireOnLoaded(Object entity); + public void fireOnLoaded(Class entityClass, Object id, Object entity); /** * Appeler apres la creation d'une entity * @param entity l'entite qui vient d'etre creee */ - public void fireOnCreated(Object entity); + public void fireOnCreated(Class entityClass, Object id, Object entity); /** * Appeler apres la mise a jour d'une entity * @param entity l'entite qui vient d'etre modifee */ - public void fireOnUpdated(Object entity); + public void fireOnUpdated(Class entityClass, Object id, Object entity); /** * Appeler apres l'effacement d'une entity * @param entity l'entite qui vient d'etre effacée */ - public void fireOnDeleted(Object entity); + public void fireOnDeleted(Class entityClass, Object id, Object entity); /** * Appeler apres le commit d'une transaction