如何保存从消息驱动bean中检索的数据库数据?

时间:2016-05-08 07:31:05

标签: database java-ee message-driven-bean

我想将n层架构用于应用程序,因此客户端层,Web层,业务层和数据层是分开的。我想知道消息驱动的bean如何将消息保存到数据库而不改变体系结构。 (这是使用正常的会话bean,我检索通过JSP页面输入到servlet的数据,并从称为bean类的servlet,它对数据库有操作,因为它已经有消息驱动bean,所以不可能这样做一个重写的方法onMessage)

到目前为止,我可以直接使用消息bean从servlet中检索值,但我想将其更改为4层体系结构,其中数据库操作不在servlet中。

我的servlet代码

@Resource(mappedName = "jms/dest")
private Queue dest;
@Resource(mappedName = "jms/queue")
private ConnectionFactory queue;

protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");

    String str = request.getParameter("message");

    try {
        sendJMSMessageToDest(str);
    } catch (JMSException ex) {

    }


private Message createJMSMessageForjmsDest(Session session, Object messageData) throws JMSException{
    TextMessage tm = session.createTextMessage();
    tm.setText(messageData.toString());
    return tm;
}
private void sendJMSMessageToDest(Object messageData) throws JMSException{
    Connection connection = null;
    Session session = null;

    try {
        connection = queue.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer messageProducer = session.createProducer(dest);
        messageProducer.send(createJMSMessageForjmsDest(session,messageData));
    } catch (JMSException ex) {

    }
}

1 个答案:

答案 0 :(得分:1)

您必须考虑两种可能的工作流程:

  1. 同步互动。
  2. 异步交互。
  3. 下面我将介绍一种可能涵盖启动工作流程的架构。组件是:

    • DAO :数据访问对象层。这是没有业务逻辑的持久化和查询数据库的责任。使用无状态会话Bean实现
    • BL :业务逻辑层。这是流程业务逻辑的负责人,不知道数据将被保留或查询的位置只是调用DAO层。也独立于View层(Web,Web Service,Rest等)。
    • Serlvet :在这种情况下表示视图层或网络交互,用户直接调用BL来检索处理数据。
    • MDB :此层用于异步事件,它从队列(或主题)中取消消息,然后调用BL层以处理检索到的数据。

    此架构支持代码重用和责任分离。

    Theres是具有两个工作流程的图表。

    JEE Multi Layer Architecture example

    1. 同步工作流程:
      1. Servlet致电BL。
      2. BL呼叫DAO。
      3. DAO与数据库进行交互
    2. Asyncrhonous工作流程:
      • 我。 Servlet将消息A,B,C
      • 排队
      • II。 MDB出列A
      • III。 MDB致电BL。
      • IV。 BL打电话给DAO。
      • 诉DAO与数据库交互