📜  通过 Enterprise Java Beans 在 Netbeans 中实现消息队列技术

📅  最后修改于: 2022-05-13 01:55:02.409000             🧑  作者: Mango

通过 Enterprise Java Beans 在 Netbeans 中实现消息队列技术

一个消息队列,允许一个或多个进程写入一条消息以供其他进程读取。消息队列被实现为消息的链接列表,并存储在内核中。每个消息队列由消息队列标识符标识。内核会跟踪系统中创建的所有消息队列。

通过 Enterprise Java Beans 在 Netbeans 中实现消息队列技术的过程步骤按顺序列出。只需按照以下步骤在 Netbeans 中实现消息驱动 bean,如下所示:

  1. 打开 Netbeans 并选择Java EE –> Enterprise Application
  2. 在相应的文本框中输入项目名称
  3. 选择Glashfish服务器
  4. 单击完成。
  5. 在 EJB 组件中创建一个消息驱动 Bean。
  6. 右键单击 EJB 并选择 Message Driven Beans 选项并输入 EJB 名称和包名称,然后单击 Add-in project Destination 并创建目标资源。
  7. 输入名称并选择队列,然后单击确定和下一步。
  8. 现在创建一个queue.Edit index.html文件来创建与 bean 的交互。
  9. 创建用于通信 bean 的 servlet
  10. 右键单击应用程序并选择清理和构建选项。

步骤 1:打开 Netbeans 并选择Java EE->企业应用程序

选择 Project 作为Java EE-> Enterprise Application

第2步:在对应文本框中输入项目名称

输入项目名称

第 3 步:选择 Glassfish 服务器



选择 Glashfish 服务器

第四步:点击完成。将创建三个文件。 1. 应用程序,2. EJB 和 3. War 文件被创建

步骤 5:在 EJB 组件中创建消息驱动 Bean。

第 6 步:右键单击 EJB 并选择 Message Driven Beans 选项并输入 EJB 名称和包名称,然后单击 Add-in project Destination 并创建目标资源。

步骤 7:输入名称并选择队列,然后单击确定和下一步。



第 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 步:右键单击“应用程序”并选择“清理并构建”选项。它将清理项目并成功构建。构建成功后选择部署。如果部署中有任何错误,它会显示所有这些错误。一旦部署成功喜的执行过程中的运行按钮。

输出:

用户界面

消息排队到 Glashfish 服务器

消息队列信息