Dave
Dave

Reputation: 19250

Wny am I getting "java.lang.IllegalStateException: No TransactionalEventListener annotation"?

I'm using Spring 4.3.8.RELEASE with Hibernate 5.1.5.Final. I want to have a method executed after another another transaction completes. That transaction is defined below

@Service("organizationService")
@Transactional
public class OrganizationServiceImpl implements OrganizationService, ApplicationEventPublisherAware
{

    private ApplicationEventPublisher publisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher publisher) 
    {
        this.publisher = publisher;
    }

    @Override
    public void save(Organization organization)
    {
    ...

        // sync data with ThirdParty but only if something has definitelychanged on the SB
        // side, in which case we want to send ThirdParty an update.
        if (!hasSameAttributes)
        {
            publisher.publishEvent(new ThirdPartyOrganizationEvent(organization.getId()));
        }   // if
    }   // save

So here is the method that I want executed after the above transaction completes ...

@Service
public class ThirdPartyAPIServiceImpl implements ThirdPartyAPIService 
{

    @Override
    @TransactionalEventListener
    public boolean updateOrg(final ThirdPartyOrganizationEvent thirdPartyOrgEvent)
    {
        ...
    }

But when I load my application context I get this error

Caused by: java.lang.IllegalStateException: No TransactionalEventListener annotation found on method: public abstract boolean org.mainco.subco.myproject.service.ThirdPartyAPIService.updateOrg(org.mainco.subco.myproject.domain.ThirdPartyOrganizationEvent)
    at org.springframework.transaction.event.ApplicationListenerMethodTransactionalAdapter.<init>(ApplicationListenerMethodTransactionalAdapter.java:55)
    at org.springframework.transaction.event.TransactionalEventListenerFactory.createApplicationListener(TransactionalEventListenerFactory.java:55)
    at org.springframework.context.event.EventListenerMethodProcessor.processBean(EventListenerMethodProcessor.java:159)
    at org.springframework.context.event.EventListenerMethodProcessor.afterSingletonsInstantiated(EventListenerMethodProcessor.java:104)
    ... 34 more

Wbat do I need to do to get this configured properly?

Upvotes: 0

Views: 1060

Answers (1)

ghost28147
ghost28147

Reputation: 558

Defining @TransactionalEventListener on interface method rather then on method implementing interface worked for me.

Upvotes: 1

Related Questions