mdb.jsp
001 <!-- ----------------------------------------------------------------------- -->
002 <!-- MDB sample page -->
003 <!-- ----------------------------------------------------------------------- -->
004 <HTML>
005 <HEAD>
006   <%page import="examples.ejb.ejb30.domain.Book,
007                    examples.ejb.ejb30.domain.Review,
008                    examples.ejb.ejb30.domain.Reviewer,
009                    examples.ejb.ejb30.service.ReviewService,
010                    javax.naming.Context,
011                    javax.naming.InitialContext"
012            errorPage="exception.jsp" %>
013   <%page import="java.util.List" %>
014   <%page import="java.util.Random" %>
015   <%page import="examples.ejb.ejb30.web.Constants"%> <link href="sample.css" rel="stylesheet">
016 </HEAD>
017 
018 <BODY>
019 <%include file="header.html" %>
020 
021 <%
022   String SERVICE_NAME = "ReviewManagerBean";
023   ReviewService service = (ReviewServicesession.getAttribute(SERVICE_NAME);
024   if (service == null) {
025     Context ctx = new InitialContext();
026     service = (ReviewServicectx.lookup("java:comp/env/ejb/ReviewManager");
027     session.setAttribute(SERVICE_NAME, service);
028   }
029 %>
030 
031 
032 <HR>
033 
034 
035 <%
036   java.util.Random random = new Random(System.currentTimeMillis());
037   // randomly select a book.
038   List<Book> books = service.getAll(Book.class);
039   if (books == null || books.isEmpty()) {
040     out.println("Found no book in the database");
041     return;
042   }
043   Book book = books.get(random.nextInt(books.size()));
044 
045   //randomly select a subscriber for the current session.
046   List<Reviewer> reviewers = service.getAll(Reviewer.class);
047   if (reviewers == null || reviewers.isEmpty()) {
048     out.println("Found no book in the database");
049     return;
050   }
051   String watcherName = (Stringsession.getAttribute("watcher");
052   Reviewer watcher = null;
053   if (watcherName == null) {
054     watcher = reviewers.get(random.nextInt(reviewers.size()));
055     session.setAttribute("watcher", watcher.getName());
056   else {
057     watcher = service.getReviewer(watcherName,false);
058   }
059 
060   //randomly select a reviewer differnt from the subscriber.
061   int index = random.nextInt(reviewers.size());
062   Reviewer reviewer = reviewers.get(index);
063   if(reviewer.getName().equals(watcherName)){
064      reviewer = reviewers.get((index+1)/reviewers.size());
065   }
066 
067   //let the subscriber watchs new reivews on the given item.
068   service.subscribe(watcher.getName(), book.getId());
069   //let the review make a review on the same book.
070   Review newReview = service.newReview(reviewer, book, 3"it's a good book ( a review only for testing made by "+reviewer.getName()+" ).");
071 
072 
073   Thread.sleep(1000 10);
074   List<Review> myReviews = service.getFeededReviews(watcher.getName());
075 %>
076 <p>
077 
078   This example demonstrates the simplied Message Driven Bean programming model in EJB3.0.<BR/> <BR/>
079   A randomly selected reviewer '<%=watcher.getName()%>'  first subsribes new reviews on a randomly selectd book '<%=book.getTitle()%>';
080   Another randomly reviewer <%=reviewer.getName()%> adds a review on the selected book '<%=book.getTitle()%>'.<BR/><BR/>
081   ReviewerManagerBean persists the Review into database and sends a JMS message carrying the review id into JMS queue.<BR/><BR/>
082   The <a href="<%=Constants.JAVA_SOURCE_BASE_DIR%>/mdb/WatchProcessMDB.html">WatchProcessMDB</a> feeds the newly added reviews into all subscribers of '<%=book.getTitle()%>'. <BR/><BR/>
083   Then all <%=watcher.getName()%>'s feeds is listed below.The new feed is highlighted. <BR/>
084 <HR>
085 <CENTER>
086   <BR>
087 
088   <TABLE  id="feeds-table" CELLPADDING="2" CELLSPACING="2" WIDTH="100%">
089     <TR>
090       <TH ALIGN="LEFT" WIDTH="20%">Reviwer</TH>
091       <TH ALIGN="LEFT" WIDTH="25%">Title</TH>
092       <TH ALIGN="LEFT" WIDTH="15%">Score</TH>
093       <TH ALIGN="LEFT" WIDTH="40%">Comments</TH>
094     </TR>
095 
096     <%
097       int k = 0;
098       for (Review myRev : myReviews) {
099         StringBuffer sb = new StringBuffer();
100         String style   = (k++%2==0"spec" "specalt";
101         if(myRev.getId()==newReview.getId()) {
102           style = "highlighted";
103         }
104         sb.append("<TR CLASS='").append(style).append("'><TD>").append(myRev.getReviewer().getName());
105         sb.append("</TD><TD>").append(myRev.getReviewed().getTitle());
106         sb.append("</TD><TD ALIGN='RIGHT'>").append(myRev.getRating());
107         sb.append("</TD><TD>").append(myRev.getComment()).append("</TD></TR>");
108         out.println(sb);
109       }
110     %>
111 
112   </TABLE>
113 
114 </CENTER>
115 </BODY>
116 </HTML>