Hi Johan,

Thank you again for the generous response. I sent the following text to Mark
Birenbaum on this list who responded me earlier. I'm posting the message to the
group in the hope of getting feedbacks faster.

------------------------------------------------------------------
The reason I wanted to store incoming messages first is that I wanted the
messages to get ordered based on their priority (determined by their urgency and
importance), and have another thread or MDB deliver the messages in order. So I
do need the two entities to share a common in-memory data structure. Doing this
with regular threading is natural. But how can I simulate this (sharing of a
common object) with multiple MDBs?

-------------------------------------------------------------------

Thanks, and Happy New Year,

Jingwen

---- Original message ----
>Date: Sun, 1 Jan 2006 16:18:06 +0100
>From: Johan Eltes <[EMAIL PROTECTED]>
>Subject: Re: Message-Driven Bean OnMesssage() etc
>To: Jingwen Jin <[EMAIL PROTECTED]>
>Cc: EJB-INTEREST@JAVA.SUN.COM
>
>If you have many MDB instances (e.g. threaded MDBs) simultaneously
>pulling messages off the queue/topic, you could let each mdb instance
>forward the message without creating a new thread. You wouldn't
>usually need to do asynchronous *wihin* an MDB, since the MDB is
>asynchronous itself. What exactly is it you need to achieve by
>threading, in addition to what you get by having an MDB?
>
>/Johan
>
>1 jan 2006 kl. 01.06 skrev Jingwen Jin:
>
>> Hi, Thanks a lot for the suggestion. The fact that EJB does not
>> support
>> multi-threading surprised me. As I said, I wanted my MDB to store
>> incoming
>> messages in a data structure, and then have threads working on the
>> sending of
>> messages. How could such a task be achieved by using multiple
>> beans? More
>> details would be very helpful.
>>
>> When google-ing, I found somebody commenting that multi-threading
>> would work
>> when separating the "multi threadedness" into a separate layer
>> outside of the
>> EJB layer. In such a case, a java job scheduler is needed to handle
>> the
>> scheduling. Have you or has anybody on the list used any scheduler
>> (such as the
>> Quartz scheduler)?
>>
>> Thank you,
>>
>> Jingwen
>>
>>
>> ---- Original message ----
>>> Date: Thu, 29 Dec 2005 09:29:03 +0100
>>> From: Johan Eltes <[EMAIL PROTECTED]>
>>> Subject: Re: Message-Driven Bean OnMesssage() etc
>>> To: EJB-INTEREST@JAVA.SUN.COM
>>>
>>> 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".
>>
>> ======================================================================
>> =====
>> 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".

Reply via email to