--
lternative 0036FC8AC1257488_Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable

Hello,

I have solved the problem. It was something like this:

def mymethod
        row = myselect.execute(select)
        if row.next
                Thread.new {mymethod(row.getcursorvalue)}
        end
Rescue
        puts error
end

As you can see the the variable "row" is local to the method, but when I 
was including it inside of the thread block, it becomes local of the 
thread. The database was answering with an error like this "No cursor 
opened", since the cursor is not valid in the thread context. The Rescue 
clause was not responding, since the error was introduced before the 
method was actually called.

> you could handle the results in threads too using the same pattern. 
> the key is here is simply to eliminate the MT aspect of the db handle 
> usage - for sanity and correctness.

I am using JRuby 1.1.2 with the Oracle JDBC. The engine is an Oracle 11i 
running on a separated server, but sometimes I use it in my own MacBook 
PRO on a linux vmware virtual machine. Do you think it is not thread safe? lso, why do you think that it is not good to run the queries in parallel?

Cheers,


---
Guillermo Acilu
Senior Engineer, Koiaka GmbH

Koiaka GmbH
Riesserkopfstr. 17 
82467 Garmisch-Partenkirchen
Tel: +49 (0)8821 9679555 
Fax: +49 (0)8821 730 9185 
Mailto:guillermo.acilu / koiaka.com
http://www.koiaka.com

Amtsgericht Mchen: HR B 161 041 
GeschÁ«tsfrer: Guillermo Acilu 
Sitz: Garmisch-Partenkirchen

Diese Email kann vertrauliche und/oder rechtlich geschzte Informationen 
enthalten. Wenn Sie nicht der richtige Adressat sind oder diese Email 
irrtlich erhalten haben, dfen Sie diese weder benutzen, kopieren, 
weiterleiten oder irgend eine Ma°¨nahme einleiten, die im Zusammenhang mit 
dem Inhalt dieser Email steht. Informieren Sie bitte sofort den Absender 
und vernichten Sie die irrtlich erhaltene Email vollstÁŌdig.
Vielen Dank!

This e-mail message may contain confidential and/or privileged 
information. If you are not an addressee or otherwise authorized to 
receive this message, you should not use, copy, disclose or take any 
action based on this e-mail or any information contained in the message. 
If you have received this material in error, please advise the sender 
immediately by reply e-mail and delete this message completely.
Thank you!





From:
"ara.t.howard" <ara.t.howard / gmail.com>
To:
ruby-talk / ruby-lang.org (ruby-talk ML)
Date:
15.07.2008 18:24
Subject:
Re: Handling exceptions in Threads




On Jul 15, 2008, at 6:35 AM, Guillermo.Acilu / koiaka.com wrote:

>
> If I leave the Thread.abort_on_exception = false, the algorithm ends 
> after
> triggering about 10 threads. If I set it to 
> Thread.abort_on_exception =
> true, the algorithm end abnormally, but without printing any error
> message.
>
> I have added the following code at the end of the method called by the
> thread:
>
> rescue Exception => error
>    puts "#{error.class}: #{error.message}"
>
> But I cannot get any error message in the console. I am sure that the
> problem is something related with the database, but I do not know 
> how to
> solve the problem if I do not see the error message.
>
> Any ideas?


1) STDERR.puts message

stdout bufferes and can get lost


2) it's *highly* unlikely the db handle is thread safe and, if it is, 
it'll be native thread safe not green thread safe.  aka - you will not 
get anything from using MT to execute your queries.


so, just use producer/consumer to both simplify and speed up your 
application.  for example


q = Queue.new

queries = list_of_queries

done = Object.new.freeze

producer = Thread.new do
   Thread.current.abort_on_exception

   queries.each do |query|
     q.push db.execute(query)
   end

   q.push done
end

while( ( result = q.pop) != done )
   handle_result result
end


you could handle the results in threads too using the same pattern. 
the key is here is simply to eliminate the MT aspect of the db handle 
usage - for sanity and correctness.

cheers.

a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being 
better. simply reflect on that.
h.h. the 14th dalai lama






--
lternative 0036FC8AC1257488_