2

I have implemented post insert and post update event listeners using hibernate integrator. And listeners are working as expected. I need to call a service whenever that event is triggered, So I autowired that service and it is null. What am I missing here? My integrator

public class EntityIntegrator implements Integrator {

    public static final EntityIntegrator INSTANCE = new EntityIntegrator();

    @Override
    public void integrate(Metadata metadata, SessionFactoryImplementor sessionFactory,
                          SessionFactoryServiceRegistry serviceRegistry) {

        final EventListenerRegistry eventListenerRegistry =
                serviceRegistry.getService(EventListenerRegistry.class);
        EntityEventListener listener = new EntityEventListener();

        eventListenerRegistry.appendListeners(
                EventType.POST_INSERT,
                listener
        );

        eventListenerRegistry.appendListeners(
                EventType.POST_UPDATE,
                listener
        );
    }

    @Override
    public void disintegrate(SessionFactoryImplementor sessionFactory,
                             SessionFactoryServiceRegistry serviceRegistry) {
    }
}

Property Configurer class -

@Configuration public class PropertyConfigurer implements HibernatePropertiesCustomizer {

@Override
public void customize(Map<String, Object> hibernateProperties) {
    hibernateProperties.put("hibernate.integrator_provider",
            (IntegratorProvider) () -> Collections.singletonList(EntityIntegrator.INSTANCE));
} }

Listener Implementation.

@Service
public class EntityEventListener implements PostInsertEventListener, PostUpdateEventListener {

    Logger logger = LogManager.getLogger(EntityEventListener.class);

    @Autowired
    CommonService commonService ;

    /**
     * To handle any operations to be done post insert.
     */
    @Override
    public void onPostInsert(PostInsertEvent event) {

        if(event.getEntity() instanceof EntityClass)
        {
            commonservice.test((EntityClass) event.getEntity()); //commonService is null
        }
    
    }

    /**
     * To handle any operations to be done post update.
     */
    @Override
    public void onPostUpdate(PostUpdateEvent event) {
        logger.info("Inside post update event : {}" , event.getEntity().getClass().getName());
        if(event.getEntity() instanceof WalletTransaction)
        {

        }
    }

    @Override
    public boolean requiresPostCommitHanding(EntityPersister persister) {
        return false;
    }
}

New to spring boot pardon if I am doing anything terribly wrong

Ashok Cj
  • 21
  • 2

0 Answers0