[
https://issues.apache.org/jira/browse/AXIS2-4196?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12976675#action_12976675
]
Amila Chinthaka Suriarachchi commented on AXIS2-4196:
-----------------------------------------------------
As you have mentioned it is a property and a new thread is created only if the
property is set.
In Axis2 point of view transport senders are always assume to be blocking. If
you want to have a non blocking nature you need to implement it using
WS-Addressing.
> AxisEngine meddles with concerns of the transports, and creates a thread when
> sending out a message
> ---------------------------------------------------------------------------------------------------
>
> Key: AXIS2-4196
> URL: https://issues.apache.org/jira/browse/AXIS2-4196
> Project: Axis2
> Issue Type: Bug
> Components: kernel
> Affects Versions: nightly
> Reporter: Asankha C. Perera
> Priority: Critical
>
> One of the most used widely methods of Axis2, the AxisEngine.send() method
> contains the following code, which causes the send operation to execute
> within another thread.
> // This boolean property only used in client side
> fireAndForget invocation
> //It will set a property into message context and if some one
> has set the
> //property then transport sender will invoke in a diffrent
> thread
> Object isTransportNonBlocking =
> msgContext.getProperty(MessageContext.TRANSPORT_NON_BLOCKING);
> if (isTransportNonBlocking != null && ((Boolean)
> isTransportNonBlocking).booleanValue()) {
>
> msgContext.getConfigurationContext().getThreadPool().execute(
> new
> TransportNonBlockingInvocationWorker(msgContext, sender));
> } else {
> sender.invoke(msgContext);
> }
> //REVIEW: In the case of the
> TransportNonBlockingInvocationWorker, does this need to wait until that
> finishes?
> In addition, the OutOnlyAxisOperation, in its executeImpl() method does:
> // ship it out
> if (!block) {
> mc.setProperty(MessageContext.TRANSPORT_NON_BLOCKING,
> Boolean.TRUE);
> }
> The MessageContext defines this property as:
> /**
> * To invoke fireAndforget method we have to hand over transport sending
> logic to a thread
> * other wise user has to wait till it get transport response (in the
> case of HTTP its HTTP
> * 202)
> */
> public static final String TRANSPORT_NON_BLOCKING =
> "transportNonBlocking";
> The AxisEngine code creates a new thread "if the transport is non-blocking"
> which seems weired. AFAIK, the Kernel code should not be creating any threads
> like this, nor an AxisOperation set a property on the message about the
> transport. A transport blocking or non-blocking is outside of the purview of
> the Axis2 kernel, as even the Axis2 HTTP transports has already been
> implemented in both blocking and non-blocking manner.
--
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]