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

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

27 243 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

Thông tin cơ bản

Định dạng
Số trang 27
Dung lượng 1,77 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

IT Research Department @BKAP 2015 Page 1 / 27Lab 06 - 07 Introduction to Messaging Interceptors and Dependency Injection Mục tiêu - Tạo và gửi một message đến một JMS Resource - Clien

Trang 1

IT Research Department @BKAP 2015 Page 1 / 27

Lab 06 - 07 Introduction to Messaging Interceptors and Dependency Injection

Mục tiêu

- Tạo và gửi một message đến một JMS Resource

- Client nhận một message được lưu trữ trên JMS Resource

- Tạo và cấu hình Interceptors

- Thực thi các Interceptors

Phần I Bài tập step by step

Bài 4.1 Xây dựng một JSF Web Application đặt lịch họp và thông báo đến tất cả các thành viên lịch họp đó

Step 1: Tạo một JSF Web Application tên là MeetingMessenger

 File  New  Java Web  WebApplication

 Name and Location: Project Name  MeetingMessenger

 Frameworks: JavaServer Faces

Step 2: Tạo một JMS Resource

 RC MeetingMessenger  New  GlassFish  JMS Resource

Trang 3

IT Research Department @BKAP 2015 Page 3 / 27

 Sau khi hoàn thành, một JMS Resource được tạo và thông tin của nó được lưu trên file glassfish-resources.xml

<admin-object-resource enabled="true" jndi-name="jms/meetingMessQueue" object-type="user"

res-adapter="jmsra" res-type="javax.jms.Queue">

Trang 4

 RC MeetingMessenger  New  GlassFish  JMS Resource

Trang 5

IT Research Department @BKAP 2015 Page 5 / 27

 Sau khi hoàn thành, Một JMS Resource Connection Factory được tạo và thông tin của

nó được lưu trong file glassfish-resource.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN"

"http://glassfish.org/dtds/glassfish-resources_1_5.dtd">

<resources>

<admin-object-resource enabled="true" jndi-name="jms/meetingMessQueue" object-type="user"

res-adapter="jmsra" res-type="javax.jms.Queue">

max-wait-time-</resources>

Step 4: Tạo một JSF Managed Bean đặt tên JMSProducerBean trong package bean

 RC Source Packages  New  JavaServer Faces  JSF Managed Bean

Trang 6

 Viết code JMSProducerBean.java

package bean;

Trang 7

IT Research Department @BKAP 2015 Page 7 / 27

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() {

//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);

Trang 8

<h:outputLabel value="Message: "/>

<h:inputText id="message" value="#{jMSProducerBean.message}" size="30"/>

<h:commandButton id="Send" value="Send Message" action="#{jMSProducerBean.send()}"/>

<h:messages globalOnly="true"/>

</h:form>

</h:body>

</html>

Step 6: Build and Run Application

Step 7: Kiểm tra JMS Resource lưu trữ trên Server

 Services  Servers  GlassFish Server  View Domain Admin Console

 Common Tasks  Server (Admin Server) JMS Physical Destinations

Trang 9

IT Research Department @BKAP 2015 Page 9 / 27

Trang 10

Step 8: Tạo EJBModule để nhận các message từ JMS Resource

Trang 11

IT Research Department @BKAP 2015 Page 11 / 27

Step 9: Tạo Message-Driver Been

 ClientMessage  New  Other EnterpriseBeans  Message-Driver Bean

Trang 13

IT Research Department @BKAP 2015 Page 13 / 27

@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);

Trang 14

Bài 4.2 Xây dựng ứng dụng chat gồm các room chat để user có thể join vào các room chat và tính

số lượng user join vào mỗi phòng

Step 1: Tạo một ứng dụng Enterprise với tên là ChatApplication

 File  New Project  Java EE  Enterprise Application

 Name: ChatApplication

 Server and Settings

 Server: GlassFish Server

 Create EJB Module

 Create Web Application Module

 Sau khi hoàn thành:

Step 2: Tạo lớp java ChatRoomStats trong package data để quản lý phòng chat, số người

trong phòng chat, thời gian tham gia phòng chat

 ChatApplication-ejb  New  Other  Java  Java Class

Trang 15

IT Research Department @BKAP 2015 Page 15 / 27

public class ChatRoomStats {

//Khai bao ten phong chat la bien chatRoom

private String chatRoom;

//Khai bao so luong nguowi trong 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() {

//Phuong thuc tang so luong nguoi tham gia phong chat khi 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;

Trang 16

}

}

Step 3: Tạo lớp java ApplicationStats trong package datatrên cơ sở Singleton pattern để

khởi tạo đối tượng ChatRoomStats

 ChatApplication-ejb  New  Other  Java  Java Class

public class ApplicationStats {

//Khai bao bien Singleton

private static ApplicationStats instance;

//Khai bao danh sach ChatRoomStats

private static List<ChatRoomStats> chatRoomStats = new ArrayList<>();

//Constructor

public ApplicationStats() {

}

//Phuong thuc khoi tao instance

public static ApplicationStats getInstance() {

//Phuong thuc tinh so nguoi chat

public void inscrementCount(String chatRoom){

for (ChatRoomStats room : chatRoomStats) {

//Phuong thuc tinh so nguoi chat trong 1 thoi gian

public void recordTime(String chatRoom, long time){

for (ChatRoomStats room : chatRoomStats) {

if (room.getChatRoom().equals(chatRoom)) {

room.increaseTotalTime(time);

break;

Trang 17

IT Research Department @BKAP 2015 Page 17 / 27

}

}

}

//Phuong thuc get List Chat Room

public List<ChatRoomStats> getChatRoomStats(){

Trang 18

@LocalBean

public class ChatRoomBean {

public void joinChatRoom(String chatRoom) {

Trang 19

IT Research Department @BKAP 2015 Page 19 / 27

public class ChatRoomInterceptor {

//Phuong thuc xu ly truoc khi khoi tao session bean

@PostConstruct

public void initialiseChatRoom(InvocationContext context) {

System.out.println("PostConstruct - initialising Chat Rooms");

List<ChatRoomStats> 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 khi 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 trong package interceptorpack để đếm

số người join vào room chat

Trang 20

public class HitCounterInterceptor {

//Phuong thuc thuc thi truoc va sau khi 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 trong room

ApplicationStats.getInstance().inscrementCount(chatRoom);

Object result = context.proceed();

System.out.println("HitCounterInterceptor - Terminate");

Trang 21

IT Research Department @BKAP 2015 Page 21 / 27

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");

Trang 22

System.out.println("New person joined the Chat Room " + chatRoom); }

Step 9: Tạo servlet tên là ChatServlet trong package servlet thực thi interceptor

 ChatApplication-war  New  Other  Web  Servlet

Trang 23

IT Research Department @BKAP 2015 Page 23 / 27

Trang 24

public class ChatServlet extends HttpServlet {

//goi Enterprice session bean

* @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

//Form hien thi cho user

out.println("<form name='ChatStats' action='ChatServlet' method='POST'>");

out.println("Chat Room: <select name='ChatRoom'>");

out.println("<option value='Business'>Business</option>");

out.println("<option value='Family'>Family</option>");

Trang 25

IT Research Department @BKAP 2015 Page 25 / 27

out.println("</select>");

out.println("<input type='submit' value='Join'/>");

out.println("<br/><hr>");

out.println("<h2>Chat Statistics</h2>");

//Lay list ChatRoomStats

List<ChatRoomStats> stats = chatRoomBean.getChatRoomStats();

for (ChatRoomStats room : stats) {

out.println("Chat Room - " + room.getChatRoom());

out.println("<ul><li>Number of people - " + room.getPersonCount() + "</li>");

out.println("<li> Total time taken (in mill sec) - " + room.getTotalTime());

* @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 {

* @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 {

public String getServletInfo() {

return "Short description";

}// </editor-fold>

Trang 26

}

 Ứng dụng sau khi hoàn thành

Step 10: Build and Run Application

Trang 27

IT Research Department @BKAP 2015 Page 27 / 27

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

TỪ KHÓA LIÊN QUAN

w