Я использую 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)
Что я делаю не так?