Hi Jim > Are you able to query the audited entities using the AuditReader? Yes, I can create queries using AuditReader.
Two questions: 1) Are you using current_session_context_class = thread ? <property name="current_session_context_class">thread</property> 2) Are you using the "real" Hibernate Session. http://www.mail-archive.com/users@tapestry.apache.org/msg37227.html Here is my code (the relevant part) @Inject private HibernateSessionManager sessionManager; ..... AuditReader reader = AuditReaderFactory.get(sessionManager.getSession()); AuditQuery query = reader.createQuery().forRevisionsOfEntity(getClassDescriptor().getType(), false, true); query.add(AuditEntity.id().eq(getBeanId())); Saludos. Alejandro. On Sun, Dec 20, 2009 at 2:59 PM, Jim O'Callaghan <jc1000...@yahoo.co.uk> wrote: > Howard, Alejandro, > > Thanks for looking at the problem. > > Alejandro, > > Thanks for the detailed source. > > I had made local (less elegant!) changes that I think have the same net > effect as the changes you have outlined below: > > - locally modified org.apache.tapestry5.hibernate.HibernateModule.java to > not contribute a ValueEncoder for a persistentClass if the class has no > MappedClass (I was using .hasPojoRepresentation to decide as I wasn't sure > that the lack of a MappedClass should be correctly flagged as an error > situation under certain circumstances) > > - added a section as follows to the existing > contributeHibernateSessionSource method within my AppModule: > > AuditEventListener[] auditEventListener = new > AuditEventListener[] {new AuditEventListener()}; > > configuration.getEventListeners().setPostInsertEventListeners(auditEventListener); > > configuration.getEventListeners().setPostUpdateEventListeners(auditEventListener); > > configuration.getEventListeners().setPostDeleteEventListeners(auditEventListener); > > configuration.getEventListeners().setPreCollectionUpdateEventListeners(auditEventListener); > > configuration.getEventListeners().setPreCollectionRemoveEventListeners(auditEventListener); > > configuration.getEventListeners().setPostCollectionRecreateEventListeners(auditEventListener); > > The type of AuditEventListener above is definitely > org.hibernate.envers.event.AuditEventListener. My entities are being audited > correctly upon save / update - the problem is when I use > org.hibernate.envers.AuditReaderFactory / AuditReader to create a query to > return some of the audited entities - this is where the "xyz_AUD is not > mapped" issue occurs. Are you able to query the audited entities using the > AuditReader? If you are then perhaps I have some other settings incorrect - > I also tried taking out my changes and replacing them with yours, in case > there was some subtle difference I was missing, but got the same result. > Thanks. > > Regards, > Jim. > > -----Original Message----- > From: Alejandro Scandroli [mailto:alejandroscandr...@gmail.com] > Sent: 19 December 2009 20:05 > To: Tapestry users > Subject: Re: Tapestry5 and envers (2) > > > Here is how I worked around this problem: > > First in your AppModule prevent Hibernate from contributing the > ValueEncoderSource with this: > > public static void > contributeFactoryDefaults(MappedConfiguration<String, String> > configuration) > { > configuration.override(HibernateSymbols.PROVIDE_ENTITY_VALUE_ENCODERS, > "false"); > } > > Then implement your own contributeValueEncoderSource skipping the > ValueEncoder creation if entityClass is null > > @SuppressWarnings("unchecked") > public static void > contributeValueEncoderSource(MappedConfiguration<Class, > ValueEncoderFactory> configuration, > final > HibernateSessionSource sessionSource, > final Session session, > final TypeCoercer typeCoercer, > final PropertyAccess > propertyAccess, > final LoggerSource > loggerSource) > { > > org.hibernate.cfg.Configuration config = sessionSource.getConfiguration(); > Iterator<PersistentClass> mappings = config.getClassMappings(); > while (mappings.hasNext()) > { > final PersistentClass persistentClass = mappings.next(); > final Class entityClass = persistentClass.getMappedClass(); > > if (entityClass != null) > { > ValueEncoderFactory factory = new ValueEncoderFactory() > { > public ValueEncoder create(Class type) > { > return new > HibernateEntityValueEncoder(entityClass, persistentClass, session, > propertyAccess, > typeCoercer, loggerSource.getLogger(entityClass)); > } > }; > > configuration.add(entityClass, factory); > } > } > } > > > That's it. > > Now that I know it's not just me, I will file a JIRA issue for adding > the check "if (entityClass != null)" to the main tapestry-hibernate > module. > > Bonus track: > > I also use an HibernateConfigurer for adding the Listeners > > public class EnversHibernateConfigurer implements HibernateConfigurer > { > > public EnversHibernateConfigurer() {} > > public void configure(Configuration configuration) > { > configuration.setListener("post-insert", > "org.hibernate.envers.event.AuditEventListener"); > configuration.setListener("post-update", > "org.hibernate.envers.event.AuditEventListener"); > configuration.setListener("post-delete", > "org.hibernate.envers.event.AuditEventListener"); > configuration.setListener("pre-collection-update", > "org.hibernate.envers.event.AuditEventListener"); > configuration.setListener("pre-collection-remove", > "org.hibernate.envers.event.AuditEventListener"); > configuration.setListener("post-collection-recreate", > "org.hibernate.envers.event.AuditEventListener"); > } > } > > > I planned to release this code to open source in January, but if you > are willing to try untested code I can check it in sooner. > > I hope it helps. > > Saludos. > Alejandro Scandroli. > > On Sat, Dec 19, 2009 at 1:32 AM, Howard Lewis Ship <hls...@gmail.com> wrote: >> I'm afraid I'm not familiar enough with envers to help ... I haven't >> heard of it before. >> >> On Fri, Dec 18, 2009 at 4:21 PM, Jim O'Callaghan <jc1000...@yahoo.co.uk> >> wrote: >>> Still stumped on this - any pointers on where to look or Tapestry5 relevant >>> examples would be really helpful. >>> >>> Relevant envers listeners are configured and are working correctly when >>> entities are created / updated. Tapestry (specifically the hibernate >>> session) does not appear to see the generated xyz_AUD entities and >>> complains that these entities are not mapped with an error ex.: >>> >>> Caused by: org.hibernate.hql.ast.QuerySyntaxException: >>> com.abc.xyz.entities.core.user.User_AUD is not mapped [select e, r from ... >>> >>> ... whenever any AuditReader methods are called. >>> >>> Within method contributeValueEncoderSource in HibernateModule.java, >>> persistentClass.getMappedClass() returns null for the *_AUD classes, >>> resulting in an error adding the entity to the configuration (blank key). >>> I tried testing classForName on the *_AUD entities where >>> .hasPojoRepresentation returns false but get class not found exception. >>> >>> Towards the end of startup output I do see the entities I expect configured: >>> >>> [INFO] HibernateCoreModule.HibernateSessionSource Configured Hibernate >>> entities: Client_Address_AUD, Client_Phone_AUD, >>> com.abc.xyz.entities.core.SystemKey, >>> com.abc.xyz.entities.core.client.Address, >>> com.abc.xyz.entities.core.client.Address_AUD, >>> com.abc.xyz.entities.core.client.Client, >>> com.abc.xyz.entities.core.client.Client_AUD, >>> com.abc.xyz.entities.core.client.Phone, >>> com.abc.xyz.entities.core.client.Phone_AUD, >>> com.abc.xyz.entities.core.user.Role, com.abc.xyz.entities.core.user.User, >>> com.abc.xyz.entities.core.user.UserClass, com.abc.xyz.entities.menu.Menu, >>> com.abc.xyz.entities.menu.MenuEntry, >>> org.hibernate.envers.DefaultRevisionEntity >>> >>> The earlier startup output does differ between the concrete entities and >>> the envers ones: >>> >>> . >>> . >>> . >>> [INFO] cfg.AnnotationBinder Binding entity from annotated class: >>> com.abc.xyz.entities.core.client.Client >>> [INFO] annotations.EntityBinder Bind entity >>> com.abc.xyz.entities.core.client.Client on table Client >>> [INFO] cfg.AnnotationBinder Binding entity from annotated class: >>> com.abc.xyz.entities.core.client.Address >>> [INFO] annotations.EntityBinder Bind entity >>> com.abc.xyz.entities.core.client.Address on table Address >>> [INFO] cfg.AnnotationBinder Binding entity from annotated class: >>> com.abc.xyz.entities.core.client.Phone >>> [INFO] annotations.EntityBinder Bind entity >>> com.abc.xyz.entities.core.client.Phone on table Phone >>> . >>> . >>> . >>> >>> [INFO] cfg.HbmBinder Mapping class: >>> com.abc.xyz.entities.core.client.Client_AUD -> Client_AUD >>> [INFO] cfg.HbmBinder Mapping class: Client_Address_AUD -> Client_Address_AUD >>> [INFO] cfg.HbmBinder Mapping class: Client_Phone_AUD -> Client_Phone_AUD >>> [INFO] cfg.HbmBinder Mapping class: >>> com.abc.xyz.entities.core.client.Address_AUD -> Address_AUD >>> [INFO] cfg.HbmBinder Mapping class: >>> com.abc.xyz.entities.core.client.Phone_AUD -> Phone_AUD >>> [INFO] cfg.HbmBinder Mapping class: >>> org.hibernate.envers.DefaultRevisionEntity -> REVINFO >>> >>> Does this give any clues - HbmBinder vs. EntityBinder? >>> >>> Regards, >>> Jim. >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> >> >> >> >> -- >> Howard M. Lewis Ship >> >> Creator of Apache Tapestry >> >> The source for Tapestry training, mentoring and support. Contact me to >> learn how I can get you up and productive in Tapestry fast! >> >> (971) 678-5210 >> http://howardlewisship.com >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org