[ https://issues.apache.org/jira/browse/WW-3691?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13126216#comment-13126216
]
Falko Modler edited comment on WW-3691 at 10/12/11 10:45 PM:
-------------------------------------------------------------
Thanks for the quick reply!
I don't think this is a sufficient solution because in your patch you just delegate the execution
of the Runnable/Thread to the interceptor which now implements Executor. But because Thread.start()
has been removed, there is no more "background processing thread" anymore.
My idea is more like:
Inject an Executor into the interceptor (@Inject(required=false)) which is then passed to
the BackgroundProcess constructor. BackgroundProcess then just creates a Runnable instance
and passes it to the executer.
Additionally (mainly to preserve backward compatibility), the current constructor which spawns
a new thread should be left almost untouched.
I will try it out myself this weekend and I will provide a patch if everything works as expected.
was (Author: famod):
Thanks for the quick reply!
I don't think this is a sufficient solution because in your patch you just delegate the execution
of the Runnable/Thread to the interceptor which now implements Executor. But because there
is no Thread.start() anymore, there is no more "background processing thread" anymore.
My idea is more like:
Inject an Executor into the interceptor (@Inject(required=false)) which is then passed to
the BackgroundProcess constructor. BackgroundProcess then just creates a Runnable instance
and passes it to the executer.
Additionally (mainly to preserve backward compatibility), the current constructor which spawns
a new thread should be left almost untouched.
I will try it out myself this weekend and I will provide a patch if everything works as expected.
> BackgroundProcess should use a java.util.concurrent.Executor alternatively to spawning
a new thread
> ---------------------------------------------------------------------------------------------------
>
> Key: WW-3691
> URL: https://issues.apache.org/jira/browse/WW-3691
> Project: Struts 2
> Issue Type: Improvement
> Components: Core Interceptors
> Affects Versions: 2.2.3.1
> Reporter: Falko Modler
> Attachments: WW-3691.patch
>
>
> Every new instance of org.apache.struts2.interceptor.BackgroundProcess spawns a new Thread
(see constructor), no thread pooling is used.
> Besides problems in environments where some container might need to manage the creation
of threads, this issue also prevents certain performance/efficiency optimizations via ThreadLocal
from taking full effect. E.g.: We use ThreadLocals for Random and SimpleDateFormat and those
thread local instances "are lost" when a new Thread is created.
> Therefore BackgroundProcess should be given a new constructor that takes a java.util.concurrent.Executor
instance that is used to execute the Runnable.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
|