Zadanie #1671
Obsługa notyfikacji websocketowych
Status: | Rozwiązany | Start date: | 2017-05-10 | |
---|---|---|---|---|
Priority: | Normalny | Due date: | 2017-05-10 | |
Assignee: | Michał Komar | % Done: | 100% | |
Category: | backend | |||
Target version: | 0.3 | |||
Developer: | Michał Komar | Tester: | Łukasz Waśkiewicz |
Description
Należy dodać wyświetlania informacji o tym, że element został zmieniony + uniemożliwienie zapisania takiego elementu w momencie, gdy przyjdzie komunikat poprzez websocket o modyfikacji dokumentu, na którym aktualnie się znajdujemy. Komunikat może być wyświetlony za pomocą md-snackbar.
Ponadto należy dodać wysyłanie eventów poprzez websockety, gdy zmiana zostanie wykonana przez backend. W tym celu należy skorzystać z serwisu notyfikacji, w którym uprzednio powinien zostać zarejestrowany odbiorca wysyłający wiadomości do websocketów. Wiadomości o zapisaniu elementu nie powinny być persystowalne.
Related issues
Associated revisions
refs #1671 rozbudowanie stomp brokera ui do obsługi wielu callbacków na jednym topicu (wersja robocza)
refs #1671 komunikat i blokada możliwości zapisu po otrzymaniu komunikatu i zmianie edytowanego dokumentu, możliwość wczytania zmian, ignorowanie komunikatu związanego z savem wykonanym przez użytkownika
refs #1671 usunięcie elementów do ręcznego testowania komunikatów o zmianach dokumentów
refs #1671 uwspólnienie wysyłania po transakcji komunikatu o zmianie dokumentu, dodanie komunikatu do InternalDocumentStorage
refs #1671 poprawki do obsługi komunikatów:websocketowych
- naprawa brokera - usunięcie wielokrotnych rejestracji
- odrębna obsługa komunikatu o usunięciu dokumentu
- chowanie komunikatu po wczytaniu nowego dokumentu
- próba naprawienia tree.expandNodes() - błąd nie leci, ale nowe elementy nie są dodawane do dodanych bez odświeżenia drzewa
- poprawki do publikowania komunikatów po transakcji związanej ze zmianą lub usuwaniem dokumentu InternalStorage
- poprawka do drzewa przy dodawaniu czasopisma (id=dataset zamiast id=parentId)
...inne poprawki w okolicach odbioru komunikatów i wyswietlania drzewa
refs #1671 wykorzystanie tokena autoryzacyjnego do rozpoznania komunikatu po akcji save
refs #1671 poprawka NullPointera w testach - wysyłanie komunikatu bez tokena autoryzacji
refs #1671: Poprawienie usuwania.
Dodatkowo poprawienie działania lazy-component i podpięcie go pod
edit-document.
refs #1671: Poprawienie usuwania.
Dodanie przesłonki do usuwania dokumentów. Dodanie przesłonki na całej
aplikacji -> dostęp do przesłonki poprzez BusyService.
refs #1671: Zsynchronizowanie wersji bwmety z synatem
refs #1671: Zsynchronizowanie wersji bwmety z synatem
History
#1 Updated by Michał Komar almost 8 years ago
- Follows Zadanie #1670: Utworzenie serwisu wiadomości added
#2 Updated by Jarosław Bąbel over 7 years ago
- Status changed from Nowy to W toku
#3 Updated by Jarosław Bąbel over 7 years ago
- Status changed from W toku to Testowanie
- Assignee changed from Jarosław Bąbel to Michał Komar
W szczególności zwróć proszę uwagę na mechanizm rozpoznawania komunikatów generowanych przez własny save.
W edit-document.save() jest próba pobrania lub odświeżenia auth token tuż przed requestem document/save. Jeżeli request zostanie wysłany z innym tokenem autoryzacyjnym, to save nie zostanie rozpoznany jako własny i na stronie pojawi się komunikat i blokada edycji.
#4 Updated by Michał Komar over 7 years ago
- Status changed from Testowanie to Odpowiedź
- Assignee changed from Michał Komar to Jarosław Bąbel
Nie wydaje mi się, żeby należało wysyłać message na deleteDocumentById w InternalDocumentStorageServiceImpl.
Ten delete leci po udanej publikacji, w momencie, gdy nie potrzebujemy już elementu w jupiterze. Może warto by wysyłać trochę inny komunikat -> dokument nie jest de facto usuwany z systemu. Trzeba jednak koniecznie go odświeżyć. Wydaje mi się, że zwykła informacja o modyfikacji dokumentu byłaby wystarczająca.
#5 Updated by Michał Komar over 7 years ago
- Status changed from Odpowiedź to W toku
- Assignee changed from Jarosław Bąbel to Michał Komar
- Developer Michał Komar added
- Tester Łukasz Waśkiewicz added
#6 Updated by Michał Komar over 7 years ago
- Status changed from W toku to Testowanie
- Assignee changed from Michał Komar to Łukasz Waśkiewicz
- % Done changed from 0 to 100
Po ostatnich poprawkach wykonanych przez @whury wygląda na to, że wszystkie problemy zostały rozwiązane i można testować.
#7 Updated by Łukasz Waśkiewicz over 7 years ago
- Status changed from Testowanie to Odpowiedź
- Assignee changed from Łukasz Waśkiewicz to Wojtek Hury
- nie można skasować zasobu (bwmeta1.element.psjd-cc2d597d-085d-408e-b613-420787e736cc)
org.springframework.jms.support.converter.MessageConversionException: Cannot convert object of type [pl.edu.icm.jupiter.services.api.model.messaging.DocumentModificationMessage] to JMS message. Supported message payloads are: String, byte array, Map<String,?>, Serializable object. at org.springframework.jms.support.converter.SimpleMessageConverter.toMessage(SimpleMessageConverter.java:78) at org.springframework.jms.support.converter.MessagingMessageConverter.createMessageForPayload(MessagingMessageConverter.java:134) at org.springframework.jms.support.converter.MessagingMessageConverter.createMessageForPayload(MessagingMessageConverter.java:148) at org.springframework.jms.support.converter.MessagingMessageConverter.toMessage(MessagingMessageConverter.java:101) at org.springframework.jms.core.JmsMessagingTemplate$MessagingMessageCreator.createMessage(JmsMessagingTemplate.java:437) at org.springframework.jms.core.JmsTemplate.doSend(JmsTemplate.java:593) at org.springframework.jms.core.JmsTemplate$4.doInJms(JmsTemplate.java:574) at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:484) at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:570) at org.springframework.jms.core.JmsMessagingTemplate.doSend(JmsMessagingTemplate.java:334) at org.springframework.jms.core.JmsMessagingTemplate.send(JmsMessagingTemplate.java:191) at org.springframework.jms.core.JmsMessagingTemplate.convertAndSend(JmsMessagingTemplate.java:218) at org.springframework.jms.core.JmsMessagingTemplate.convertAndSend(JmsMessagingTemplate.java:203) at org.springframework.jms.core.JmsMessagingTemplate.convertAndSend(JmsMessagingTemplate.java:196) at pl.edu.icm.jupiter.services.messaging.JmsMessagingComponent.sendMessage(JmsMessagingComponent.java:18) at pl.edu.icm.jupiter.services.storage.StorageMessagingImpl$1.afterCommit(StorageMessagingImpl.java:44)
- nie można zapisać zasobu (bwmeta1.element.psjd-cc2d597d-085d-408e-b613-420787e736cc)
08:45:06.468 [http-nio-8080-exec-4] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException: null at pl.edu.icm.jupiter.services.storage.DocumentStateMachineServiceImpl.sendEvent(DocumentStateMachineServiceImpl.java:39) at pl.edu.icm.jupiter.services.storage.DocumentStateMachineServiceImpl.sendEvent(DocumentStateMachineServiceImpl.java:32) at pl.edu.icm.jupiter.services.storage.DocumentStateMachineServiceImpl$$FastClassBySpringCGLIB$$da2b09f7.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) at net.bull.javamelody.MonitoringSpringInterceptor.invoke(MonitoringSpringInterceptor.java:73) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) at pl.edu.icm.jupiter.services.storage.DocumentStateMachineServiceImpl$$EnhancerBySpringCGLIB$$b9faf16f.sendEvent(<generated>) at pl.edu.icm.jupiter.services.storage.DocumentStorageServiceImpl.save(DocumentStorageServiceImpl.java:84)
#8 Updated by Michał Komar over 7 years ago
- Assignee changed from Wojtek Hury to Michał Komar
#9 Updated by Michał Komar over 7 years ago
- Status changed from Odpowiedź to Testowanie
- Assignee changed from Michał Komar to Łukasz Waśkiewicz
Można już zapisywać i usuwać.
#10 Updated by Łukasz Waśkiewicz over 7 years ago
- Status changed from Testowanie to Rozwiązany
- Assignee changed from Łukasz Waśkiewicz to Michał Komar