Я хочу использовать n-уровневую архитектуру для приложения, чтобы уровень клиента, веб-уровень, бизнес-уровень и уровень данных были отдельными. Мне интересно, как bean-компонент, управляемый сообщениями, который имеет сообщение, сохраняет его в базе данных без изменения архитектуры. (Это использование обычного сеансового bean-компонента, я извлекал данные, введенные через страницу JSP в сервлет, и из сервлета, называемого классом bean-компонента, который выполнял операции с базой данных, это невозможно сделать с bean-компонентами, управляемыми сообщениями, поскольку он уже переопределенный метод onMessage)
Пока я могу получать значения из сервлета напрямую, используя bean-компонент сообщения, но я хочу изменить это на четырехуровневую архитектуру, в которой операции с базой данных не выполняются в сервлете.
мой код сервлета
@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) {
}
}