This is an automated email from the git hooks/post-receive script. New commit to branch feature/3539 in repository topia. See http://git.nuiton.org/topia.git commit 6c95ef672cb1e597795d90e5d9392a245a2fab16 Author: Brendan Le Ny <bleny@codelutin.com> Date: Mon Feb 2 11:18:05 2015 +0100 Introduce ListenableTopiaPersistenceContext ListenableTopiaApplicationContext and start implementation, TopiaEntitiesEvent are thrown but with missing topia entities --- .../topia/persistence/TopiaApplicationContext.java | 7 ++-- .../topia/persistence/TopiaPersistenceContext.java | 4 +- .../internal/AbstractTopiaApplicationContext.java | 46 +++++++++++++++++++++- .../internal/AbstractTopiaPersistenceContext.java | 15 ++++++- 4 files changed, 65 insertions(+), 7 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java index 08f8aaa..f27407b 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java @@ -24,6 +24,7 @@ package org.nuiton.topia.persistence; * #L% */ +import org.nuiton.topia.persistence.listeners.ListenableTopiaApplicationContext; import org.nuiton.topia.persistence.support.TopiaListenableSupport; import org.nuiton.topia.persistence.support.TopiaServiceSupport; @@ -63,8 +64,8 @@ import java.util.List; * @author Tony Chemit : chemit@codelutin.com * @since 3.0 */ -public interface TopiaApplicationContext<K extends TopiaPersistenceContext> - extends TopiaListenableSupport, TopiaServiceSupport, Closeable { +public interface TopiaApplicationContext<P extends TopiaPersistenceContext> + extends ListenableTopiaApplicationContext<P>, TopiaListenableSupport, TopiaServiceSupport, Closeable { /** * Creates a new instance of XxxTopiaPersistenceContext (where <code>Xxx</code> is the project name). This is the @@ -74,7 +75,7 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> * {@link org.nuiton.topia.persistence.TopiaPersistenceContext} * @see org.nuiton.topia.persistence.TopiaPersistenceContext */ - K newPersistenceContext(); + P newPersistenceContext(); String getModelVersion(); diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceContext.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceContext.java index 220d37f..ffa051e 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceContext.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaPersistenceContext.java @@ -25,6 +25,7 @@ package org.nuiton.topia.persistence; */ import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; +import org.nuiton.topia.persistence.listeners.ListenableTopiaPersistenceContext; import org.nuiton.topia.persistence.support.TopiaReplicationSupport; import java.io.Closeable; @@ -53,7 +54,7 @@ import java.io.Closeable; * @since 3.0 */ public interface TopiaPersistenceContext extends TopiaReplicationSupport, TopiaReplicationDestination, - TopiaDaoSupplier, TopiaTransaction, Closeable { + TopiaDaoSupplier, TopiaTransaction, Closeable, ListenableTopiaPersistenceContext { /** * Retrieve {@link org.nuiton.topia.persistence.TopiaEntity} using its unique {@code topiaId}. @@ -115,6 +116,7 @@ public interface TopiaPersistenceContext extends TopiaReplicationSupport, TopiaR * @see org.nuiton.topia.persistence.internal.support.TopiaFiresSupport * @since 3.0 */ + @Deprecated TopiaFiresSupport getTopiaFiresSupport(); } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java index 4ec861e..1968ca8 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java @@ -48,8 +48,10 @@ import org.nuiton.topia.persistence.event.TopiaEntityVetoable; import org.nuiton.topia.persistence.event.TopiaSchemaListener; import org.nuiton.topia.persistence.event.TopiaTransactionListener; import org.nuiton.topia.persistence.event.TopiaTransactionVetoable; +import org.nuiton.topia.persistence.internal.listeners.TopiaListenersSupport; import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; import org.nuiton.topia.persistence.internal.support.TopiaServiceSupportImpl; +import org.nuiton.topia.persistence.listeners.TopiaApplicationContextListener; import org.nuiton.topia.persistence.support.TopiaServiceSupport; import org.nuiton.topia.persistence.util.TopiaUtil; @@ -71,7 +73,7 @@ import java.util.WeakHashMap; * @author Arnaud Thimel (Code Lutin) * @since 3.0 */ -public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistenceContext> implements TopiaApplicationContext<K> { +public abstract class AbstractTopiaApplicationContext<P extends TopiaPersistenceContext> implements TopiaApplicationContext<P> { private static final Log log = LogFactory.getLog(AbstractTopiaApplicationContext.class); @@ -79,8 +81,11 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence protected TopiaConfiguration configuration; + @Deprecated protected TopiaFiresSupport topiaFiresSupport; + protected TopiaListenersSupport<P> topiaListenersSupport; + protected TopiaServiceSupport topiaServiceSupport; protected HibernateProvider hibernateProvider; @@ -122,6 +127,8 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence new TopiaConfigurationBuilder().check(configuration); topiaFiresSupport = new TopiaFiresSupport(); + topiaListenersSupport = new TopiaListenersSupport<P>(); + sessionRegistry = new TopiaHibernateSessionRegistry(); // First initialize all the services @@ -227,6 +234,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence return hibernateProvider; } + @Deprecated protected TopiaFiresSupport getTopiaFiresSupport() { return topiaFiresSupport; } @@ -245,96 +253,124 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence } @Override + @Deprecated public void addTopiaEntityListener(TopiaEntityListener listener) { topiaFiresSupport.addTopiaEntityListener(listener); } @Override + @Deprecated public void addTopiaEntityListener(Class<? extends TopiaEntity> entityClass, TopiaEntityListener listener) { topiaFiresSupport.addTopiaEntityListener(entityClass, listener); } @Override + @Deprecated public void removeTopiaEntityListener(TopiaEntityListener listener) { topiaFiresSupport.removeTopiaEntityListener(listener); } @Override + @Deprecated public void removeTopiaEntityListener(Class<? extends TopiaEntity> entityClass, TopiaEntityListener listener) { topiaFiresSupport.removeTopiaEntityListener(entityClass, listener); } @Override + @Deprecated public void addTopiaEntityVetoable(TopiaEntityVetoable vetoable) { topiaFiresSupport.addTopiaEntityVetoable(vetoable); } @Override + @Deprecated public void addTopiaEntityVetoable(Class<? extends TopiaEntity> entityClass, TopiaEntityVetoable vetoable) { topiaFiresSupport.addTopiaEntityVetoable(entityClass, vetoable); } @Override + @Deprecated public void removeTopiaEntityVetoable(TopiaEntityVetoable vetoable) { topiaFiresSupport.removeTopiaEntityVetoable(vetoable); } @Override + @Deprecated public void removeTopiaEntityVetoable(Class<? extends TopiaEntity> entityClass, TopiaEntityVetoable vetoable) { topiaFiresSupport.removeTopiaEntityVetoable(entityClass, vetoable); } @Override + @Deprecated public void addTopiaEntitiesVetoable(TopiaEntitiesVetoable vetoable) { topiaFiresSupport.addTopiaEntitiesVetoable(vetoable); } @Override + @Deprecated public void removeTopiaEntitiesVetoable(TopiaEntitiesVetoable vetoable) { topiaFiresSupport.removeTopiaEntitiesVetoable(vetoable); } @Override + @Deprecated public void addTopiaTransactionListener(TopiaTransactionListener listener) { topiaFiresSupport.addTopiaTransactionListener(listener); } @Override + @Deprecated public void removeTopiaTransactionListener(TopiaTransactionListener listener) { topiaFiresSupport.removeTopiaTransactionListener(listener); } @Override + @Deprecated public void addTopiaTransactionVetoable(TopiaTransactionVetoable vetoable) { topiaFiresSupport.addTopiaTransactionVetoable(vetoable); } @Override + @Deprecated public void removeTopiaTransactionVetoable(TopiaTransactionVetoable vetoable) { topiaFiresSupport.removeTopiaTransactionVetoable(vetoable); } @Override + @Deprecated public void addPropertyChangeListener(PropertyChangeListener listener) { topiaFiresSupport.addPropertyChangeListener(listener); } @Override + @Deprecated public void removePropertyChangeListener(PropertyChangeListener listener) { topiaFiresSupport.removePropertyChangeListener(listener); } @Override + @Deprecated public void addTopiaSchemaListener(TopiaSchemaListener listener) { topiaFiresSupport.addTopiaSchemaListener(listener); } @Override + @Deprecated public void removeTopiaSchemaListener(TopiaSchemaListener listener) { topiaFiresSupport.removeTopiaSchemaListener(listener); } @Override + public void addTopiaApplicationContextListener(TopiaApplicationContextListener<P> listener) { + topiaListenersSupport.addTopiaApplicationContextListener(listener); + } + + @Override + public void removeTopiaApplicationContextListener(TopiaApplicationContextListener<P> listener) { + topiaListenersSupport.removeTopiaApplicationContextListener(listener); + } + + @Override public Map<String, TopiaService> getServices() { return topiaServiceSupport.getServices(); } @@ -379,9 +415,11 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence showSchema = true; } topiaFiresSupport.firePreCreateSchema(this); + topiaListenersSupport.firePreCreateSchema(this); Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); new SchemaExport(hibernateConfiguration).execute(showSchema, true, false, true); topiaFiresSupport.firePostCreateSchema(this); + topiaListenersSupport.firePostCreateSchema(this); } catch (HibernateException eee) { throw new TopiaException( String.format("Could not create schema for reason: %s", @@ -412,10 +450,12 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence } topiaFiresSupport.firePreUpdateSchema(this); + topiaListenersSupport.firePreUpdateSchema(this); // AThimel 14/06/14 getHibernateConfiguration() may create the schema, prefer using newHibernateConfiguration() which doesn't Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); new SchemaUpdate(hibernateConfiguration).execute(showSchema, true); topiaFiresSupport.firePostUpdateSchema(this); + topiaListenersSupport.firePostUpdateSchema(this); } catch (HibernateException eee) { throw new TopiaException( String.format("Could not update schema for reason: %s", @@ -432,10 +472,12 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence } topiaFiresSupport.firePreDropSchema(this); + topiaListenersSupport.firePreDropSchema(this); // AThimel 14/06/14 getHibernateConfiguration() may create the schema, prefer using newHibernateConfiguration() which doesn't Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); new SchemaExport(hibernateConfiguration).execute(showSchema, true, true, false); topiaFiresSupport.firePostDropSchema(this); + topiaListenersSupport.firePostDropSchema(this); } catch (HibernateException eee) { throw new TopiaException( String.format("Could not drop schema for reason: %s", @@ -453,6 +495,8 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence log.debug("will close " + this); } + topiaListenersSupport.firePreClose(this); + // Iterate over the children PersistenceContexts and close them for (TopiaPersistenceContext persistenceContext : persistenceContexts) { if (persistenceContext == null) { diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaPersistenceContext.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaPersistenceContext.java index 9124dd8..904a2d9 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaPersistenceContext.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaPersistenceContext.java @@ -38,6 +38,7 @@ import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaIdFactory; +import org.nuiton.topia.persistence.internal.listeners.TopiaListenersSupport; import org.nuiton.topia.persistence.TopiaPersistenceContext; import org.nuiton.topia.persistence.TopiaReplicationDestination; import org.nuiton.topia.persistence.internal.support.HibernateTopiaJpaSupport; @@ -83,8 +84,11 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc /** * Object that handles each event propagation. Listeners are registered inside this instance. */ + @Deprecated protected TopiaFiresSupport firesSupport; + protected TopiaListenersSupport<AbstractTopiaPersistenceContext> topiaListenersSupport; + /** * This subclass of TopiaHibernateSupport is made to be used only internally within this persistence context. This * instance is created by the persistence context itself. @@ -123,7 +127,7 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc this.hibernateSupport = new InternalTopiaHibernateSupport(parameter.getHibernateProvider()); // Now starts the transaction, as this persistenceContext IS the TopiaTransaction - startTransaction(); + beginTransaction(); // Create the different supports that may be needed by the DAOs this.jpaSupport = new HibernateTopiaJpaSupport(hibernateSupport, firesSupport); @@ -182,7 +186,7 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc } } - protected void startTransaction() throws TopiaException { + protected void beginTransaction() { SessionFactory factory = hibernateSupport.getHibernateFactory(); Session result = factory.openSession(); @@ -221,6 +225,7 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc // fire event getTopiaFiresSupport().fireOnBeginTransaction(this); + topiaListenersSupport.fireBeginTransaction(this); } protected void checkNotClosed() { @@ -337,6 +342,8 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc try { + topiaListenersSupport.firePreCommit(this); + Session hibernateSession = hibernateSupport.getHibernateSession(); Transaction transaction = hibernateSession.getTransaction(); @@ -344,6 +351,7 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc transaction.commit(); getTopiaFiresSupport().fireOnPostCommit(this); + topiaListenersSupport.firePostCommit(this); hibernateSession.beginTransaction(); @@ -362,6 +370,8 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc protected void rollback0(boolean beginAfterRollback) { try { + topiaListenersSupport.firePreRollback(this); + Session hibernateSession = hibernateSupport.getHibernateSession(); Transaction transaction = hibernateSession.getTransaction(); @@ -384,6 +394,7 @@ public abstract class AbstractTopiaPersistenceContext implements TopiaPersistenc } getTopiaFiresSupport().fireOnPostRollback(this); + topiaListenersSupport.firePostRollback(this); } catch (HibernateException eee) { String message = String.format("An error occurred during rollback operation: %1$s", eee.getMessage()); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.