Отправка объекта + сообщение через веб-сокет при изменении базы данных - PullRequest
0 голосов
/ 31 января 2019

Я использую hibernate и JpaRepository + PostgreSQL.У меня есть следующий код, который слушает любые изменения, внесенные в базу данных.

public class PermitEntityListener {

    @PrePersist
    public void prePersist(Permit target) {
        perform(target, INSERTED);
    }

    @PreUpdate
    public void preUpdate(Permit target) {
        perform(target, UPDATED);
    }

    @PreRemove
    public void preRemove(Permit target) {
        perform(target, DELETED);
    }

    @Transactional(MANDATORY)
    private void perform(Permit target, Action action) {
        EntityManager entityManager = BeanUtil.getBean(EntityManager.class);
        entityManager.persist(new PermitHistory(target, action));
        //Send permitHistory to client via websocket to update changes
        PermitUpdates updates = new PermitUpdates();
        updates.sendUpdatedPermit(new PermitHistory(target, action));
    }
}

В методе выполнения это - то, где сделанные изменения будут обновлены в новую таблицу.На данный момент, я хочу также отправить эту «PermitHistory» обратно пользователю через веб-сокет.Это связано с тем, что когда пользователь изменяет / просматривает таблицу, на стороне клиента он сможет получать подсказку о внесении новых изменений в поля, чтобы он мог выбрать обновление для отображения обновлений.

Редактировать: я создал новый класс "PermitUpdates"

public class PermitUpdates {

    @Autowired
    private SimpMessagingTemplate template;

    public void sendUpdatedPermit(PermitHistory permitHistory) {
        if (permitHistory != null) {
            this.template.convertAndSend("/changes", permitHistory);
        }
    }
}

Я также добавил класс WebSocketConfig

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/changes");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket").withSockJS();
    }

}

При этом произошла новая ошибка:

Caused by: java.lang.NullPointerException
    at com.example.historical.websoc.PermitUpdates.sendUpdatedPermit(PermitUpdates.java:19)

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...