Package org.axonframework.unitofwork

Examples of org.axonframework.unitofwork.UnitOfWork


        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
                if (nestingCounter.decrementAndGet() > 0) {
                    UnitOfWork uow = DefaultUnitOfWork.startAndGet();
                    try {
                        testSubject.handle(event);
                    } finally {
                        uow.commit();
                    }
                }
                return null;
            }
        }).when(mockSaga1).handle(isA(EventMessage.class));
View Full Code Here


    }

    @Test
    public void testInterceptCommand_SuccessfulExecution() throws Throwable {
        when(mockInterceptorChain.proceed()).thenReturn("Return value");
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        StubAggregate aggregate = new StubAggregate();
        uow.registerAggregate(aggregate, mock(EventBus.class), mock(SaveAggregateCallback.class));
        GenericCommandMessage<String> command = new GenericCommandMessage<String>("Command!");
        Object result = testSubject.handle(command, uow, mockInterceptorChain);
        verify(mockAuditDataProvider, never()).provideAuditDataFor(any(CommandMessage.class));

        aggregate.doSomething();
        aggregate.doSomething();

        assertEquals("Return value", result);
        uow.commit();

        verify(mockAuditDataProvider, atLeast(1)).provideAuditDataFor(command);
        verify(mockAuditLogger, times(1)).logSuccessful(eq(command), any(Object.class), listWithTwoEventMessages());
        DomainEventMessage eventFromAggregate = aggregate.getUncommittedEvents().next();
        assertEquals("value", eventFromAggregate.getMetaData().get("key"));
View Full Code Here

    @SuppressWarnings({"ThrowableResultOfMethodCallIgnored"})
    @Test
    public void testInterceptCommand_FailedExecution() throws Throwable {
        RuntimeException mockException = new MockException();
        when(mockInterceptorChain.proceed()).thenThrow(mockException);
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();

        GenericCommandMessage command = new GenericCommandMessage("Command!");
        try {
            testSubject.handle(command, uow, mockInterceptorChain);
        } catch (RuntimeException e) {
            assertSame(mockException, e);
        }

        StubAggregate aggregate = new StubAggregate();
        uow.registerAggregate(aggregate, mock(EventBus.class), mock(SaveAggregateCallback.class));
        aggregate.doSomething();
        aggregate.doSomething();

        RuntimeException mockFailure = new RuntimeException("mock");
        uow.rollback(mockFailure);

        verify(mockAuditDataProvider, times(2)).provideAuditDataFor(any(CommandMessage.class));
        verify(mockAuditLogger, never()).logSuccessful(eq(command), any(Object.class), any(List.class));
        verify(mockAuditLogger).logFailed(eq(command), eq(mockFailure), listWithTwoEventMessages());
    }
View Full Code Here

    }

    @DirtiesContext
    @Test
    public void testEndSaga() {
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        String identifier = UUID.randomUUID().toString();
        StubSaga saga = new StubSaga(identifier);
        saga.associate("key", "value");
        repository.add(saga);
        entityManager.flush();
        assertFalse(entityManager.createQuery("SELECT ae FROM AssociationValueEntry ae WHERE ae.sagaId = :id")
                                 .setParameter("id", identifier)
                                 .getResultList().isEmpty());
        StubSaga loaded = (StubSaga) repository.load(identifier);
        loaded.end();
        repository.commit(loaded);

        entityManager.clear();

        assertNull(entityManager.find(SagaEntry.class, identifier));
        assertTrue(entityManager.createQuery("SELECT ae FROM AssociationValueEntry ae WHERE ae.sagaId = :id")
                                .setParameter("id", identifier)
                                .getResultList().isEmpty());

        uow.commit();
    }
View Full Code Here

        }
    }

    @Test
    public void testEventPublishedByListenerIsHandled() {
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        GenericEventMessage<Object> event = new GenericEventMessage<Object>("First",
                                                                            Collections.<String, Object>singletonMap(
                                                                                    "continue",
                                                                                    true));
        uow.publishEvent(event,
                         eventBus);
        verify(eventListener, never()).handle(isA(EventMessage.class));
        doAnswer(new Answer() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                CurrentUnitOfWork.get().publishEvent(new GenericEventMessage<String>("Second"), eventBus);
                return null;
            }
        }).when(eventListener).handle(event);
        uow.commit();
        verify(eventListener, times(2)).handle(isA(EventMessage.class));
    }
View Full Code Here

        }
    }

    @Test
    public void testUowRolledBackOnOuterRollback() {
        UnitOfWork outerUnit = new UnitOfWork() {

            private boolean started = false;
            private List<UnitOfWorkListener> listeners = new ArrayList<UnitOfWorkListener>();

            @Override
            public void commit() {
                for (UnitOfWorkListener listener : listeners) {
                    listener.onPrepareCommit(this,
                                             Collections.<AggregateRoot>emptySet(),
                                             Collections.<EventMessage>emptyList());
                    listener.afterCommit(this);
                    listener.onCleanup(this);
                }
                started = false;
                CurrentUnitOfWork.clear(this);
            }

            @Override
            public void rollback() {
                rollback(null);
            }

            @Override
            public void rollback(Throwable cause) {
                if (started) {
                    for (UnitOfWorkListener listener : listeners) {
                        listener.onRollback(this, cause);
                        listener.onCleanup(this);
                    }
                    started = false;
                    CurrentUnitOfWork.clear(this);
                }
            }

            @Override
            public void start() {
                CurrentUnitOfWork.set(this);
                started = true;
            }

            @Override
            public boolean isStarted() {
                return started;
            }

            @Override
            public boolean isTransactional() {
                return false;
            }

            @Override
            public void registerListener(UnitOfWorkListener listener) {
                this.listeners.add(listener);
            }

            @Override
            public <T extends AggregateRoot> T registerAggregate(T aggregateRoot, EventBus eventBus,
                                                                 SaveAggregateCallback<T> saveAggregateCallback) {
                return aggregateRoot;
            }

            @Override
            public void publishEvent(EventMessage<?> event, EventBus eventBus) {
            }

            @Override
            public void attachResource(String name, Object resource) {
            }

            @Override
            public void attachResource(String name, Object resource, boolean inherited) {
            }

            @Override
            public <T> T getResource(String name) {
                throw new UnsupportedOperationException("Not implemented");
            }

            @Override
            public void attachInheritedResources(UnitOfWork inheritingUnitOfWork) {
            }
        }; // This is a unit that does not extend from NestableUnitOfWork

        outerUnit.start();
        UnitOfWork middleUnit = DefaultUnitOfWork.startAndGet();
        UnitOfWork innerUnit = DefaultUnitOfWork.startAndGet();

        final Set<UnitOfWork> rolledBack = new HashSet<UnitOfWork>();
        final UnitOfWorkListenerAdapter listener = new UnitOfWorkListenerAdapter() {
            @Override
            public void onRollback(UnitOfWork unitOfWork, Throwable failureCause) {
                rolledBack.add(unitOfWork);
            }
        };
        final UnitOfWorkListener middleListener = mock(UnitOfWorkListener.class, "middleListener");
        final UnitOfWorkListener innerListener = mock(UnitOfWorkListener.class, "innerListener");
        final UnitOfWorkListener outerListener = mock(UnitOfWorkListener.class, "outerListener");

        outerUnit.registerListener(outerListener);
        middleUnit.registerListener(listener);
        innerUnit.registerListener(listener);
        middleUnit.registerListener(middleListener);
        innerUnit.registerListener(innerListener);

        innerUnit.commit();
        middleUnit.commit();

        verify(innerListener, never()).afterCommit(any(UnitOfWork.class));
        verify(middleListener, never()).afterCommit(any(UnitOfWork.class));
View Full Code Here

        assertFalse("Expected all UoW to have been cleared", CurrentUnitOfWork.isStarted());
    }

    @Test
    public void testResourceInheritance() {
        UnitOfWork outerUoW = DefaultUnitOfWork.startAndGet();
        outerUoW.attachResource("notInherited", "resourceA");
        outerUoW.attachResource("explicitlyNotInherited", "resourceA", false);
        outerUoW.attachResource("inherited", "resourceA", true);

        outerUoW.attachResource("inheritanceOverwritten", "resourceA", true);
        outerUoW.attachResource("inheritanceOverwritten", "resourceA");

        outerUoW.attachResource("inheritedAfterAll", "resourceA");
        outerUoW.attachResource("inheritedAfterAll", "resourceA", true);

        UnitOfWork innerUoW = DefaultUnitOfWork.startAndGet();
        assertNotNull(innerUoW.getResource("inherited"));
        assertNotNull(innerUoW.getResource("inheritedAfterAll"));
        assertNull(innerUoW.getResource("notInherited"));
        assertNull(innerUoW.getResource("explicitlyNotInherited"));
        assertNull(innerUoW.getResource("inheritanceOverwritten"));

        innerUoW.commit();
        outerUoW.commit();
    }
View Full Code Here

    }

    @SuppressWarnings({"unchecked"})
    @Test
    public void testStoreAndLoadNewAggregate() {
        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate originalAggregate = new JpaAggregate("Hello");
        repository.add(originalAggregate);
        uow.commit();

        entityManager.flush();
        entityManager.clear();
        List<JpaAggregate> results = entityManager.createQuery("SELECT a FROM JpaAggregate a").getResultList();
        assertEquals(1, results.size());
        JpaAggregate aggregate = results.get(0);
        assertEquals(originalAggregate.getIdentifier(), aggregate.getIdentifier());
        assertEquals(0, aggregate.getUncommittedEventCount());

        uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate storedAggregate = repository.load(originalAggregate.getIdentifier());
        uow.commit();
        assertEquals(storedAggregate.getIdentifier(), originalAggregate.getIdentifier());
        assertEquals((Long) 0L, originalAggregate.getVersion());
        assertTrue(capturedEvents.isEmpty());
    }
View Full Code Here

        entityManager.persist(agg);
        entityManager.flush();
        entityManager.clear();
        assertEquals((Long) 0L, agg.getVersion());

        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate aggregate = repository.load(agg.getIdentifier());
        aggregate.setMessage("And again");
        aggregate.setMessage("And more");
        uow.commit();

        assertEquals((Long) 1L, aggregate.getVersion());
        assertEquals(0L, aggregate.getUncommittedEventCount());
        assertEquals(2, capturedEvents.size());
        assertEquals(0L, capturedEvents.get(0).getSequenceNumber());
View Full Code Here

        entityManager.persist(agg);
        entityManager.flush();
        entityManager.clear();
        assertEquals((Long) 0L, agg.getVersion());

        UnitOfWork uow = DefaultUnitOfWork.startAndGet();
        JpaAggregate aggregate = repository.load(agg.getIdentifier());
        aggregate.setMessage("And again");
        aggregate.setMessage("And more");
        aggregate.delete();
        uow.commit();
        entityManager.flush();
        entityManager.clear();

        assertEquals(0L, aggregate.getUncommittedEventCount());
        assertEquals(2, capturedEvents.size());
View Full Code Here

TOP

Related Classes of org.axonframework.unitofwork.UnitOfWork

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.