nice to hear that ;-)
[] Leo On Mon, Feb 10, 2014 at 2:45 PM, James Talbut <jtal...@spudsoft.co.uk>wrote: > One quick upgrade to 2.3.0 and my tests are passing. > > Thank you, that's a lot neater than I feared it would be. > > Jim > > > On Mon, Feb 10, 2014 at 02:36:00PM -0200, Leonardo K. Shikida wrote: > > [leoks@oc7612866413 ~]$ ls Downloads/apache-tomee-plus-1.6.0/lib/*jpa* > > Downloads/apache-tomee-plus-1.6.0/lib/openejb-jpa-integration-4.6.0.jar > > Downloads/apache-tomee-plus-1.6.0/lib/openjpa-2.3.0-nonfinal-1540826.jar > > > > > > seems to be 2.3.0 > > > > [] > > > > Leo > > > > > > On Mon, Feb 10, 2014 at 2:34 PM, Leonardo K. Shikida <shik...@gmail.com > >wrote: > > > > > it should be enabled since 2.2.0 > > > > > > > > > > http://openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/ref_guide_audit.html > > > > > > [] > > > > > > Leo > > > > > > [] > > > > > > Leo > > > > > > > > > On Mon, Feb 10, 2014 at 2:28 PM, James Talbut <jtal...@spudsoft.co.uk > >wrote: > > > > > >> Hi Leo, > > >> > > >> That looks great, but my version of OpenJPA (2.2.2) doesn't seem to > have > > >> two key functions: > > >> audited.getManangedFieldValue(field) > > >> audited.getOriginalFieldValue(field) > > >> > > >> What version are you using? > > >> > > >> Thanks > > >> > > >> Jim > > >> > > >> > > >> On Mon, Feb 10, 2014 at 02:06:18PM -0200, Leonardo K. Shikida wrote: > > >> > I am not sure if this is what want, but I do something like this > with my > > >> > classes > > >> > > > >> > my audited entity > > >> > > > >> > @Auditable(values = { AuditableOperation.CREATE, > > >> AuditableOperation.UPDATE > > >> > }) > > >> > public class MyClass implements Serializable { > > >> > (...) > > >> > } > > >> > > > >> > my persistence.xml > > >> > > > >> > <property name="openjpa.Auditor" > > >> > > > >> > value="my.DatabaseAuditor(sequence='false',synchDriver='oracle.jdbc.OracleDriver',synchDriverUser='myuser',synchDriverPassword='mypass',synchDriverJdbc='jdbc:oracle:thin:@localhost > > >> > :1521:XE')"/> > > >> > > > >> > my Auditor > > >> > > > >> > public class DatabaseAuditor implements Auditor { > > >> > > > >> > private AuditLogger defaultAuditor = new AuditLogger(); > > >> > private String synchDriver; > > >> > private String synchDriverUser; > > >> > private String synchDriverPassword; > > >> > private String synchDriverJdbc; > > >> > private String sequence; > > >> > > > >> > @Override > > >> > public void audit(Broker broker, Collection<Audited> newObjects, > > >> > Collection<Audited> updates, Collection<Audited> deletes) { > > >> > (...) > > >> > if (updates.size() > 0) { > > >> > for (Audited a : updates) { > > >> > this.addChangeLogForUpdate(a); > > >> > } > > >> > } > > >> > } > > >> > > > >> > and addChangeLogForUpdate can access both previous and new values > just > > >> > using > > >> > > > >> > for (String field : audited.getUpdatedFields()) { > > >> > if > (Arrays.asList(DatabaseAuditor.FIELDS).contains(field)) { > > >> > newdata.put(field, > > >> audited.getManangedFieldValue(field)); > > >> > olddata.put(field, > > >> audited.getOriginalFieldValue(field)); > > >> > //use driver info to save this using plain JDBC > > >> > > > >> > I hope it helps > > >> > > > >> > Leo > > >> > > > >> > > > >> > > > >> > [] > > >> > > > >> > Leo > > >> > > > >> > > > >> > On Mon, Feb 10, 2014 at 1:36 PM, Boblitz John < > > >> john.bobl...@bertschi.com>wrote: > > >> > > > >> > > I was working on something similar and this might get you closer > > >> > > > > >> > > StateManagerImpl sm = > > >> > > (StateManagerImpl)currentState.pcGetStateManager(); > > >> > > SaveFieldManager sfm = sm.getSaveFieldManager(); > > >> > > PersistenceCapable oldState = sfm.getState(); > > >> > > > > >> > > I believe you must also specifiy openjpa.RestoreState so that > this can > > >> > > work ... > > >> > > > > >> > > Hope this helps ... > > >> > > > > >> > > John > > >> > > > > >> > > > -----Original Message----- > > >> > > > From: James Talbut [mailto:jtal...@spudsoft.co.uk] > > >> > > > Sent: Monday, February 10, 2014 3:10 PM > > >> > > > To: users@openjpa.apache.org > > >> > > > Subject: Any way to access original field values by name from > > >> Auditor > > >> > > context > > >> > > > > > >> > > > Hi, > > >> > > > > > >> > > > I'm trying to record old and new field values in an Auditor. > > >> > > > Using something like this I can get the new value (using the > > >> > > > audited.getUpdatedFields() to provide the values for 'field'): > > >> > > > > > >> > > > private Object getFieldValue(Broker broker, Object object, > > >> String > > >> > > field) { > > >> > > > if (object == null) { > > >> > > > return null; > > >> > > > } > > >> > > > PersistenceCapable persistenceCapable = > > >> > > > ImplHelper.toPersistenceCapable(object, > > >> > > > JPAFacadeHelper.toEntityManager(broker)); > > >> > > > OpenJPAStateManager stateManager = > > >> > > > (OpenJPAStateManager)persistenceCapable.pcGetStateManager(); > > >> > > > if (stateManager == null) { > > >> > > > return null; > > >> > > > } > > >> > > > int fieldIdx = > > >> > > stateManager.getMetaData().getField(field).getIndex(); > > >> > > > Object value = stateManager.fetch(fieldIdx); > > >> > > > if ((value instanceof RowSetHolder) && > > >> > > > (((RowSetHolder)value).getSize() == 0)) { > > >> > > > return null; > > >> > > > } > > >> > > > return value; > > >> > > > } > > >> > > > > > >> > > > But the old value has no state manager, so pcGetStateManager > always > > >> > > returns > > >> > > > null. > > >> > > > > > >> > > > The old object does have the correct values set on it, but I > don't > > >> have > > >> > > to have to > > >> > > > use reflection (and somehow work out the mapping from field > name to > > >> > > method > > >> > > > name). > > >> > > > > > >> > > > Is there any equivalent to the above that will work for the old > > >> values > > >> > > (as > > >> > > > returned by audited.getOriginalObject()) ? > > >> > > > > > >> > > > Thanks. > > >> > > > > > >> > > > Jim > > >> > > > > >> > > > > > > >