Thanks Jerome!  That will be a much neater solution.

On Thu, Feb 19, 2009 at 1:15 AM, Jerome Louvel
<[email protected]> wrote:
> Hi guys,
>
> This is such a hook available. See the ConnectorService#afterSend method:
> http://www.restlet.org/documentation/snapshot/api/org/restlet/service/ConnectorService.html#afterSend(org.restlet.resource.Represent
> ation)
>
> Hope this helps!
>
> Best regards,
> Jerome Louvel
> --
> Restlet ~ Founder and Lead developer ~ http://www.restlet.org
> Noelios Technologies ~ Co-founder ~ http://www.noelios.com
>
>
> -----Message d'origine-----
> De : Michael Terrington [mailto:[email protected]]
> Envoye : mercredi 18 fevrier 2009 12:23
> A : [email protected]
> Objet : Re: Managing a JPA/Hibernate session
>
> Hi Peter,
>
> I recently encountered this problem myself.  I ended up creating a
> Representation wrapper that would close my EM after the call to write.
>  The code [1] is part of restlet-jpa [2].
>
> Regards,
> Michael.
>
> [1] - 
> http://trac.sarugo.org/restlet-jpa/browser/trunk/src/main/java/org/sarugo/restlet/jpa/TransactionFilter.java
>
> [2] - http://trac.sarugo.org/restlet-jpa/
>
> On Wed, Feb 18, 2009 at 10:22 AM, Peter Becker <[email protected]> wrote:
>> Hello,
>>
>> I'm using Restlet above a JPA persistence layer with Hibernate as provider.
>> That works reasonably well, but unfortunately I haven't found a way to
>> handle the persistence sessions properly.
>>
>> What I would like to see is that a new session is opened whenever needed and
>> is closed after all request processing is done. This is my current attempt:
>>
>> public class EntityManagerFilter extends Filter implements
>> EntityManagerSource {
>>
>>    private final EntityManagerFactory emf;
>>    private final ThreadLocal<EntityManager> entityManagerTL = new
>> ThreadLocal<EntityManager>();
>>
>>    public EntityManagerFilter(Context context, Restlet next,
>> EntityManagerFactory emf) {
>>        super(context, next);
>>        this.emf = emf;
>>    }
>>
>>    public EntityManagerFilter(Context context, EntityManagerFactory emf) {
>>        super(context);
>>        this.emf = emf;
>>    }
>>
>>    public EntityManagerFilter(EntityManagerFactory emf) {
>>        this.emf = emf;
>>    }
>>
>>    public EntityManager getEntityManager() {
>>        // we lazily initialize in case the entity manager is not actually
>> needed
>>        // by a request
>>        EntityManager entityManager = entityManagerTL.get();
>>        if(entityManager == null) {
>>            entityManager = emf.createEntityManager();
>>            entityManagerTL.set(entityManager);
>>        }
>>        return entityManager;
>>    }
>>
>>    @Override
>>    protected void afterHandle(Request request, Response response) {
>>        EntityManager entityManager = entityManagerTL.get();
>>        if(entityManager!=null) {
>>            entityManagerTL.remove();
>>            assert entityManager.isOpen():
>>                "Entity manager should only be closed here but must have
>> been closed elsewhere";
>>            entityManager.close();
>>        }
>>        super.afterHandle(request, response);
>>    }
>> }
>>
>> This filter is attached as the root of the application, forwarding to the
>> router that does the main dispatch.
>>
>> The approach works to some extent, but with a huge "but": most of the time I
>> produce TemplateRepresentations to render data with Freemarker. The
>> processing of those templates happens after the afterHandle(..) method of
>> the filter, which means that the session is closed and if the template uses
>> anything that is not eagerly fetched and the Java code hasn't used it will
>> get an exception from the persistence layer. That is actually a pretty
>> common case since a lot of the details of objects is needed only in the
>> template rendering.
>>
>> Currently I work around that problem by explicitly loading objects in Java
>> code. I'd rather solve that problem properly, but I can't find a hook that
>> gets called after the write(..) method of the representations. Long intro,
>> short question: Is there such thing?
>>
>> Thanks,
>>   Peter
>>
>> ------------------------------------------------------
>> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1182479
>>
>
> ------------------------------------------------------
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1185212
>
> ------------------------------------------------------
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1186386
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1188600

Reply via email to