I think you should go for stage 1 and think about stage 2 for later. 
Stage 2 is quite smart, I like it.

On Feb 17, 2011, at 3:14 PM, Scott Marlow wrote:

> On 02/17/2011 03:52 AM, Emmanuel Bernard wrote:
>> 
>> On Feb 16, 2011, at 6:21 PM, Scott Marlow wrote:
>> 
>>> Its a minor change but I would like to make a small enhancement to
>>> EntityManager.unwrap().  I would like to support SessionFactory in case
>>> I want to use it later in AS7...
>> 
>> I guess the alternatives are:
>>  - entityManager.unwrap(SessionFactory.class) //not implemented
>>  - entityManager.unwrap(Session.class).getSessionFactory()
>>  - ( (HibernateEntityManagerFactory) entityManager.getEntityManagerFactory() 
>> )
>> 
>> As you know, I don't feel like an EM should spit *Factories via the unwrap 
>> method. So for me option #2 is good enough.
> 
> Yeah, applications should be able to use option #2.  My question is really 
> about the injection from a PU into a Hibernate SessionFactory. Should I also 
> use option #2 internally or wait until EMF.unwrap() is an option in the 
> future and use that for my injection support?
> 
> I'm trying to avoid breaking applications that might be injecting a PU into a 
> Hibernate SessionFactory.
> 
> I could do this in stages:
> 
> Stage 1:  PU injection would check if the left hand side (target) class is a 
> Hibernate SessionFactory and handle that with special code.
> 
> Stage 2:  PU injection would use EMF.unwrap(LeftHandSideTarget.class) when 
> the JPA specification supports this in the future.
> 
>> 
>>> 
>>> Is this completely silly or just mildly silly?  If creating a container
>>> managed entity manager doesn't consume a database connection.  I propose
>>> that its just mildly silly.  If its just mildly silly, I might want to
>>> use the unwrap functionality to keep the AS injection code generic
>>> (covering injecting a PU into a Hibernate SessionFactory).  Of course,
>>> the other silly part is the idea that I would get an EM from the PU
>>> (could lead to unexpected errors if something goes wrong).
>> 
>> I am a bit uncertain on what you want to achieve.
> 
> A generic (dynamic) way to inject (PU/PC) into any PersistenceProvider 
> supported class.
> 
> At this point, I'm probably better off waiting for 
> EntityManagerFactory.unwrap support to be added to the spec (rather than 
> hacking it into EM.unwrap(SessionFactory.Class).  Than, we can do the PU -> 
> SessionFactory properly.
> 
>> Do you want to create a EM that you will not use just to get the 
>> SessionFactory?
>> I'm not sure I like that very much and I would use option #3 to get the 
>> SessionFactory from the EMF.
>> Yes the code requires a cast but you depend on Hibernate classes anyway when 
>> you need a SessionFactory.
> 
> I think just living with "Stage 1" from above is good enough for AS 7.
> 
>> 
>>> 
>>> It might be nice to have an unwrap method on the EntityManagerFactory
>>> for this purpose.  Is that worth proposing for a future JPA release?
>>> 
>> 
>> Yep, it's going to be added.
>> 
>> 
> 


_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to