On Aug 20, 2012, at 10:55 AM, Romain Manni-Bucau wrote:
> that's because we use a linked blocking queue
>
> maybe we should make it configurable, not sure...
Made it configurable. Code is basically:
public static AsynchronousPool create(AppContext appContext) {
final Options options = appContext.getOptions();
final String id = appContext.getId();
final int corePoolSize = options.get("AsynchronousPool.CorePoolSize",
10);
final int maximumPoolSize =
Math.max(options.get("AsynchronousPool.MaximumPoolSize", 20), corePoolSize);
final Duration keepAliveTime =
options.get("AsynchronousPool.KeepAliveTime", new Duration(60,
TimeUnit.SECONDS));
final BlockingQueue queue = options.get("AsynchronousPool.QueueType",
QueueType.LINKED).create(options);
return new AsynchronousPool(id, corePoolSize, maximumPoolSize,
keepAliveTime, queue);
}
private static enum QueueType {
ARRAY,
DELAY,
LINKED,
PRIORITY,
SYNCHRONOUS;
public BlockingQueue create(Options options) {
switch (this) {
case ARRAY: {
return new
ArrayBlockingQueue(options.get("AsynchronousPool.QueueSize", 100));
}
case DELAY: {
return new DelayQueue();
}
case LINKED: {
return new
LinkedBlockingQueue(options.get("AsynchronousPool.QueueSize",
Integer.MAX_VALUE));
}
case PRIORITY: {
return new PriorityBlockingQueue();
}
case SYNCHRONOUS: {
return new
SynchronousQueue(options.get("AsynchronousPool.QueueFair", false));
}
default: {
// The Options class will throw an error if the user
supplies an unknown enum string
// The only way we can reach this is if we add a new
QueueType element and forget to
// implement it in the above switch statement.
throw new IllegalArgumentException("Unknown QueueType type:
" + this);
}
}
}
}
>
> 2012/8/20 David Blevins <[email protected]>
>
>>
>> On Aug 20, 2012, at 9:23 AM, Bjorn Danielsson wrote:
>>
>>> I found out that this setting is what causes the exception:
>>>
>>> AsynchronousPool.KeepAliveTime = 60
>>>
>>> Without it, everything is fine!
>>>
>>> I simply added all three properties for testing, though I really
>>> have no need to tweak KeepAliveTime. But just for the sake of
>>> completeness: what's the intended format for that property?
>>
>> Should be fixed now. Forgot that the default TimeUnit needed to be
>> supplied in code in case the user did not supply it. The format looks like
>> this:
>>
>> http://tomee.apache.org/configuring-durations.html
>>
>>> Another strange thing that you mentioned earlier Romain, is
>>> that in my tests the pool size never grows to MaximumPoolSize.
>>> It always stays at CorePoolSize. I use test methods that sleep
>>> for 10 seconds and log the timestamps and the Thread names,
>>> and the results are consistent. I even tried spinning instead
>>> of sleeping, but it made no difference.
>>
>> I've noticed that too in the past. These arguments go straight into this
>> object:
>>
>>
>> http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
>>
>> The section on "Core and maximum pool sizes" seems to imply that it can
>> grow and shrink, however, I've only ever noticed fixed pool size behavior.
>>
>>
>> -David
>>
>>> Romain Manni-Bucau <[email protected]> wrote:
>>>> i don't manage to reproduce it,
>>>>
>>>> i simply put in conf/system.properties:
>>>>
>>>> AsynchronousPool.CorePoolSize = 50
>>>> AsynchronousPool.MaximumPoolSize = 100
>>>>
>>>>
>>>> and in the log i get:
>>>>
>>>> INFO: Using 'AsynchronousPool.CorePoolSize=50'
>>>> 20 août 2012 16:21:40 org.apache.openejb.util.OptionsLog info
>>>> INFO: Using 'AsynchronousPool.MaximumPoolSize=100'
>>>>
>>>> and no exception,
>>>>
>>>> maybe you are not completely up to date?
>>>>
>>>> *Romain Manni-Bucau*
>>>> *Twitter: @rmannibucau*
>>>> *Blog: http://rmannibucau.wordpress.com*
>>>>
>>>>
>>>>
>>>>
>>>> 2012/8/20 Bjorn Danielsson <[email protected]>
>>>>
>>>>> I built from the latest source (r1374989) and tried the new
>>>>> configuration, but I get strange errors. Just by placing the
>>>>> default values in system.properties in a freshly unpacked
>>>>> TomEE-plus, I got this exception:
>>>>>
>>>>> INFO: Assembling app: openejb
>>>>> Aug 20, 2012 3:56:28 PM org.apache.openejb.util.OptionsLog info
>>>>> INFO: Using 'AsynchronousPool.CorePoolSize=10'
>>>>> Aug 20, 2012 3:56:28 PM org.apache.openejb.util.OptionsLog info
>>>>> INFO: Using 'AsynchronousPool.MaximumPoolSize=20'
>>>>> Aug 20, 2012 3:56:28 PM org.apache.openejb.util.OptionsLog info
>>>>> INFO: Using 'AsynchronousPool.KeepAliveTime=60'
>>>>> Aug 20, 2012 3:56:28 PM org.apache.openejb.assembler.classic.Assembler
>>>>> destroyApplication
>>>>> INFO: Undeploying app: openejb
>>>>> Aug 20, 2012 3:56:29 PM org.apache.openejb.assembler.classic.Assembler
>>>>> buildContainerSystem
>>>>> SEVERE: Application could not be deployed: openejb
>>>>> org.apache.openejb.OpenEJBException: Creating application failed:
>> openejb:
>>>>> null
>>>>> at
>>>>>
>> org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:929)
>>>>> at
>>>>>
>> org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:521)
>>>>> at
>>>>>
>> org.apache.openejb.assembler.classic.Assembler.buildContainerSystem(Assembler.java:422)
>>>>> at
>>>>>
>> org.apache.openejb.assembler.classic.Assembler.build(Assembler.java:330)
>>>>> at org.apache.openejb.OpenEJB$Instance.<init>(OpenEJB.java:144)
>>>>> at org.apache.openejb.OpenEJB.init(OpenEJB.java:290)
>>>>> at
>>>>>
>> org.apache.tomee.catalina.TomcatLoader.initialize(TomcatLoader.java:231)
>>>>> at
>>>>> org.apache.tomee.catalina.TomcatLoader.init(TomcatLoader.java:131)
>>>>> at
>>>>>
>> org.apache.tomee.catalina.ServerListener.lifecycleEvent(ServerListener.java:113)
>>>>> at
>>>>>
>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
>>>>> at
>>>>>
>> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
>>>>> at
>>>>>
>> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401)
>>>>> at
>>>>> org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:110)
>>>>> at org.apache.catalina.startup.Catalina.load(Catalina.java:624)
>>>>> at org.apache.catalina.startup.Catalina.load(Catalina.java:649)
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>> at
>>>>>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>>> at
>>>>>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>> at java.lang.reflect.Method.invoke(Method.java:601)
>>>>> at
>> org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
>>>>> at
>> org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)
>>>>> Caused by: java.lang.NullPointerException
>>>>> at
>>>>>
>> java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1281)
>>>>> at
>>>>>
>> java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1198)
>>>>> at
>>>>>
>> org.apache.openejb.async.AsynchronousPool.<init>(AsynchronousPool.java:51)
>>>>> at
>>>>>
>> org.apache.openejb.async.AsynchronousPool.create(AsynchronousPool.java:66)
>>>>> at
>>>>>
>> org.apache.openejb.assembler.classic.Assembler.createApplication(Assembler.java:589)
>>>>> ... 20 more
>>>>>
>>>>> I also tried deploying my webapp and moved the properties to
>>>>> WEB-INF/application.properties, and that produced a similar
>>>>> exception with the same cause, but for my app instead of openejb
>>>>> and with some differences in the lifecycle call chain.
>>>>>
>>>>> --
>>>>> Björn Danielsson
>>>>> Cuspy Code AB
>>>>>
>>>>>
>>>>> Romain Manni-Bucau <[email protected]> wrote:
>>>>>> FYI, with last David refactoring the config is a bit different from
>> the
>>>>> one
>>>>>> i did, just to keep a track in this thread (jira is up to date),
>>>>> properties
>>>>>> are and can be put in application.properties (META-INF or WEB-INF):
>>>>>>
>>>>>> AsynchronousPool.CorePoolSize
>>>>>> AsynchronousPool.MaximumPoolSize
>>>>>> AsynchronousPool.KeepAliveTime
>>>>>>
>>>>>> *Romain Manni-Bucau*
>>>>>> *Twitter: @rmannibucau*
>>>>>> *Blog: http://rmannibucau.wordpress.com*
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2012/8/20 zeeman <[email protected]>
>>>>>>
>>>>>>> Great, thanks.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>>
>>>>>
>> http://openejb.979440.n4.nabble.com/Number-of-simultaneous-Asynchronous-threads-tp4656891p4656908.html
>>>>>>> Sent from the OpenEJB User mailing list archive at Nabble.com.
>>>>>>>
>>>>>
>>>
>>
>>