|
The Spring Framework | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.orm.hibernate3.AbstractSessionFactoryBean
public abstract class AbstractSessionFactoryBean
Abstract FactoryBean
that creates
a Hibernate SessionFactory
within a Spring application
context. Supports building a transaction-aware SessionFactory proxy that
exposes a Spring-managed transactional Session as "current Session".
This class also implements the
PersistenceExceptionTranslator
interface, as autodetected by Spring's
PersistenceExceptionTranslationPostProcessor
,
for AOP-based translation of native exceptions to Spring DataAccessExceptions.
Hence, the presence of e.g. LocalSessionFactoryBean automatically enables
a PersistenceExceptionTranslationPostProcessor to translate Hibernate exceptions.
This class mainly serves as common base class for LocalSessionFactoryBean
.
For details on typical SessionFactory setup, see the LocalSessionFactoryBean javadoc.
setExposeTransactionAwareSessionFactory(boolean)
,
SessionFactory.getCurrentSession()
,
PersistenceExceptionTranslationPostProcessor
Field Summary | |
---|---|
protected Log |
logger
Logger available to subclasses |
Constructor Summary | |
---|---|
AbstractSessionFactoryBean()
|
Method Summary | |
---|---|
void |
afterPropertiesSet()
Build and expose the SessionFactory. |
protected void |
afterSessionFactoryCreation()
Hook that allows post-processing after the SessionFactory has been successfully created. |
protected void |
beforeSessionFactoryDestruction()
Hook that allows shutdown processing before the SessionFactory will be closed. |
protected abstract SessionFactory |
buildSessionFactory()
Build the underlying Hibernate SessionFactory. |
protected DataAccessException |
convertHibernateAccessException(HibernateException ex)
Convert the given HibernateException to an appropriate exception from the org.springframework.dao hierarchy. |
void |
destroy()
Close the SessionFactory on bean factory shutdown. |
Object |
getObject()
Return the singleton SessionFactory. |
Class |
getObjectType()
Return the type of object that this FactoryBean creates, or null if not known in advance. |
protected SessionFactory |
getSessionFactory()
Return the exposed SessionFactory. |
protected SessionFactory |
getTransactionAwareSessionFactoryProxy(SessionFactory target)
Wrap the given SessionFactory with a proxy that delegates every method call to it but delegates getCurrentSession calls to SessionFactoryUtils,
for participating in Spring-managed transactions. |
protected boolean |
isExposeTransactionAwareSessionFactory()
Return whether to expose a transaction-aware proxy for the SessionFactory. |
boolean |
isSingleton()
Is the object managed by this factory a singleton? |
void |
setExposeTransactionAwareSessionFactory(boolean exposeTransactionAwareSessionFactory)
Set whether to expose a transaction-aware proxy for the SessionFactory, returning the Session that's associated with the current Spring-managed transaction on getCurrentSession() , if any. |
void |
setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator)
Set the JDBC exception translator for the SessionFactory, exposed via the PersistenceExceptionTranslator interface. |
DataAccessException |
translateExceptionIfPossible(RuntimeException ex)
Implementation of the PersistenceExceptionTranslator interface, as autodetected by Spring's PersistenceExceptionTranslationPostProcessor. |
protected SessionFactory |
wrapSessionFactoryIfNecessary(SessionFactory rawSf)
Wrap the given SessionFactory with a transaction-aware proxy, if demanded. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Log logger
Constructor Detail |
---|
public AbstractSessionFactoryBean()
Method Detail |
---|
public void setExposeTransactionAwareSessionFactory(boolean exposeTransactionAwareSessionFactory)
getCurrentSession()
, if any.
Default is "true", letting data access code work with the plain
Hibernate SessionFactory and its getCurrentSession()
method,
while still being able to participate in current Spring-managed transactions:
with any transaction management strategy, either local or JTA / EJB CMT,
and any transaction synchronization mechanism, either Spring or JTA.
Furthermore, getCurrentSession()
will also seamlessly work with
a request-scoped Session managed by OpenSessionInViewFilter/Interceptor.
Turn this flag off to expose the plain Hibernate SessionFactory with
Hibernate's default getCurrentSession()
behavior, where
Hibernate 3.0.x only supports plain JTA synchronization. On Hibernate 3.1+,
such a plain SessionFactory will by default have a SpringSessionContext
registered to nevertheless provide Spring-managed Sessions; this can be
overridden through the corresponding Hibernate property
"hibernate.current_session_context_class".
SessionFactory.getCurrentSession()
,
JtaTransactionManager
,
HibernateTransactionManager
,
OpenSessionInViewFilter
,
OpenSessionInViewInterceptor
,
SpringSessionContext
protected boolean isExposeTransactionAwareSessionFactory()
public void setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator)
Applied to any SQLException root cause of a Hibernate JDBCException, overriding Hibernate's default SQLException translation (which is based on Hibernate's Dialect for a specific target database).
jdbcExceptionTranslator
- the exception translatorSQLException
,
JDBCException
,
SQLErrorCodeSQLExceptionTranslator
,
SQLStateSQLExceptionTranslator
,
PersistenceExceptionTranslator
public void afterPropertiesSet() throws Exception
afterPropertiesSet
in interface InitializingBean
Exception
- in the event of misconfiguration (such
as failure to set an essential property) or if initialization fails.buildSessionFactory()
,
wrapSessionFactoryIfNecessary(org.hibernate.SessionFactory)
protected SessionFactory wrapSessionFactoryIfNecessary(SessionFactory rawSf)
rawSf
- the raw SessionFactory as built by buildSessionFactory()
buildSessionFactory()
,
getTransactionAwareSessionFactoryProxy(org.hibernate.SessionFactory)
protected SessionFactory getTransactionAwareSessionFactoryProxy(SessionFactory target)
getCurrentSession
calls to SessionFactoryUtils,
for participating in Spring-managed transactions.
target
- the original SessionFactory to wrap
SessionFactory.getCurrentSession()
,
SessionFactoryUtils.doGetSession(org.hibernate.SessionFactory, boolean)
protected final SessionFactory getSessionFactory()
IllegalStateException
- if the SessionFactory has not been initialized yetpublic void destroy() throws HibernateException
destroy
in interface DisposableBean
HibernateException
public Object getObject()
getObject
in interface FactoryBean
null
)FactoryBeanNotInitializedException
public Class getObjectType()
FactoryBean
null
if not known in advance.
This allows one to check for specific types of beans without instantiating objects, for example on autowiring.
In the case of implementations that are creating a singleton object, this method should try to avoid singleton creation as far as possible; it should rather estimate the type in advance. For prototypes, returning a meaningful type here is advisable too.
This method can be called before this FactoryBean has been fully initialized. It must not rely on state created during initialization; of course, it can still use such state if available.
NOTE: Autowiring will simply ignore FactoryBeans that return
null
here. Therefore it is highly recommended to implement
this method properly, using the current state of the FactoryBean.
getObjectType
in interface FactoryBean
null
if not known at the time of the callListableBeanFactory.getBeansOfType(java.lang.Class)
public boolean isSingleton()
FactoryBean
FactoryBean.getObject()
always return the same object
(a reference that can be cached)?
NOTE: If a FactoryBean indicates to hold a singleton object,
the object returned from getObject()
might get cached
by the owning BeanFactory. Hence, do not return true
unless the FactoryBean always exposes the same reference.
The singleton status of the FactoryBean itself will generally be provided by the owning BeanFactory; usually, it has to be defined as singleton there.
NOTE: This method returning false
does not
necessarily indicate that returned objects are independent instances.
An implementation of the extended SmartFactoryBean
interface
may explicitly indicate independent instances through its
SmartFactoryBean.isPrototype()
method. Plain FactoryBean
implementations which do not implement this extended interface are
simply assumed to always return independent instances if the
isSingleton()
implementation returns false
.
isSingleton
in interface FactoryBean
FactoryBean.getObject()
,
SmartFactoryBean.isPrototype()
public DataAccessException translateExceptionIfPossible(RuntimeException ex)
Converts the exception if it is a HibernateException;
else returns null
to indicate an unknown exception.
translateExceptionIfPossible
in interface PersistenceExceptionTranslator
ex
- a RuntimeException thrown
null
if the
exception could not be translated, as in this case it may result from
user code rather than an actual persistence problem)PersistenceExceptionTranslationPostProcessor
,
convertHibernateAccessException(org.hibernate.HibernateException)
protected DataAccessException convertHibernateAccessException(HibernateException ex)
org.springframework.dao
hierarchy.
Will automatically apply a specified SQLExceptionTranslator to a Hibernate JDBCException, else rely on Hibernate's default translation.
ex
- HibernateException that occured
SessionFactoryUtils.convertHibernateAccessException(org.hibernate.HibernateException)
,
setJdbcExceptionTranslator(org.springframework.jdbc.support.SQLExceptionTranslator)
protected abstract SessionFactory buildSessionFactory() throws Exception
Exception
- in case of initialization failureprotected void afterSessionFactoryCreation() throws Exception
getSessionFactory()
at this point.
This implementation is empty.
Exception
- in case of initialization failuregetSessionFactory()
protected void beforeSessionFactoryDestruction()
getSessionFactory()
at this point.
This implementation is empty.
getSessionFactory()
|
The Spring Framework | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |