(포틀릿 개발 독서 노트) 포틀릿 인터랙티브 - 포틀릿 이벤트 사용

포틀릿 이벤트도 JSR-286(포틀릿 2.0에 새로 추가된 포틀릿 간의 상호작용 방식)이다. Public Render 매개 변수의 상호작용 방식보다 문자열이나 문자열 그룹에 국한되지 않고 큰 대상을 전달할 수 있고cache를 사용할 수 있다.포틀릿 세션보다 포틀릿 응용 프로그램의 포틀릿 상호작용을 지원합니다.
(나는 감탄: 역시 사건 구동의 사상이 사람들의 마음속에 깊이 파고들고 어디에도 없구나. 이미 무수한 곳에서 사건 구동의 강력한 능력을 보았구나)
 
단계1: 먼저 이벤트클래스를 정의합니다. 이 클래스는 Serializable 인터페이스를 실현해야 합니다. 원격 포틀릿 용기 안의 포틀릿에 의해 받아들여질 수 있기 때문에 네트워크에서 전송해야 하기 때문에 서열화되어야 합니다. 서열화된 방식은 JAXB로 이를 XML 문서로 전환한 다음에 네트워크에서 전송하는 것입니다.
이 @XmlRootElement은 이 이벤트가 포틀릿 용기에 xml 형식으로 발표될 것을 표시합니다

  
  
  
  
  1. import chapter11.code.listing.domain.Book; 
  2. import javax.xml.bind.annotation.XmlRootElement; 
  3. @XmlRootElement 
  4. public class BookAddedEvent implements Serializable
  5. private static final long serialVersionUID = ... 
  6. private String name; 
  7. private String author; 
  8. private Long isbnNumber; 
  9. private String category; 
  10. public BookAddedEvent() { 
  11. //-- do nothing 
  12. public BookAddedEvent(Book book) { 
  13. this.name = book.getName(); 
  14. this.author = book.getAuthor(); 
  15. this.category = book.getCategory(); 
  16. this.isbnNumber = book.getIsbnNumber(); 
  17. ... 


그런 다음 이 Book에 추가된 이벤트는 다음과 같은 XML 서열화된 문서로 변경되어 네트워크에 전송됩니다.

  
  
  
  
  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
  2. <bookAddedEvent> 
  3. <author>Ramnivas Laddad</author> 
  4. <category>Java</category> 
  5. <isbnNumber>1933988053</isbnNumber> 
  6. <name>AspectJ in Action, Second Edition</name> 
  7. </bookAddedEvent> 

 
2단계 2: 보낸 사람 포틀릿의 방법에 이벤트 객체를 추가합니다.

  
  
  
  
  1. public class BookCatalogPortlet extends GenericPortlet { 
  2. @ProcessAction(name = "addBookAction"
  3. public void addBook(...)... { 
  4. ... 
  5. Book book = new Book(category, name, author, Long 
  6. .valueOf(isbnNumber)); 
  7. // bookService addBook
  8. bookService.addBook(book); 
  9. // , QualifiedName ( )
  10. QName eventName = new QName( 
  11. "http://www.mynamespace.com""bookAddedEvent" 
  12. ); 
  13. // response , Event Event QName
  14. response.setEvent(eventName, new BookAddedEvent(book); 
  15. ... 

 
3단계:portlet.xml의 에서 이portlet이 지원하는 발표 이벤트를 설명하고,portlet 응용 단계에서 발표된 이벤트를 현시적으로 정의합니다 (이벤트의 qname는 구체적인 이벤트 종류와 연결됩니다)

  
  
  
  
  1. <portlet-app...> 
  2. <portlet> 
  3. <portlet-name>bookCatalog</portlet-name> 
  4. <portlet-class> 
  5. chapter11.code.listing.base.BookCatalogPortlet 
  6. </portlet-class> 
  7. ... 
  8. <supported-publishing-event> 
  9. <qname xmlns:n="http://www.mynamespace.com"> 
  10. n:bookAddedEvent</qname> 
  11. </supported-publishing-event> 
  12. </portlet> 
  13. <event-definition> 
  14. <qname xmlns:n="http://www.mynamespace.com"> 
  15. n:bookAddedEvent</qname> 
  16. <value-type>chapter11.code.listing.base. 
  17. BookAddedEvent</value-type> 
  18. </event-definition> 
  19. ... 
  20. </portlet-app> 

 
단계 4;수신자 포틀릿에서 이벤트에서 필요한 내용을 코드로 표시하고 처리합니다.
 

  
  
  
  
  1. public class RecentlyAddedBookPortlet extends GenericPortlet ... 
  2.  
  3. @ProcessEvent(qname= 
  4.  
  5. "{http://www.mynamespace.com}bookAddedEvent"
  6.  
  7. public void processAddedBookEvent(EventRequest 
  8.  
  9. request, EventResponse eventResponse) throws...{ 
  10.  
  11. Event event = request.getEvent(); 
  12.  
  13. BookAddedEvent bookAddedEvent = 
  14.  
  15. (BookAddedEvent)event.getValue(); 
  16.  
  17. eventResponse.setRenderParameter("category"
  18.  
  19. bookAddedEvent.getCategory()); 
  20.  
  21. eventResponse.setRenderParameter("name"
  22.  
  23. bookAddedEvent.getName()); 
  24.  
  25. eventResponse.setRenderParameter("author"
  26.  
  27. bookAddedEvent.getAuthor()); 
  28.  
  29. eventResponse.setRenderParameter("isbnNumber"
  30.  
  31. String.valueOf(bookAddedEvent.getIsbnNumber())); 
  32.  
  33.  

 
5단계: 수신자 포틀릿의portlet.xml에서 이 포틀릿이 처리할 수 있는 이벤트를 정의합니다 :
 

  
  
  
  
  1. <portlet-app...> 
  2. <portlet> 
  3. <portlet-name>recentBook</portlet-name> 
  4. <portlet-class> 
  5. chapter11.code.listing.base.RecentlyAddedBookPortlet 
  6. </portlet-class> 
  7. ... 
  8.  
  9. <supported-processing-event> 
  10. <qname xmlns:n="http://www.mynamespace.com"> 
  11. n:bookAddedEvent</qname> 
  12. </supported-processing-event> 
  13. </portlet> 
  14. <event-definition> 
  15. <qname xmlns:n="http://www.mynamespace.com"> 
  16. n:bookAddedEvent</qname> 
  17. <value-type>chapter11.code.listing.base. 
  18. BookAddedEvent</value-type> 
  19. </event-definition> 
  20. ... 
  21. </portlet-app> 

좋은 웹페이지 즐겨찾기