|
Configure ORM
The configuration for ORM is done in Application.cfc which
makes this configuration application specific. For a ColdFusion
application to use ORM, the following are the mandatory settings
that need to be configured:
Enable ORM for the application. To do this, set the ormenabled property
to true in the THIS scope of application.cfc
Provide the data source name by either setting data source
property to true in the THIS scope of application
or by defining it in ORM configuration for the application.
Note
that the data source should be configured on the server.
The ORM configuration is specified using a struct called ormsettings,
which is defined in the THIS scope of Application.cfc. The following
table describes the settings for ORM that can be defined in Application.cfc.
Property Name
|
Description
|
ormenabled
|
Specifies whether ORM should be used for
the ColdFusion application.Set the value to true to use ORM. The
default is false.
|
datasource
|
Defines the data source that should be used
by ORM.
|
ormsettings
|
The struct that defines all the ORM settings.
For details, see ORM settings
|
ORM settingsThe following settings can be set in the ormsettings struct
that ColdFusion uses to configure ORM. All these settings are optional.
If you specify the value of any ORM setting to true or yes, then
the setting is enabled, otherwise it is disabled.
Property Name
|
Default
|
Description
|
autogenmap
|
true
|
Specifies whether ColdFusion should automatically
generate mapping for the persistent CFCs. If autogenmap=false,
mapping should be provided in the form of .HBMXML files.
|
cacheconfig
|
|
Specifies the location of the configuration
file that should be used by the secondary cache provider.This setting
is used only when secondarycacheenabled=true.
See Secondary level cache for details.
|
cacheprovider
|
ehcache
|
Specifies the cache provider that should
be used by ORM as secondary cache. The values can be:
Ehcache
JBossCache
Hashtable
SwarmCache
OSCache
Fully qualified name of the class for
any other cache provider.
This setting is used only when secondarycacheenabled=true.
See Secondary level cache for details.
|
catalog
|
|
Specifies the default Catalog that should
be used by ORM.
|
cfclocation
|
|
Specifies the directory (or array of directories)
that should be used by ColdFusion to search for persistent CFCs
to generate the mapping. If cfclocation is set,
ColdFusion looks at only the paths specified in it. If it is not
set, ColdFusion looks at the application directory, its sub-directories,
and its mapped directories to search for persistent CFCs.
|
datasource
|
|
Specifies the data source that should be
used by ORM. If it is not specified here, then the data source specified
for the application is picked up.
|
dbcreate
|
none
|
ColdFusion ORM can automatically create
the tables for your application in the database at when ORM is initialized
for the application. This can be enabled by using dbcreate in ormsettings. dbCreate takes
the following values: update: Setting
this value creates the table if it does not exist or update the table
if it exists.
dropcreate: Setting this value drops the
table if it exists and then creates it.
none (default): Setting this value does
not change anything in the database schema.
|
dialect
|
|
Specifies the dialect.
ColdFusion
supports the following dialects: DB2
DB2AS400
DB2OS390
Derby
PostgreSQL
MySQL
MySQLwithInnoDB
MySQLwithMyISAM
Oracle8i
Oracle9i
Oracle10g
Sybase
SybaseAnywhere
MicrosoftSQLServer
Informix
Apart from these dialects, you
can specify custom dialects by using the fully qualified class name.
Note: For
Microsoft Access, dialect cannot be detected automatically. Use
Microsoft SQL Server as the dialect for it.
|
eventHandling
|
false
|
Specifies whether ORM Event callbacks should
be given. See Event Handling in CFC for details.
|
flushatrequestend
|
true
|
Specifies whether ormflush should
be called automatically at request end. If flushatrequestend is
false, ormflush is not called automatically at
request end.
See ORM session management.
|
logSQL
|
false
|
Specifies whether the SQL queries that are
executed by ORM will be logged. If LogSQL=true,
the SQL queries are logged to the console.
|
ormconfig
|
|
The Hibernate configuration file.
This
file contains various configuration parameters like, dialect, cache
settings, and mapping files that are required for the application.
For more details, see www.hibernate.org/hib_docs/reference/en/html/session-configuration.html.
The
settings defined in the ormsettings override the
settings defined in the Hibernate Configuration XML file.The connection
information in the Hibernate Configuration XML file is however ignored
because ColdFusion uses its own connection pool.
You will
need to use this only when you need to use a hibernate setting that
is not available using ormsetting.
|
savemapping
|
false
|
Specifies whether the generated Hibernate
mapping file has to be saved to disk. If you set the value to true,
the Hibernate mapping XML file is saved with the filename "CFC name".hbmxml
in the same directory as the CFC.
|
schema
|
|
Specifies the default Schema that should
be used by ORM.
|
secondarycacheenabled
|
false
|
Specifies whether secondary caching should
be enabled. See Use secondary cache for details.
|
useDBForMapping
|
true
|
Specifies whether the database has to be
inspected to identify the missing information required to generate
the Hibernate mapping. The database is inspected to get the column
data type, primary key and foreign key information.
|
Sample Application.cfc
<cfset this.name = "ArtGallery">
<cfset this.ormenabled = "true">
<cfset this.ormsettings={datasource="cfartgallery", logsql="true"}>
LoggingMonitoring SQL queries that get generated and executed
by ORM is critical for troubleshooting and performance optimization.
You can monitor and log the queries by:
Defining logsql in ormsettings:
This is a simple way to quickly enable SQL logging. The flag should
be enabled in application.cfc:
<cfset this.ormsettings.logsql = "true">
This
logs all the SQL queries that are generated by Hibernate to the
console and server’s output log file.
Using log4J.properties: Hibernate uses log4j
for its logging and you can completely control its logging including
SQL by modifying the log4j.properties, which is
present under <CF_HOME>/lib directory.
Following
is a sample snippet from the log4j.properties file:
###--------------- Hibernate Log Settings ------
### Set Hibernate log
log4j.logger.org.hibernate=ERROR, HIBERNATECONSOLE
### log just the SQL
#log4j.logger.org.hibernate.SQL=DEBUG, HIBERNATECONSOLE
#log4j.additivity.org.hibernate.SQL=false
### Also log the parameter binding to the prepared statements.
#log4j.logger.org.hibernate.type=DEBUG
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=DEBUG, HIBERNATECONSOLE
### log cache activity ###
log4j.logger.org.hibernate.cache=ERROR, HIBERNATECONSOLE
# HibernateConsole is set to be a ColsoleAppender for Hibernate message using a PatternLayout.
log4j.appender.HIBERNATECONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.HIBERNATECONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.HIBERNATECONSOLE.layout.ConversionPattern=%d{MM/dd HH:mm:ss} [%t] HIBERNATE %-5p - %m%n%n
#---------------------------------------------
These
settings control the SQLs that are generated for entity operations,
how the data is bound to the statement while executing, what SQLs
are generated for DDL, and what operations are performed on the
secondary cache. All the logs get logged to console using HIBERNATECONSOLE
which is actually a console appender. It can easily be changed to
a FileAppender, which will then be logged to a log file. The configuration
controls the logging for the following:
SQL generated
for entity operations
Parameter binding for the prepared statements
SQL generated for DDL
Secondary cache operations
With the default
settings, all the logs get logged to console. You can also direct the
logging to a log file using the FileAppender provided by log4j.
See log4j for
more details on Appenders.
Log4j Properties
|
Description
|
log4j.logger.org.hibernate.SQL
|
This controls when and how the SQL will
be logged. DEBUG says all the SQL will be logged
|
log4j.logger.org.hibernate.type
|
This logs the parameter binding to the prepared
statement.
|
log4j.logger.org.hibernate.tool.hbm2ddl
|
Logs SQL for DDL i.e schema export.
|
log4j.logger.org.hibernate.cache
|
Logs secondary cache information.
|
|