|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.springframework.orm.hibernate.LocalSessionFactoryBean
FactoryBean that creates a local Hibernate SessionFactory instance. Behaves like a SessionFactory instance when used as bean reference, e.g. for HibernateTemplate's "sessionFactory" property. Note that switching to JndiObjectFactoryBean is just a matter of configuration!
The typical usage will be to register this as singleton factory (for a certain underlying JDBC DataSource) in an application context, and give bean references to application services that need it.
Configuration settings can either be read from a Hibernate XML file, specified as "configLocation", or completely via this class. A typical local configuration consists of one or more "mappingResources", various "hibernateProperties" (not strictly necessary), and a "dataSource" that the SessionFactory should use. The latter can also be specified via Hibernate properties, but "dataSource" supports any Spring-configured DataSource, instead of relying on Hibernate's own connection providers.
This SessionFactory handling strategy is appropriate for most types of applications, from Hibernate-only single database apps to ones that need distributed transactions. Either HibernateTransactionManager or JtaTransactionManager can be used for transaction demarcation, the latter only being necessary for transactions that span multiple databases.
Registering a SessionFactory with JNDI is only advisable when using Hibernate's JCA Connector, i.e. when the application server cares for initialization. Else, portability is rather limited: Manual JNDI binding isn't supported by some application servers (e.g. Tomcat). Unfortunately, JCA has drawbacks too: Its setup is container-specific and can be tedious.
Note that the JCA Connector's sole major strength is its seamless cooperation with EJB containers and JTA services. If you do not use EJB and initiate your JTA transactions via Spring's JtaTransactionManager, you can get all benefits including distributed transactions and proper transactional JVM-level caching with local SessionFactory setup too - without any configuration hassle like container-specific setup.
Note: Spring's Hibernate support requires Hibernate 2.1 (as of Spring 1.0).
HibernateAccessor.setSessionFactory(net.sf.hibernate.SessionFactory)
,
HibernateTransactionManager.setSessionFactory(net.sf.hibernate.SessionFactory)
,
JndiObjectFactoryBean
Field Summary | |
protected org.apache.commons.logging.Log |
logger
|
Constructor Summary | |
LocalSessionFactoryBean()
|
Method Summary | |
void |
afterPropertiesSet()
Initialize the SessionFactory for the given or the default location. |
void |
createDatabaseSchema()
Execute schema creation script, determined by the Configuration object used for creating the SessionFactory. |
void |
destroy()
Close the SessionFactory on bean factory shutdown. |
void |
dropDatabaseSchema()
Execute schema drop script, determined by the Configuration object used for creating the SessionFactory. |
protected void |
executeSchemaScript(java.sql.Connection con,
java.lang.String[] sql)
Execute the given schema script on the given JDBC Connection. |
static LobHandler |
getConfigTimeLobHandler()
Return the LobHandler for the currently configured Hibernate SessionFactory, to be used by Type implementations like ClobStringType. |
net.sf.hibernate.cfg.Configuration |
getConfiguration()
Return the Configuration object used to build the SessionFactory. |
java.lang.Object |
getObject()
Return the singleton SessionFactory. |
java.lang.Class |
getObjectType()
Return the type of object that this FactoryBean creates, or null if not known in advance. |
boolean |
isSingleton()
Is the bean managed by this factory a singleton or a prototype? That is, will getObject() always return the same object? |
protected net.sf.hibernate.cfg.Configuration |
newConfiguration()
Subclasses can override this method to perform custom initialization of the Configuration instance used for SessionFactory creation. |
protected net.sf.hibernate.SessionFactory |
newSessionFactory(net.sf.hibernate.cfg.Configuration config)
Subclasses can override this method to perform custom initialization of the SessionFactory instance, creating it via the given Configuration object that got prepared by this LocalSessionFactoryBean. |
protected void |
postProcessConfiguration(net.sf.hibernate.cfg.Configuration config)
To be implemented by subclasses that want to to perform custom post-processing of the Configuration object after this FactoryBean performed its default initialization. |
void |
setConfigLocation(Resource configLocation)
Set the location of the Hibernate XML config file, for example as classpath resource "classpath:hibernate.cfg.xml". |
void |
setDataSource(javax.sql.DataSource dataSource)
Set the DataSource to be used by the SessionFactory. |
void |
setEntityInterceptor(net.sf.hibernate.Interceptor entityInterceptor)
Set a Hibernate entity interceptor that allows to inspect and change property values before writing to and reading from the database. |
void |
setHibernateProperties(java.util.Properties hibernateProperties)
Set Hibernate properties, like "hibernate.dialect". |
void |
setJtaTransactionManager(javax.transaction.TransactionManager jtaTransactionManager)
Set the JTA TransactionManager to be used for Hibernate's TransactionManagerLookup. |
void |
setLobHandler(LobHandler lobHandler)
Set the LobHandler to be used by the SessionFactory. |
void |
setMappingDirectoryLocations(Resource[] mappingDirectoryLocations)
Set locations of directories that contain Hibernate mapping resources, like "WEB-INF/mappings". |
void |
setMappingJarLocations(Resource[] mappingJarLocations)
Set locations of jar files that contain Hibernate mapping resources, like "WEB-INF/lib/example.hbm.jar". |
void |
setMappingLocations(Resource[] mappingLocations)
Set locations of Hibernate mapping files, for example as classpath resource "classpath:example.hbm.xml". |
void |
setMappingResources(java.lang.String[] mappingResources)
Set Hibernate mapping resources to be found in the class path, like "example.hbm.xml" or "mypackage/example.hbm.xml". |
void |
setSchemaUpdate(boolean schemaUpdate)
Set whether to execute a schema update after SessionFactory initialization. |
void |
updateDatabaseSchema()
Execute schema update script, determined by the Configuration object used for creating the SessionFactory. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected final org.apache.commons.logging.Log logger
Constructor Detail |
public LocalSessionFactoryBean()
Method Detail |
public static LobHandler getConfigTimeLobHandler()
This instance will be set before initialization of the corresponding SessionFactory, and reset immediately afterwards. It is thus only available in constructors of UserType implementations.
setLobHandler(org.springframework.jdbc.support.lob.LobHandler)
,
ClobStringType
,
Type
public void setConfigLocation(Resource configLocation)
Note: Can be omitted when all necessary properties and mapping resources are specified locally via this bean.
Configuration.configure(java.net.URL)
public void setMappingResources(java.lang.String[] mappingResources)
Can be used to add to mappings from a Hibernate XML config file, or to specify all mappings locally.
setMappingLocations(org.springframework.core.io.Resource[])
,
Configuration.addResource(java.lang.String, java.lang.ClassLoader)
public void setMappingLocations(Resource[] mappingLocations)
Can be used to add to mappings from a Hibernate XML config file, or to specify all mappings locally.
Configuration.addInputStream(java.io.InputStream)
public void setMappingJarLocations(Resource[] mappingJarLocations)
Can be used to add to mappings from a Hibernate XML config file, or to specify all mappings locally.
Configuration.addJar(java.io.File)
public void setMappingDirectoryLocations(Resource[] mappingDirectoryLocations)
Can be used to add to mappings from a Hibernate XML config file, or to specify all mappings locally.
Configuration.addDirectory(java.io.File)
public void setHibernateProperties(java.util.Properties hibernateProperties)
Can be used to override values in a Hibernate XML config file, or to specify all necessary properties locally.
Note: Do not specify a transaction provider here when using Spring-driven transactions. It is also advisable to omit connection provider settings and use a Spring-set DataSource instead.
setDataSource(javax.sql.DataSource)
public void setDataSource(javax.sql.DataSource dataSource)
Note: If this is set, the Hibernate settings should not define a connection provider to avoid meaningless double configuration.
LocalDataSourceConnectionProvider
public void setJtaTransactionManager(javax.transaction.TransactionManager jtaTransactionManager)
Note: If this is set, the Hibernate settings should not define a transaction manager lookup to avoid meaningless double configuration.
LocalTransactionManagerLookup
public void setLobHandler(LobHandler lobHandler)
getConfigTimeLobHandler()
,
ClobStringType
,
Type
public void setEntityInterceptor(net.sf.hibernate.Interceptor entityInterceptor)
Such an interceptor can either be set at the SessionFactory level, i.e. on LocalSessionFactoryBean, or at the Session level, i.e. on HibernateTemplate, HibernateInterceptor, and HibernateTransactionManager. It's preferable to set it on LocalSessionFactoryBean or HibernateTransactionManager to avoid repeated configuration and guarantee consistent behavior in transactions.
HibernateAccessor.setEntityInterceptor(net.sf.hibernate.Interceptor)
,
HibernateAccessor.setEntityInterceptor(net.sf.hibernate.Interceptor)
,
HibernateTransactionManager.setEntityInterceptor(net.sf.hibernate.Interceptor)
public void setSchemaUpdate(boolean schemaUpdate)
For details on how to make schema update scripts work, see the Hibernate documentation, as this class leverages the same schema update script support in net.sf.hibernate.cfg.Configuration as Hibernate's own SchemaUpdate tool.
Configuration.generateSchemaUpdateScript(net.sf.hibernate.dialect.Dialect, net.sf.hibernate.tool.hbm2ddl.DatabaseMetadata)
,
SchemaUpdate
public void afterPropertiesSet() throws java.lang.IllegalArgumentException, net.sf.hibernate.HibernateException, java.io.IOException
afterPropertiesSet
in interface InitializingBean
java.lang.IllegalArgumentException
- in case of illegal property values
net.sf.hibernate.HibernateException
- in case of Hibernate initialization errors
java.io.IOException
protected net.sf.hibernate.cfg.Configuration newConfiguration() throws net.sf.hibernate.HibernateException
The default implementation creates a new Configuration instance. A custom implementation could prepare the instance in a specific way, or use a custom Configuration subclass.
net.sf.hibernate.HibernateException
- in case of Hibernate initialization errorsConfiguration.Configuration()
protected void postProcessConfiguration(net.sf.hibernate.cfg.Configuration config) throws net.sf.hibernate.HibernateException
config
- the current Configuration object
net.sf.hibernate.HibernateException
- in case of Hibernate initialization errorsprotected net.sf.hibernate.SessionFactory newSessionFactory(net.sf.hibernate.cfg.Configuration config) throws net.sf.hibernate.HibernateException
The default implementation invokes Configuration's buildSessionFactory. A custom implementation could prepare the instance in a specific way, or use a custom SessionFactoryImpl subclass.
config
- Configuration prepared by this LocalSessionFactoryBean
net.sf.hibernate.HibernateException
- in case of Hibernate initialization errorsConfiguration.buildSessionFactory()
public void dropDatabaseSchema() throws DataAccessException
Fetch the LocalSessionFactoryBean itself rather than the exposed
SessionFactory to be able to invoke this method, e.g. via
LocalSessionFactoryBean lsfb = ctx.getBean("&mySessionFactory");
.
Uses the SessionFactory that this bean generates for accessing a JDBC connection to perform the script.
DataAccessException
- in case of script execution errorsConfiguration.generateDropSchemaScript(net.sf.hibernate.dialect.Dialect)
,
SchemaExport.drop(boolean, boolean)
public void createDatabaseSchema() throws DataAccessException
Fetch the LocalSessionFactoryBean itself rather than the exposed
SessionFactory to be able to invoke this method, e.g. via
LocalSessionFactoryBean lsfb = ctx.getBean("&mySessionFactory");
.
Uses the SessionFactory that this bean generates for accessing a JDBC connection to perform the script.
DataAccessException
- in case of script execution errorsConfiguration.generateSchemaCreationScript(net.sf.hibernate.dialect.Dialect)
,
SchemaExport.create(boolean, boolean)
public void updateDatabaseSchema() throws net.sf.hibernate.HibernateException
Fetch the LocalSessionFactoryBean itself rather than the exposed
SessionFactory to be able to invoke this method, e.g. via
LocalSessionFactoryBean lsfb = ctx.getBean("&mySessionFactory");
.
Uses the SessionFactory that this bean generates for accessing a JDBC connection to perform the script.
net.sf.hibernate.HibernateException
- in case of Hibernate initialization errorssetSchemaUpdate(boolean)
,
Configuration.generateSchemaUpdateScript(net.sf.hibernate.dialect.Dialect, net.sf.hibernate.tool.hbm2ddl.DatabaseMetadata)
,
SchemaUpdate
protected void executeSchemaScript(java.sql.Connection con, java.lang.String[] sql) throws java.sql.SQLException
con
- the JDBC Connection to execute the script onsql
- the SQL statements to execute
java.sql.SQLException
- if thrown by JDBC methodspublic net.sf.hibernate.cfg.Configuration getConfiguration()
public java.lang.Object getObject()
getObject
in interface FactoryBean
public java.lang.Class getObjectType()
FactoryBean
For a singleton, this can simply return getObject().getClass(), or even null, as autowiring will always check the actual objects for singletons. For prototypes, returning a meaningful type here is highly advisable, as autowiring will simply ignore them else.
getObjectType
in interface FactoryBean
ListableBeanFactory.getBeansOfType(java.lang.Class, boolean, boolean)
public boolean isSingleton()
FactoryBean
The singleton status of the FactoryBean itself will generally be provided by the owning BeanFactory.
isSingleton
in interface FactoryBean
public void destroy() throws net.sf.hibernate.HibernateException
destroy
in interface DisposableBean
net.sf.hibernate.HibernateException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |