通过 Enterprise Java Beans 在 Netbeans 中实现消息队列技术
一个消息队列,允许一个或多个进程写入一条消息以供其他进程读取。消息队列被实现为消息的链接列表,并存储在内核中。每个消息队列由消息队列标识符标识。内核会跟踪系统中创建的所有消息队列。
通过 Enterprise Java Beans 在 Netbeans 中实现消息队列技术的过程步骤按顺序列出。只需按照以下步骤在 Netbeans 中实现消息驱动 bean,如下所示:
- 打开 Netbeans 并选择Java EE –> Enterprise Application
- 在相应的文本框中输入项目名称
- 选择Glashfish服务器
- 单击完成。
- 在 EJB 组件中创建一个消息驱动 Bean。
- 右键单击 EJB 并选择 Message Driven Beans 选项并输入 EJB 名称和包名称,然后单击 Add-in project Destination 并创建目标资源。
- 输入名称并选择队列,然后单击确定和下一步。
- 现在创建一个queue.Edit index.html文件来创建与 bean 的交互。
- 创建用于通信 bean 的 servlet
- 右键单击应用程序并选择清理和构建选项。
步骤 1:打开 Netbeans 并选择Java EE->企业应用程序
第2步:在对应的文本框中输入项目名称
第 3 步:选择 Glassfish 服务器
第四步:点击完成。将创建三个文件。 1. 应用程序,2. EJB 和 3. War 文件被创建
步骤 5:在 EJB 组件中创建消息驱动 Bean。
第 6 步:右键单击 EJB 并选择 Message Driven Beans 选项并输入 EJB 名称和包名称,然后单击 Add-in project Destination 并创建目标资源。
步骤 7:输入名称并选择队列,然后单击确定和下一步。
Note: here we are implementing Queuing Technique, so the Destination Type should be Queue.
第 8 步:创建队列
执行:
- 要更改此许可证标题,请在项目属性中选择许可证标题。
- 要更改此模板文件,请选择工具 |模板
- 并在编辑器中打开模板。
例子
package amar;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSDestinationDefinition;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@JMSDestinationDefinition(name = "java:app/studentDemo", interfaceName = "javax.jms.Queue",
resourceAdapter = "jmsra", destinationName = "studentDemo")
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "java:app/studentDemo")
,
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
// Class implementing MessageListener interface
public class Student implements MessageListener {
// Constructor
public Student() {}
// Method 1
// @Override
public void onMessage(Message message) {
// Try block to check foe exceptions
try {
TextMessage msg = (TextMessage) message;
System.out.println("This is the message retrieved from Queue:" + msg.getText());
if (msg.getText() == "Abhin")
{
System.out.println("OK");
} else {
System.out.println("No");
}
}
// Catch block to handle the exceptions
catch (Exception e) {
System.out.println("Error Message:" + e.getMessage());
}
}
}
第 10 步:编辑 index.html 文件以创建与 bean 的交互。
实施:要更改此许可证标题,请在项目属性中选择许可证标题。要更改此模板文件,请选择工具 |模板并在编辑器中打开模板。
例子
TODO supply a title
Message Driven Bean Project
第 11 步:创建一个用于通信 bean 的 servlet
执行:
- 要更改此许可证标题,请在项目属性中选择许可证标题。
- 要更改此模板文件,请选择工具 |模板
- 并在编辑器中打开模板。
例子
package amar;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Student_Demo", urlPatterns = {"/Student_Demo"})
public class Student_Demo extends HttpServlet {
@Resource(mappedName = "jms/__defaultConnectionFactory")
ConnectionFactory cf;
@Resource(mappedName = "java:app/studentDemo")
Queue dest;
// Processes requests for both
// HTTP GET
and POST
methods
// Servlet request
//@param request
// Servlet response
//@param response
// If a servlet-specific error occurs
// @throws ServletException
// If an I/O error occurs
// @throws IOException
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
// TODO output your page here
// Sample code to be used here
String msg = request.getParameter("msg");
out.println("");
out.println("");
out.println("");
out.println("Servlet Student_Demo ");
out.println("");
out.println("");
send(msg);
out.println("Message Queued
");
out.println("");
out.println("");
}
}
// Method
private void send(String message) {
try {
// Creating object of Connection class
Connection con = cf.createConnection();
// Creating object of Session class
Session ses = con.createSession();
// Creating object of MessageProducer class
MessageProducer mp = ses.createProducer(dest);
// Creating object of TextMessage class
TextMessage tm = ses.createTextMessage();
tm.setText(message);
mp.send(tm);
}
// Catch block to handle the exception
catch (Exception e) {
System.out.println("Error" + e.getMessage());
}
}
//
/**
* 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";
}//
}
第 12 步:右键单击“应用程序”并选择“清理并构建”选项。它将清理项目并成功构建。构建成功后选择部署。如果部署中有任何错误,它会显示所有这些错误。一旦部署成功喜吨的执行过程中的运行按钮。
输出: