You are not allowed to create threads in an EJB. One of the reasons is that transaction contexts are bound to threads. If you create a thread (most app servers will not let you), that the app server will not be able to manage it.
Would it be possible to have multiple MDBs (MDB pool size > 1) instead of forking threads within your business logic? /Johan 29 dec 2005 kl. 06.00 skrev Jingwen Jin:
I'm writing a pub/sub server that, on receiving an incoming message, stores it into a messageArray, and then creates a thread to forward messages in the array. The following code works ok if the "forwardMessage" method is called within onMessage(); messages get delivered. But whenever I try to deliver the messages in messageArray using a thread as shown below, I get the following exception and messages don't get delivered: ReplyMsgBean.forwardMessage: JMSException: com.sun.messaging.jms.JMSException: [SEND_REPLY(9)] [C4036]: A server error occurred. : transaction failed: Unexpected Broker Exception: [received message with Unknown Transaction ID -1: ignoring message] It looks like the server could not create the connection within the forwardMessage method. I'd appreciate any suggestions. Thanks, Jingwen --------------------------------- public class ReplyMsgBean implements MessageDrivenBean, MessageListener { ... public ReplyMsgBean() throws Exception { messageArray = new ArrayList(); mft = new MessageForwardingThread(); mft.start(); } public void ejbCreate() { try { Context initial = new InitialContext(); cf = (ConnectionFactory) initial.lookup( "java:comp/env/jms/MyConnectionFactory"); } catch (Exception ex) { logger.severe("ReplyMsgBean.ejbCreate: Exception: " + ex.toString()); } } public void onMessage(Message inMessage) { put the message into messageArray } private static void forwardMessage(TextMessage msg) { ... Connection con = cf.createConnection(); Session ses = con.createSession(true, 0); producer = ses.createProducer(topic); producer.send(msg); con.close(); } final class MessageForwardingThread extends Thread { ... public final void run() { for every-message (msg) in messageArray ReplyMsgBean.forwardMessage(msg); } } ====================================================================== ===== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff EJB-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".
=========================================================================== To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff EJB-INTEREST". For general help, send email to [EMAIL PROTECTED] and include in the body of the message "help".