About creating threads explicitly... do we need to use PerthreadManager?

I saw you recommend it here:
http://tapestry.1045711.n5.nabble.com/Reusing-tapestry-hibernate-session-in-a-thread-td5438833.html

On Tue, Feb 28, 2012 at 10:30 AM, Ferran Maylinch
<ferranmayli...@gmail.com>wrote:

> Thank you very much for your answers.
>
> So, if I understood you well, I can let Tapestry inject the Session in my
> DAOs this way:
>
> class MyDAO {
>
>   private final Session session;
>
>   public MyDAO (Session session) {
>     this.session = session;
>   }
>
>   public void performSomeOperationOnSession() {
>     ...
>   }
> }
>
> ...and I can rest assured multiple concurrent requests that call
> performSomeOperationOnSession() will use different sessions because the *
> session* injected in the DAO is a per-thread-proxy. Is this right?
>
> But, as Kalle says, I suppose we should use HibernateSessionSource when we
> explicitly create multiple threads. Or even in this case injecting Session
> is enough? (Because maybe it doesn't matter if threads are created
> explicitly by me or implicitly by the web container).
>
> Ferran
>
>
>
> On Tue, Feb 28, 2012 at 2:09 AM, Thiago H. de Paula Figueiredo <
> thiag...@gmail.com> wrote:
>
>> On Mon, 27 Feb 2012 20:55:28 -0300, Ferran Maylinch <
>> ferranmayli...@gmail.com> wrote:
>>
>>  Hello,
>>>
>>
>> Hi!
>>
>>
>>  We are currently using both approaches but we don't know exactly when to
>>> use each one.
>>> When should we inject a HibernateSessionSource into the DAO and create
>>> Sessions with source.create() and when should we directly inject a
>>> Session?
>>>
>>
>> Unless in some very specific scenarios, I'd just inject a Session. In
>> Tapestry-Hibernate, Session is a perthread service: in other words, in
>> different threads, different session instances are provided. In the same
>> thread, all Session injections get the same instance.
>>
>>
>>  In our application we have some DAOs calling other DAOs. What should I
>>> inject to them: a HibernateSessionSource or a Session? Or should I pass a
>>> Session to the DAO methods?
>>>
>>
>> Same answer as above: just inject Session.
>>
>>
>>  Or DAOs calling other DAOs is discouraged?
>>>
>>
>> If you're working with two tiers (web and DAO), I'd say no, it isn't
>> discouraged. If you're working with three tiers (web, business rules and
>> DAO), I'd say it is discouraged and you'd better have a business rule class
>> call another one instead.
>>
>>
>>  And a further question would be: what happens if a class starts several
>>> threads using Sessions and transactions. How should we handle that?
>>> Sometimes we suffer deadlocks but we can't spot the cause.
>>>
>>
>> Now you're going out of topic here. IMHO, this is a pure database and
>> connection question, and this is the Tapestry web and IoC framework mailing
>> list. :)
>>
>> --
>> Thiago H. de Paula Figueiredo
>> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,
>> and instructor
>> Owner, Ars Machina Tecnologia da Informação Ltda.
>> http://www.arsmachina.com.br
>>
>
>

Reply via email to