1. Trang chủ
  2. » Công Nghệ Thông Tin

Thực hành EJB (Enterprise Java Bean) Lab 6 + 7

27 242 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Enterprise Application Development in Java EE Lab 06 - 07 Introduction to Messaging Interceptors and Dependency Injection Mục tiêu - Tạo gửi message đến JMS Resource - Client nhận message lưu trữ JMS Resource - Tạo cấu hình Interceptors - Thực thi Interceptors Phần I Bài tập step by step Bài 4.1 Xây dựng JSF Web Application đặt lịch họp thông báo đến tất thành viên lịch họp Step 1: Tạo JSF Web Application tên MeetingMessenger  File  New  Java Web  WebApplication  Name and Location: Project Name  MeetingMessenger  Frameworks: JavaServer Faces Step 2: Tạo JMS Resource  RC MeetingMessenger  New  GlassFish  JMS Resource IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE  Sau hồn thành, JMS Resource tạo thơng tin lưu file glassfish-resources.xml  Glassfish-resources.xml Step 3: Tạo JMS Connection Factory IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE  RC MeetingMessenger  New  GlassFish  JMS Resource IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE  Sau hoàn thành, Một JMS Resource Connection Factory tạo thông tin lưu file glassfish-resource.xml Step 4: Tạo JSF Managed Bean đặt tên JMSProducerBean package bean  RC Source Packages  New  JavaServer Faces  JSF Managed Bean IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE  Viết code JMSProducerBean.java package bean; IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE import javax.annotation.Resource; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; import javax.faces.context.FacesContext; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.InitialContext; import javax.naming.NamingException; /** * * @author Quang */ @ManagedBean @RequestScoped public class JMSProducerBean { //Them meetingMessQueue reference den jms/meetingMessQueue @Resource(mappedName = "jms/meetingMessQueue") private Queue meetingMessQueue; //Khai bao message truyen thong bao private String message; public JMSProducerBean() { } //Getter and setter public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } //phuong thuc send message public void send() throws NamingException, JMSException { InitialContext initContext = new InitialContext(); FacesContext facesContext = FacesContext.getCurrentInstance(); ConnectionFactory factory = (ConnectionFactory) initContext.lookup("jms/meetingMessQueueFactory"); Destination destination = (Destination) initContext.lookup("jms/meetingMessQueue"); initContext.close(); //Tao cac doi tuong JMS Connection connection = factory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer sender = session.createProducer(destination); //Gui message TextMessage msg = session.createTextMessage(message); IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE sender.send(msg); FacesMessage facesMessage = new FacesMessage("Message sent: " + message); facesMessage.setSeverity(FacesMessage.SEVERITY_INFO); facesContext.addMessage(null, facesMessage); } Step 5: Tạo form gửi message index.xhtml Home Step 6: Build and Run Application Step 7: Kiểm tra JMS Resource lưu trữ Server  Services  Servers  GlassFish Server  View Domain Admin Console  Common Tasks  Server (Admin Server) JMS Physical Destinations IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE IT Research Department @BKAP 2015 Page / 27 Enterprise Application Development in Java EE Step 8: Tạo EJBModule để nhận message từ JMS Resource IT Research Department @BKAP 2015 Page 10 / 27 Enterprise Application Development in Java EE  JMSConsumerBean.java package bean; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** * * @author Quang */ @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "jms/meetingMessQueue") }) public class JMSConsumerBean implements MessageListener { public JMSConsumerBean() { } @Override public void onMessage(Message message) { if (message instanceof TextMessage) { TextMessage msg = (TextMessage) message; try { System.out.println("Received message: " + msg.getText()); } catch (JMSException ex) { Logger.getLogger(JMSConsumerBean.class.getName()).log(Level.SEVERE, null, ex); } } else { System.out.println("Message of wrong type: " + message.getClass().getName()); } } } Step 10: Deploy Application IT Research Department @BKAP 2015 Page 13 / 27 Enterprise Application Development in Java EE Bài 4.2 Xây dựng ứng dụng chat gồm room chat để user join vào room chat tính số lượng user join vào phòng Step 1: Tạo ứng dụng Enterprise với tên ChatApplication  File  New Project  Java EE  Enterprise Application  Name: ChatApplication  Server and Settings  Server: GlassFish Server  Create EJB Module  Create Web Application Module  Sau hoàn thành: Step 2: Tạo lớp java ChatRoomStats package data để quản lý phòng chat, số người phòng chat, thời gian tham gia phòng chat  ChatApplication-ejb  New  Other  JavaJava Class IT Research Department @BKAP 2015 Page 14 / 27 Enterprise Application Development in Java EE  ChatRoomStats.java package data; /** * * @author Quang */ public class ChatRoomStats { //Khai bao ten phong chat la bien chatRoom private String chatRoom; //Khai bao so luong nguowi phong chat la bien personCount private int personCount; //Khai bao so thoi gian tham gia phong chat la bien totalTime private long totalTime; //Tao constructor public ChatRoomStats(String chatRoom) { this.chatRoom = chatRoom; } //Getter va Setter cac bien public String getChatRoom() { return chatRoom; } public void setChatRoom(String chatRoom) { this.chatRoom = chatRoom; } public int getPersonCount() { return personCount; } public void setPersonCount(int personCount) { this.personCount = personCount; } public long getTotalTime() { return totalTime; } public void setTotalTime(long totalTime) { this.totalTime = totalTime; } //Phuong thuc tang so luong nguoi tham gia phong chat co nguoi join vao public void increment() { this.personCount += 1; } //Phuong thuc tinh so thoi gian tham gia public void increaseTotalTime(long time) { this.totalTime += time; IT Research Department @BKAP 2015 Page 15 / 27 Enterprise Application Development in Java EE } } Step 3: Tạo lớp java ApplicationStats package datatrên sở Singleton pattern để khởi tạo đối tượng ChatRoomStats  ChatApplication-ejb  New  Other  JavaJava Class  ApplicationStats.java package data; import java.util.ArrayList; import java.util.List; /** * * @author Quang */ public class ApplicationStats { //Khai bao bien Singleton private static ApplicationStats instance; //Khai bao danh sach ChatRoomStats private static List chatRoomStats = new ArrayList(); //Constructor public ApplicationStats() { } //Phuong thuc khoi tao instance public static ApplicationStats getInstance() { if (instance == null) { instance = new ApplicationStats(); } return instance; } //Phuong thuc tinh so nguoi chat public void inscrementCount(String chatRoom){ for (ChatRoomStats room : chatRoomStats) { if (room.getChatRoom().equals(chatRoom)) { room.increment(); break; } } } //Phuong thuc tinh so nguoi chat thoi gian public void recordTime(String chatRoom, long time){ for (ChatRoomStats room : chatRoomStats) { if (room.getChatRoom().equals(chatRoom)) { room.increaseTotalTime(time); break; IT Research Department @BKAP 2015 Page 16 / 27 Enterprise Application Development in Java EE } } } //Phuong thuc get List Chat Room public List getChatRoomStats(){ return chatRoomStats; } } Step 4: Tạo Session Bean Singleton Sesion Bean tên ChatRoomBean package beanpack  Tạo phương thức joinChatRoom ChatRoomBean.java để tạo random Thread sleep package beanpack; import javax.ejb.Singleton; import javax.ejb.LocalBean; /** * * @author Quang */ @Singleton IT Research Department @BKAP 2015 Page 17 / 27 Enterprise Application Development in Java EE @LocalBean public class ChatRoomBean { public void joinChatRoom(String chatRoom) { try { Thread.sleep((long) (1 + (Math.random() * 1000))); } catch (Exception e) { System.out.println("New person joined the Chat Room " + chatRoom); } } public List getChatRoomStats() { return ApplicationStats.getInstance().getChatRoomStats(); } } Step 5: Tạo lớp Interceptor có tên ChatRoomInterceptor package interceptorpack  ChatRoomInterceptor.java package interceptorpack; import data.ApplicationStats; import data.ChatRoomStats; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; IT Research Department @BKAP 2015 Page 18 / 27 Enterprise Application Development in Java EE import javax.interceptor.InvocationContext; /** * * @author Quang */ public class ChatRoomInterceptor { //Phuong thuc xu ly truoc khoi tao session bean @PostConstruct public void initialiseChatRoom(InvocationContext context) { System.out.println("PostConstruct - initialising Chat Rooms"); List list = ApplicationStats.getInstance().getChatRoomStats(); //Them cac phong chat vao list list.add(new ChatRoomStats(("Business"))); list.add(new ChatRoomStats("Family")); } //Phuong thuc xu ly truong huy session bean @PreDestroy public void preDestroy(InvocationContext context) { System.out.println("PreDestroy - Clearing Chat Room"); ApplicationStats.getInstance().getChatRoomStats().clear(); } } Step 6: Tạo lớp java có tên HitCounterInterceptor package interceptorpack để đếm số người join vào room chat IT Research Department @BKAP 2015 Page 19 / 27 Enterprise Application Development in Java EE  HitCounterInterceptor.java package interceptorpack; import data.ApplicationStats; import javax.interceptor.AroundInvoke; import javax.interceptor.InvocationContext; /** * * @author Quang */ public class HitCounterInterceptor { //Phuong thuc thuc thi truoc va sau xu ly nghiep vu @AroundInvoke public Object incrementHitCount(InvocationContext context) throws Exception{ System.out.println("HitCounterInterceptor - Start"); //lay Chat Room String chatRoom = (String) context.getParameters()[0]; //Tang so luong nguoi chat room ApplicationStats.getInstance().inscrementCount(chatRoom); Object result = context.proceed(); System.out.println("HitCounterInterceptor - Terminate"); return result; } } Step 7: Tạo lớp TimerInterceptor package interceptorpack IT Research Department @BKAP 2015 Page 20 / 27 Enterprise Application Development in Java EE  TimerInterceptor.java package interceptorpack; import data.ApplicationStats; import javax.interceptor.InvocationContext; /** * * @author Quang */ public class TimerInterceptor { public Object recordPerfTime(InvocationContext context) throws Exception { System.out.println("PerformanceMethodInterceptor - Start"); String chatRoom = (String) context.getParameters()[0]; long startTime = System.currentTimeMillis(); Object result = context.proceed(); long endTime = System.currentTimeMillis(); ApplicationStats.getInstance().recordTime(chatRoom, endTime - startTime); System.out.println("PerformanceMethodInterceptor - Terminate"); return result; } } Step 8: Đưa Interceptor vào Session Bean  ChatRoomBean.java package beanpack; import import import import import import import import import data.ApplicationStats; data.ChatRoomStats; interceptorpack.ChatRoomInterceptor; interceptorpack.HitCounterInterceptor; interceptorpack.TimerInterceptor; java.util.List; javax.ejb.Singleton; javax.ejb.LocalBean; javax.interceptor.Interceptors; /** * * @author Quang */ @Singleton @LocalBean @Interceptors(ChatRoomInterceptor.class) public class ChatRoomBean { @Interceptors({HitCounterInterceptor.class, TimerInterceptor.class}) public void joinChatRoom(String chatRoom) { try { Thread.sleep((long) (1 + (Math.random() * 1000))); } catch (Exception e) { IT Research Department @BKAP 2015 Page 21 / 27 Enterprise Application Development in Java EE System.out.println("New person joined the Chat Room " + chatRoom); } } public List getChatRoomStats() { return ApplicationStats.getInstance().getChatRoomStats(); } } Step 9: Tạo servlet tên ChatServlet package servlet thực thi interceptor  ChatApplication-war  New  Other  Web  Servlet IT Research Department @BKAP 2015 Page 22 / 27 Enterprise Application Development in Java EE IT Research Department @BKAP 2015 Page 23 / 27 Enterprise Application Development in Java EE  ChatServlet.java package servlet; import beanpack.ChatRoomBean; import data.ChatRoomStats; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.ejb.EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author Quang */ public class ChatServlet extends HttpServlet { //goi Enterprice session bean @EJB private ChatRoomBean chatRoomBean; /** * Processes requests for both HTTP GET and POST * methods * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); //Lay ten phong chat tu request String chatRoom = request.getParameter("ChatRoom"); try (PrintWriter out = response.getWriter()) { //Kiem tra neu trang duoc load hoac join vao room if (chatRoom != null && !chatRoom.isEmpty()) { //Thuc thi phuong thuc interceptor chatRoomBean.joinChatRoom(chatRoom); } /* TODO output your page here You may use following sample code */ out.println(""); out.println(""); out.println(""); out.println("Chat Room"); out.println(""); out.println(""); //Form hien thi cho user out.println(""); out.println("Chat Room: "); out.println("Business"); out.println("Family"); IT Research Department @BKAP 2015 Page 24 / 27 Enterprise Application Development in Java EE out.println(""); out.println(""); out.println(""); out.println("Chat Statistics"); //Lay list ChatRoomStats List stats = chatRoomBean.getChatRoomStats(); for (ChatRoomStats room : stats) { out.println("Chat Room - " + room.getChatRoom()); out.println("
  • Number of people - " + room.getPersonCount() + "
  • "); out.println("
  • Total time taken (in mill sec) - " + room.getTotalTime()); out.println("
"); } out.println(""); out.println(""); } } // /** * Handles the HTTP GET method * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST method * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// IT Research Department @BKAP 2015 Page 25 / 27 Enterprise Application Development in Java EE }  Ứng dụng sau hoàn thành Step 10: Build and Run Application IT Research Department @BKAP 2015 Page 26 / 27 Enterprise Application Development in Java EE IT Research Department @BKAP 2015 Page 27 / 27 ... import java. io.IOException; import java. io.PrintWriter; import java. util.List; import javax .ejb. EJB; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest;... java. util.logging.Level; import java. util.logging.Logger; import javax .ejb. ActivationConfigProperty; import javax .ejb. MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener;... ChatRoomBean .java để tạo random Thread sleep package beanpack; import javax .ejb. Singleton; import javax .ejb. LocalBean; /** * * @author Quang */ @Singleton IT Research Department @BKAP 2015 Page 17 / 27

Ngày đăng: 07/05/2018, 16:31

TỪ KHÓA LIÊN QUAN

w