Thursday, 15 May 2014

java - No response by the message driven bean from stateful session bean -



java - No response by the message driven bean from stateful session bean -

i'm trying create work message driven bean without success. perhaps help me.

this code of mdb simple

@messagedriven(mappedname = "jms/bookingprocessorqueuereceiver", activationconfig = {@activationconfigproperty(propertyname = "acknowledgemode", propertyvalue = "auto-acknowledge"), @activationconfigproperty(propertyname = "destinationtype", propertyvalue = "javax.jms.queue") }) public class bookingprocessorbean implements messagelistener { @persistencecontext private entitymanager em; public bookingprocessorbean() { } @override public void onmessage(message message) { reservation reserv = null; if(message instanceof reservation) { seek { system.out.println("order processing..."); reserv = (reservation) message; // riceve l'utente usercredential user = reserv.getusername(); //estrae l'utente user.getreservationslist().add(reserv); storeindb(reserv, user); } catch(exception e) { system.err.println("an error occured during processing of order" + e.tostring()); } } } private void storeindb(reservation r, usercredential u) { em.persist(r); em.merge(u); } }

and stateful session bean phone call it

@stateful public class bookingbean implements bookingbeaninterface { @resource(mappedname = "jms/bookingprocessorqueuereceiver") private queue bookingprocessorqueuereceiver; @resource(mappedname = "jms/reservationprocessorqueuefactory") private connectionfactory reservationprocessorqueuefactory; private connection connection = null; private session session = null; private messageproducer messageproducer; private boolean success; @override public boolean purchase(route r, usercredential u, int passengers, int luggages, double price) { reservation reserv = setreservation(r, u, passengers, luggages, (float) price); seek { sendmessagetobookingprocessorbean(reserv); // invia il messaggio contenente la prenotazione success = true; } catch(jmsexception jmse) { system.err.println("an error occured " + jmse.tostring()); homecoming success = false; } { seek { if (session != null) { session.close(); } if (connection != null) { connection.close(); } } catch(jmsexception jmse) { logger.getlogger(this.getclass().getname()).log(level.warning, "cannot close session", jmse); } } homecoming success; } private void sendmessagetobookingprocessorbean(object messagedata) throws jmsexception { connection = reservationprocessorqueuefactory.createconnection(); session = connection.createsession(false, session.auto_acknowledge); messageproducer = session.createproducer(bookingprocessorqueuereceiver); messageproducer.send(createmessageforbookingprocessorbean(session, messagedata)); } private message createmessageforbookingprocessorbean(session session, object messagedata) throws jmsexception { connection.start(); objectmessage msg = session.createobjectmessage((serializable) messagedata); homecoming msg; } }

i don't know if i'm forgetting something. please check code , tell me if work...the weird fact when send message don't receive response mdb. code set within it isn't executed. mean illustration simple system.out.println not executed.

in comparison

if (message instanceof reservation)

your message of technical type (like textmessage or in case it's objectmessage).

you need like

if (message instanceof objectmessage) { object content = message.getobject(); if (content instanceof reservation) { // cast , proceed

java java-ee jms

No comments:

Post a Comment