You are viewing a plain text version of this content. The canonical link for it is here.
Posted to droids-dev@incubator.apache.org by "Thorsten Scherler (JIRA)" <ji...@apache.org> on 2009/12/21 14:14:18 UTC
[jira] Closed: (DROIDS-68) HandlerFactory fails with multithreaded
implementation
[ https://issues.apache.org/jira/browse/DROIDS-68?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thorsten Scherler closed DROIDS-68.
-----------------------------------
Resolution: Fixed
Committed revision 892828.
thanks Javier
> HandlerFactory fails with multithreaded implementation
> ------------------------------------------------------
>
> Key: DROIDS-68
> URL: https://issues.apache.org/jira/browse/DROIDS-68
> Project: Droids
> Issue Type: Bug
> Components: core
> Environment: Ubuntu 9.04 i386
> Java Runtime 1.6_16
> Reporter: Javier Puerto
> Priority: Critical
> Attachments: droids_concurrency.patch, droidsTest_concurrency.patch
>
>
> Hi, I'm working with Droids and made some URL crawlers to save a lot of web pages in disk. In JUnit test, I run a little http server and crawl 20 pages, the most times everything works ok but in rare cases I get an error. I found the problem in the HandlerFactory implementation, in the example the call to handlers is like this:
> protected void handle(ContentEntity entity, Link link)
> throws DroidsException, IOException
> {
> droid.getHandlerFactory().handle(link.getURI(), entity);
> }
> If two or more workers is trying to handle at same time, the HandlerFactory will handle with the same instance. The solution could be saving memory or improving performance.
> The first solution could be implemented adding a "synchronized" to HandlerFactory.handle like this.
> public synchronized boolean handle(URI uri, ContentEntity entity)
> throws DroidsException, IOException {
> for (Handler handler : getMap().values()) {
> handler.handle(uri, entity);
> }
> return true;
> }
> This solution works but it is a workaround.
> The real solution was discussed in the dev list and it was make the Droid and the GenericFactory abstractions clonable and invoking the clone method in the Worker's constructor.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.