StudyService.java
eventPublisher 를 통해 event 를 던짐! 4개의 이벤트를 4곳에서 StudyUpdateEvent를 던지도록 하였음, 그리고 이에 대한 처리로 StudyEventListener을 구현하면 된다.
이벤트 리스너란 이벤트가 발생했을 때 그 처리를 담당하는 함수를 가리키며, 이벤트 핸들러(event handler)라고도 한다.
handleStudyUpdateEvent
스터디를 조회해 와야 하는데, 어떤 데이터를 조회해야 하는지 잘 생각해 봐야 한다. 알림을 보낼 대상이 스터디의 관리자들과 멤버들이다. 매니저와 멤버를 같이 가져오는 게 필요, 없으므로 구현 findStudyWithManagersAndMemebersById
EntityGraph 그래프를 만들 때 아래와 같이 매번 이름을 정의해서 만들었다. 사실 이렇게 할 필요가 없다.
Study.java
@NamedEntityGraph(name = "Study.withAll", attributeNodes = {
@NamedAttributeNode("tags"),
@NamedAttributeNode("zones"),
@NamedAttributeNode("managers"),
@NamedAttributeNode("members")})
@NamedEntityGraph(name = "Study.withTagsAndManagers", attributeNodes = {
@NamedAttributeNode("tags"),
@NamedAttributeNode("managers")})
@NamedEntityGraph(name = "Study.withZonesAndManagers", attributeNodes = {
@NamedAttributeNode("zones"),
@NamedAttributeNode("managers")})
@NamedEntityGraph(name = "Study.withManagers", attributeNodes = {
@NamedAttributeNode("managers")})
@NamedEntityGraph(name = "Study.withMembers", attributeNodes = {
@NamedAttributeNode("members")})
@NamedEntityGraph(name = "Study.withTagsAndZones", attributeNodes = {
@NamedAttributeNode("tags"),
@NamedAttributeNode("zones")})
이 방법은 이 이름에 해당하는 EntityGraph를 자주 사용 혹은 여러 곳에서 사용할 때 쓰는 방법이다. 사실 우리는 이름에 해당하는 Entity를 한 곳에서만 각각 사용하고 있기 때문에 단순하게 변경해줘도 된다. 또한 기본 EntityGrap type이 FETCH이다.
좀더 general 한 createNotification method 이름으로 바꿔준다.
스터디 변경을 해줌, 이번에는 알림이 리다이렉트만 헤도 보인다. (아이콘) 리다이렉트 되기 전에 Notification date를 넣음..
스터디 소개를 수정했다는 알림이 뜨는 것을 볼 수 잇다.
출처 : 인프런 백기선님의 스프링과 JPA 기반 웹 애플리케이션 개발
http://www.tcpschool.com/javascript/js_event_eventListenerRegister