Tag Zusammen,
ich "spiele" zur Zeit ein wenig mit Message-Driven Beans herrum. Das klassische HalloWelt funktioniert ohne weiteres, aber da die moderne Welt von Kommunikation lebt, soll "die Welt" nun auch Antworten.
Es ist wie gesagt nur eine "technische Demo" (wenn jemand darüber hinaus PraxisTipps hat, wie man so was im "echten" Leben implementieren würde, sage ich natürlich auch nicht "nein")
Versucht wird (falls es denn technisch überhaupt machbar ist
):
JSP->MDB->JSP
Die JSP Seite erstellt eine Temp-Queue, registriert diese mit der Nachricht, verschickt die Nachricht und soll beim Neuladen die Antwort empfangen.
Die JSP:
Die MDB:
Output sieht dann so aus:
INFO: JSP-TempQueue: temporary_destination://queue/10.1.0.154/6347298447043360003/1
INFO: DirectConsumer:Caught Exception delivering messagecom.sun.messaging.jmq.io.Packet cannot be cast to com.sun.messaging.jms.ra.DirectPacket
INFO: Message Recive: Eine Nachricht
INFO: Response Send to temporary_destination://queue/10.1.0.154/6347298447043360003/1
== die JSP erzeugt eine Temp-Queue, die bei der Bean auch ankommt und an die geantwortet wird, Ergebnis ist leider das, das keine Nachricht beim Neuladen der JSP abgerufen werden kann.
Hoffe auf gute Ideen
Grüße
D
ich "spiele" zur Zeit ein wenig mit Message-Driven Beans herrum. Das klassische HalloWelt funktioniert ohne weiteres, aber da die moderne Welt von Kommunikation lebt, soll "die Welt" nun auch Antworten.
Es ist wie gesagt nur eine "technische Demo" (wenn jemand darüber hinaus PraxisTipps hat, wie man so was im "echten" Leben implementieren würde, sage ich natürlich auch nicht "nein")
Versucht wird (falls es denn technisch überhaupt machbar ist

JSP->MDB->JSP
Die JSP Seite erstellt eine Temp-Queue, registriert diese mit der Nachricht, verschickt die Nachricht und soll beim Neuladen die Antwort empfangen.
Die JSP:
Java:
<body>
Message Send
<%
//Initialize Message Connections
InitialContext ctx=new InitialContext();
QueueConnectionFactory qFactory=(QueueConnectionFactory)ctx.lookup("REJMS");
QueueConnection qConn=qFactory.createQueueConnection();
QueueSession qSession=qConn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
//Recive Old Message
Object o=session.getAttribute("tq");
QueueReceiver qReciver;
TemporaryQueue responseQ;
if (o==null){
responseQ=qSession.createTemporaryQueue();
System.out.println("JSP-TempQueue: " + responseQ.getQueueName());
qReciver=qSession.createReceiver(responseQ);
session.setAttribute("tq",qReciver);
session.setAttribute("rq",responseQ);
}else {
qReciver=(QueueReceiver)o;
responseQ=(TemporaryQueue)session.getAttribute("rq");
}
out.write("Response from: " );
TextMessage responseMessage=(TextMessage)qReciver.receive(1000);
String text;
if (responseMessage==null)
text="No Response";
else
text=responseMessage.getText();
out.println(text);
// New Call of Message Bean:
Queue q=(Queue)ctx.lookup("REJMSR");
QueueSender qSender=qSession.createSender(q);
TextMessage txtMessage=qSession.createTextMessage("Eine Nachricht");
txtMessage.setJMSReplyTo(responseQ);
qSender.send(txtMessage);
%>
</body>
Die MDB:
Java:
@MessageDriven(mappedName="REJMSR")
public class MBean implements MessageListener {
public void onMessage(Message message) {
try {
System.out.println("Message Recive: " + ((TextMessage)message).getText());
TemporaryQueue replyQ=(TemporaryQueue)message.getJMSReplyTo();
InitialContext ctx=new InitialContext();
QueueConnectionFactory qFactory=(QueueConnectionFactory)ctx.lookup("REJMS");
QueueConnection qConn=qFactory.createQueueConnection();
QueueSession qSession=qConn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
QueueSender sender=qSession.createSender(replyQ);
sender.send(qSession.createTextMessage("Reply From Message Bean"));
System.out.println("Response Send to " + replyQ.getQueueName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output sieht dann so aus:
INFO: JSP-TempQueue: temporary_destination://queue/10.1.0.154/6347298447043360003/1
INFO: DirectConsumer:Caught Exception delivering messagecom.sun.messaging.jmq.io.Packet cannot be cast to com.sun.messaging.jms.ra.DirectPacket
INFO: Message Recive: Eine Nachricht
INFO: Response Send to temporary_destination://queue/10.1.0.154/6347298447043360003/1
== die JSP erzeugt eine Temp-Queue, die bei der Bean auch ankommt und an die geantwortet wird, Ergebnis ist leider das, das keine Nachricht beim Neuladen der JSP abgerufen werden kann.
Hoffe auf gute Ideen

Grüße
D
Zuletzt bearbeitet: