[
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.