On Mar 13, 2007, at 6:46 PM, Dennis Byrne wrote:

David has found a few interesting things about the FactoryFinder implementation. I think we can all agree that the memory leak can be fixed, I have mixed feelings about the use of synchronization here. The code is invoked from many places in the app and I am mostly concerned about performance.

If FactoryFinder.setFactory() is only invoked from the context startup listener, or the servlet's init method, do we need synchronization?

I think so. I think that hashMap.get(key) can return screwy results if its concurrent with hashmap.put(otherkey, value). Using a ConcurrentHashMap would at least give answers that made sense, but the guarantees on not changing factory implementation halfway through would probably be weaker.

I'm sure that a totally unsynchronized implementation would pass the tck, so the real question is how rigorously you want to enforce the (probably poorly stated) requirements. It might be worth trying to measure if "total synchronization" is in fact a bottleneck.

Personally I think this whole FactoryFinder thing is somewhat a bad idea and that obtaining the factories once when the app starts and injecting them into any object that could possibly want to use them would avoid your performance concerns and clarify the structure of the framework. You may have noticed my opinion of discovery on another thread :-)

thanks
david jencks


Dennis Byrne

On 3/13/07, David Jencks (JIRA) <dev@myfaces.apache.org> wrote:

[ https://issues.apache.org/jira/browse/MYFACES-1558? page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Jencks updated MYFACES-1558:
----------------------------------

    Attachment: MYFACES-1558-jsf11.patch

Here's a patch for the jsf11 branch. I believe its the same as the patch for jsf 1.2 branch with generics removed, but I spent less time on it than the first one. The entire jsf11 project builds fine with this.

> FactoryFinder not thread safe, and has a memory leak
> ----------------------------------------------------
>
>                 Key: MYFACES-1558
> URL: https://issues.apache.org/jira/browse/ MYFACES-1558
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: General
>    Affects Versions: 1.2.0-SNAPSHOT
>            Reporter: David Jencks
>         Assigned To: Dennis Byrne
>         Attachments: MYFACES-1558-jsf11.patch, MYFACES-1558.patch
>
>
> FactoryFinder has insufficient synchronization to be thread safe, and has a memory leak in _registeredFactoryNames.

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




--
Dennis Byrne

Reply via email to