Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何将从消息驱动bean检索到的数据保存到数据库?_Database_Jakarta Ee_Message Driven Bean - Fatal编程技术网

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

Database 如何将从消息驱动bean检索到的数据保存到数据库?,database,jakarta-ee,message-driven-bean,Database,Jakarta Ee,Message Driven Bean,我希望对应用程序使用n层体系结构,以便客户端层、web层、业务层和数据层是分开的。我想知道一个具有消息的消息驱动bean如何在不改变体系结构的情况下将其保存到数据库中。(也就是说,使用一个普通的会话bean,我检索了通过JSP页面输入到servlet的数据,并从名为bean类的servlet(该类对数据库进行了操作)中检索到数据,但不可能对消息驱动bean执行此操作,因为它已经有一个覆盖的onMessage方法) 到目前为止,我可以使用消息bean直接从servlet检索值,但我想将其更改为4层

我希望对应用程序使用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) {

    }
}

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

  • 同步交互
  • 异步交互
  • 下面我画了一个可能的架构,其中包括引导工作流。这些组成部分包括:

    • DAO:数据访问对象层。这负责在没有业务逻辑的情况下持久化和查询数据库。使用无状态会话bean实现
    • BL:业务逻辑层。这负责流程业务逻辑,不知道数据将被保存或查询到哪里,只调用DAO层。它还独立于视图层(Web、Web服务、Rest等)
    • Serlvet:在这种情况下,表示与用户直接调用BL以获取过程数据的视图层或web交互
    • MDB:该层用于异步事件,它将队列(或主题)中的消息排出队列,然后调用BL层处理检索到的数据
    该体系结构支持代码重用和职责分离

    图中有两个工作流

  • 同步工作流:
  • Servlet调用BL
  • 我叫道
  • DAO与数据库集成
  • 异步工作流:
    • 一,。Servlet使消息A、B、C排队
    • 二,。MDB出列A
    • iii.MDB呼叫BL
    • 四、BL呼叫DAO
    • 五,。DAO与数据库交互

  • 非常感谢你!因此,应该有一个无状态会话bean,它必须与消息驱动bean一起使用?是的,MDB的唯一目的是获取消息(出列),验证它,然后调用其他无状态会话bean来进行业务逻辑。