Zadanie #1671

Obsługa notyfikacji websocketowych

Added by Michał Komar about 7 years ago. Updated over 6 years ago.

Status:RozwiązanyStart date:2017-05-10
Priority:NormalnyDue 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

Follows Jupiter - Zadanie #1670: Utworzenie serwisu wiadomości Rozwiązany 2017-05-09

Associated revisions

Revision 80bcb9e2
Added by Jarosław Bąbel almost 7 years ago

refs #1671 rozbudowanie stomp brokera ui do obsługi wielu callbacków na jednym topicu (wersja robocza)

Revision 73913a7c
Added by Jarosław Bąbel almost 7 years ago

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

Revision 643a8496
Added by Jarosław Bąbel almost 7 years ago

refs #1671 usunięcie elementów do ręcznego testowania komunikatów o zmianach dokumentów

Revision fc7a5ed2
Added by Jarosław Bąbel almost 7 years ago

refs #1671 uwspólnienie wysyłania po transakcji komunikatu o zmianie dokumentu, dodanie komunikatu do InternalDocumentStorage

Revision 538809ce
Added by Jarosław Bąbel almost 7 years ago

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

Revision 5c6002b3
Added by Jarosław Bąbel almost 7 years ago

refs #1671 wykorzystanie tokena autoryzacyjnego do rozpoznania komunikatu po akcji save

Revision ff21ad31
Added by Jarosław Bąbel almost 7 years ago

refs #1671 poprawka NullPointera w testach - wysyłanie komunikatu bez tokena autoryzacji

Revision 28bc4a70
Added by Jarosław Bąbel almost 7 years ago

refs #1671, #1670 poprawka NullPointera w testach - wysyłanie komunikatu bez autoryzacji, zmiana id rejestracji z sekwencji integerów na UUID

Revision 6dbe2208
Added by Michał Komar over 6 years ago

refs #1671: Poprawienie usuwania.

Dodatkowo poprawienie działania lazy-component i podpięcie go pod
edit-document.

Revision 7df7581c
Added by Michał Komar over 6 years ago

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.

Revision dbfe0aff
Added by Michał Komar over 6 years ago

refs #1671: Zsynchronizowanie wersji bwmety z synatem

Revision 979b4e6f
Added by Michał Komar over 6 years ago

refs #1671: Zsynchronizowanie wersji bwmety z synatem

History

#1 Updated by Michał Komar about 7 years ago

#2 Updated by Jarosław Bąbel almost 7 years ago

  • Status changed from Nowy to W toku

#3 Updated by Jarosław Bąbel almost 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 almost 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 almost 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 6 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 6 years ago

  • Status changed from Testowanie to Odpowiedź
  • Assignee changed from Łukasz Waśkiewicz to Wojtek Hury
PSJD
  • 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 6 years ago

  • Assignee changed from Wojtek Hury to Michał Komar

#9 Updated by Michał Komar over 6 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 6 years ago

  • Status changed from Testowanie to Rozwiązany
  • Assignee changed from Łukasz Waśkiewicz to Michał Komar

Also available in: Atom PDF