[ 
https://issues.apache.org/jira/browse/SYNAPSE-434?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12688103#action_12688103
 ] 

Amila Chinthaka Suriarachchi commented on SYNAPSE-434:
------------------------------------------------------

I have also seen this same issue and it is a serious problem for RM synchronize 
invocations.

In the earlier Axis2 SMTP transport it also polls the SMTP server using one 
thread. But after creating the message context it starts a new thread to send 
it through the Axis Engine.

synchronized (receiver) {
                    receiver.connect();

                    Message[] msgs = receiver.receiveMessages();

                    if ((msgs != null) && (msgs.length > 0)) {
                        log.info(msgs.length + " Message(s) Found");

                        for (int i = 0; i < msgs.length; i++) {
                            MimeMessage msg = (MimeMessage) msgs[i];
                            try {
                                MessageContext mc = 
createMessageContextToMailWorker(msg);
                                msg.setFlag(Flags.Flag.DELETED, true);
                                if(mc==null){
                                    continue;
                                }
                                MailWorker worker = new 
MailWorker(configurationContext,mc);
                                
this.configurationContext.getThreadPool().execute(worker);
                            } catch (Exception e) {
                                log.error("Error in SimpleMailListener - 
processing mail", e);
                            } finally {
                                // delete mail in any case
                            }
                        }
                    }

                    receiver.disconnect();
                }

Can't we do the same thing here as well.

thanks,
Amila.

> Concurrency level provided by the mail and VFS transports listeners is 
> insufficient
> -----------------------------------------------------------------------------------
>
>                 Key: SYNAPSE-434
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-434
>             Project: Synapse
>          Issue Type: Bug
>          Components: Transports
>    Affects Versions: 1.2
>            Reporter: Andreas Veithen
>            Assignee: Andreas Veithen
>            Priority: Minor
>
> Scenario:
> * Two services are configured to use the (mail or VFS) transport.
> * Two messages are sent two each of these services.
> In this case, one would expect that the transport listener will be able to 
> process at least 2 (better 4) messages concurrently. However the listener 
> currently only processes one message at a time, i.e. the listener behaves as 
> if it was single-threaded.
> There are two reasons for this:
> 1. AbstractPollingTransportListener contains the following code:
> workerPool.execute(new Runnable() {
>     public void run() {
>         synchronized (pollLock) {
>             pollInProgress = true;
>             try {
>                 onPoll();
>             } finally {
>                 pollInProgress = false;
>             }
>         }
>     }
> });
> Since pollLock is a member of AbstractPollingTransportListener, there can 
> only be one poll in progress at a time, even if several services are 
> configured to use the transport (in which case nothing would prevent the 
> transport from executing the polls for the different services in parallel).
> 2. Both MailTransportListener and VFSTransportListener process incoming 
> messages sequentially. Here again, the transport could process several 
> messages in parallel during the execution of the onPoll method.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to