[hibernate-dev] Getting notified when session factory is completely set up

Davide D'Alto daltodavide at gmail.com
Tue Feb 11 06:39:57 EST 2014


> I can "inject" the SF into a DatastoreProvider by having it implement
said StartStoppable contract. But as pointed out before the SF is not yet
completely initialized at this point. So I e.g. can't access the entity
persisters.

Isn't the SessionFactory already created by the time
StartStoppable#startService is called?


On Tue, Feb 11, 2014 at 11:26 AM, Gunnar Morling <gunnar at hibernate.org>wrote:

> 2014/2/11 Davide D'Alto <daltodavide at gmail.com>
>
>> > Yes, that helps indeed. Implementing my validation routine in such an
>> observer works. I guess if needed, I even could implement support for the
>> suggested service contract in OGM with help of an observer.
>>
>> In OGM, we used to have a SessionFactoryObserver but we removed it in
>> favor of the SessionFactoryServiceInitiator.
>> https://hibernate.atlassian.net/browse/OGM-299
>>
>>
> But do we have a DatastoreProvider which actually makes use of the SF?
>
> I can "inject" the SF into a DatastoreProvider by having it implement said
> StartStoppable contract. But as pointed out before the SF is not yet
> completely initialized at this point. So I e.g. can't access the entity
> persisters.
>
> I couldn't find any "real" implementation of StartStoppable (besides a
> testing one); it might actually make sense to re-implement the support for
> this contract using an observer, which would expose a fully-initialized SF
> to such implementations.
>
> The problem I'm having atm. only relates to CouchDB, so for the time being
> I think I'm going to add an observer just to this module.
>
>
>
>>
>>
>> On Tue, Feb 11, 2014 at 10:05 AM, Gunnar Morling <gunnar at hibernate.org>wrote:
>>
>>> 2014/2/11 Hardy Ferentschik <hardy at hibernate.org>
>>>
>>> > Hi,
>>> >
>>> > not sure whether this could work in your use case, but in Search we
>>> use a
>>> > SessionFactoryObserver.
>>> > We register the observer in Integrator#integrate with the
>>> > SessionFactoryImplementor.
>>> > Once the SessionFactory is completely build you get a callback into
>>> > SessionFactoryObserver#sessionFactoryCreated().
>>> >
>>> > In Search we had the case that we did not want to complete
>>> bootstrapping
>>> > at the integrator phase. Instead we defer
>>> > this until the SessionFactory is completely build.
>>> >
>>> > Hope it helps.
>>> >
>>>
>>> Yes, that helps indeed. Implementing my validation routine in such an
>>> observer works. I guess if needed, I even could implement support for the
>>> suggested service contract in OGM with help of an observer.
>>>
>>> Thanks!
>>>
>>>
>>> >
>>> > --Hardy
>>>
>>> >
>>> >
>>> >
>>> > On 11 Jan 2014, at 09:38, Gunnar Morling <gunnar at hibernate.org> wrote:
>>> >
>>> > > Hi,
>>> > >
>>> > > Is there a way for services (living in the SF-scoped registry) to get
>>> > > notified when the session factory has been set up and perform some
>>> action
>>> > > using that completely initialized factory?
>>> > >
>>> > > Upon invocation of initiateService() of
>>> SessionFactoryServiceInitiator
>>> > > implementations, the passed factory is still under construction (the
>>> call
>>> > > originates from SessionFactoryImpl<init>), so I can't access all
>>> members.
>>> > > The same holds true for the StartStoppable contract in OGM which also
>>> > sees
>>> > > a session factory under construction.
>>> > >
>>> > > Now I could store the passed reference in a field and execute the
>>> > required
>>> > > logic (some sort of validation) later on. I only have no meaningful
>>> hook
>>> > to
>>> > > trigger such action exactly once. So I'd have to manage a flag to
>>> make
>>> > sure
>>> > > the action is only performed once.
>>> > >
>>> > > Is there a better way to achieve this?
>>> > >
>>> > > Would it make sense to provide an additional contract to notify
>>> services
>>> > > about session factory lifecycle events:
>>> > >
>>> > >    public interface SessionFactoryLifecycleAware extends Service {
>>> > >
>>> > >        void onSessionFactoryLifecycleEvent(SessionFactoryImplementor
>>> sfi,
>>> > > Event event);
>>> > >
>>> > >        public enum Event { POST_START, PRE_STOP }
>>> > >    }
>>> > >
>>> > > ?
>>> > >
>>> > > Thanks,
>>> > >
>>> > > --Gunnar
>>> > > _______________________________________________
>>> > > hibernate-dev mailing list
>>> > > hibernate-dev at lists.jboss.org
>>> > > https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>> >
>>> >
>>> _______________________________________________
>>> hibernate-dev mailing list
>>> hibernate-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
>>>
>>
>>
>


More information about the hibernate-dev mailing list