Found the problem. have to register a GraphEvent with the DataChannel to
capture DataContext rollbacks but you can register DataContextEvent's with
the DataContext to capture commits and willCommit. A little bit confusing...

EventManager eventManager = this.getDataContext().getEventManager();

       //this never happens and not sure why
       //gets registered but i believe will only fire if there is an
exception in a
       // commit and the transaction is rolledback
       eventManager.addListener(
               this,
               "dataContextDidRollback",
               DataContextEvent.class,
               DataContext.DID_ROLLBACK,
               this.getDataContext());


       //registers and fires the event        eventManager.addListener(
               this,
               "dataContextDidRollback",
               GraphEvent.class,
               DataChannel.GRAPH_ROLLEDBACK_SUBJECT,
               this.getDataContext());


On 30/10/06, edward pedersson <[EMAIL PROTECTED]> wrote:

Hi

I am trying to capture the a rollback event from the dataContext and I
have tried variation of the code below but nothing seems to work. My event
handlers never get called. I would have used the DataObject jandlers but
they don't support rollBack.

Can anyone see what I am doing wrong? Many thnaks for your help.



public class SomeDataObject() extends MyDataObject {


  public static DataContextTransactionEventListener
dataContextTransactionListener = new DataContextTransactionEventListener() {

        public void dataContextDidCommit(DataContextEvent event) {
          System.out.println("*** xxSomething changed! DID_COMMIT ***");
        }
        public void dataContextDidRollback(DataContextEvent event) {
              System.out.println("*** xxSomething changed! ROLLEDBACK
***");
        }
        public void dataContextWillCommit(DataContextEvent event) {
              System.out.println("*** xxSomething changed! WILL_COMMIT
***");
        }
      };

    public static DataChannelListener dataChannelListener = new
DataChannelListener() {
        public void graphChanged(GraphEvent event)  {
          System.out.println("*** Something changed! DID_COMMIT ***");
        }
        public void graphFlushed(GraphEvent event)  {
              System.out.println("*** Something changed! ROLLEDBACK ***");
        }
        public void graphRolledback(GraphEvent event)  {
              System.out.println("*** Something changed! WILL_COMMIT
***");
        }
      };


    @Override
    public void fetchFinished() {

        super.fetchFinished ();
        System.out.println("*** FETCH FINISHED! ***" + this.toString());

// this.getDataContext() is DataContext.getThreadedContext()

        this.getDataContext().setTransactionEventsEnabled(true);

        DataContext.setTransactionEventsEnabledDefault(true);

        EventUtil.listenForChannelEvents(this.getDataContext().getChannel(),
dataChannelListener);

        
EventManager.getDefaultManager().addListener(dataContextTransactionListener,"dataContextDidRollback",
DataContextEvent.class,DataContext.DID_ROLLBACK, null);
    }


....more methods
}


--


-- e




--


-- e

Reply via email to