Hallo Bene,

>  * JavaDoc of Command says that commands have to be designed in a
> thread-safe manner, yet all the base implementations are not thread safe! I
> have created CHAIN-96 [1] for this, because this definitely has to be fixed
> before 2.0

+1

> * The same is true for o.a.c.chain2.Chain and its base implemenation. For
> example there is a race condition in o.a.c.chain2.impl.ChainBase.add(CMD).
> The method first checks the forzen flag and then acts... Another thread may
> already have altered frozen. I have created CHAIN-97 [2] for this.

ok, gut!

>  * The use of Context<K, V> is inconsistent throughout the API. Commands
> only need a C extends Map<K, V> for execution but the RemoveCommand
> implements Command<K, V, Context<K, V>>. Why do we need the Context
> interface anyway? It doesn't add much, the only method is just a generic
> wrapper around Map.get(Object).

Context must have disappeared from methods signatures some time ago,
it is maybe a refuse - but at that time we agreed on creating a
commodity interface which contains the <T extends V> T retrieve(K
key); method;

> * Base implementations should return the constants CONTINUE_PROCESSING or
> PROCESSING_COMPLETE instead of returning true or false

I'd even switch to enumeration to represent states...

> * It may make sense to introduce an enum instead of working with booleans
> as return values for commands.

hahah nice one, I wrote the sentence above without reading the last
bullet, sounds we have an agreement here... :)

Thanks & Best,
-Simo

http://people.apache.org/~simonetripodi/
http://twitter.com/simonetripodi


On Thu, Jun 20, 2013 at 1:01 PM, Benedikt Ritter <brit...@apache.org> wrote:
> Hi guys,
>
> I had a look at the command interface and it's base classes yesterday, and
> I think there is some work to do :) Here are the points I found:
>
>  * JavaDoc of Command says that commands have to be designed in a
> thread-safe manner, yet all the base implementations are not thread safe! I
> have created CHAIN-96 [1] for this, because this definitely has to be fixed
> before 2.0
> * The same is true for o.a.c.chain2.Chain and its base implemenation. For
> example there is a race condition in o.a.c.chain2.impl.ChainBase.add(CMD).
> The method first checks the forzen flag and then acts... Another thread may
> already have altered frozen. I have created CHAIN-97 [2] for this.
>  * The use of Context<K, V> is inconsistent throughout the API. Commands
> only need a C extends Map<K, V> for execution but the RemoveCommand
> implements Command<K, V, Context<K, V>>. Why do we need the Context
> interface anyway? It doesn't add much, the only method is just a generic
> wrapper around Map.get(Object).
> * Base implementations should return the constants CONTINUE_PROCESSING or
> PROCESSING_COMPLETE instead of returning true or false
> * It may make sense to introduce an enum instead of working with booleans
> as return values for commands.
>
> Thoughts?
>
> Benedikt
>
> [1] https://issues.apache.org/jira/browse/CHAIN-96
> [2] https://issues.apache.org/jira/browse/CHAIN-97
>
> --
> http://people.apache.org/~britter/
> http://www.systemoutprintln.de/
> http://twitter.com/BenediktRitter
> http://github.com/britter

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to