HibernatePlugIn for Struts
To configure Hibernate in a Jakarta-Struts application:
1. Create your struts-config.xml file.
2. Add the following configuration for the plugin:
<plug-in className="edu.arbor.util.plugin.HibernatePlugIn">
<!-- 'path-to-config-file' is relative to the root of the class
path. It MUST start with a '/'. The default is
"/hibernate.cfg.xml" -->
<set-property property="configFilePath" value="path-to-config-file" />
<set-property property="storeInServletContext" value="true-or-false" />
</plug-in>
3. Copy the code into a source file and compile.
package edu.arbor.util.plugin;
import java.net.URL;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
/**
* Implements the <code>PlugIn</code> interface to configure the Hibernate
* data persistence library. A configured
* <code>net.sf.hibernate.SessionFactory</code> is stored in the
* <code>ServletContext</code> of the web application unless the property
* <code>storedInServletContext</code> is set to <code>false</code>.
*
* <plugin class="net.sf.hibernate.plugins.struts.HibernatePlugIn">
* <set-property name="configFilePath"
* value="path-to-config-file"/>
* <set-property name="storedInServletContext""
* value="true-or-false"/>
* </plugin>
*
* @author <a href="mailto:bhandy@users.sf.net">Bradley M. Handy</a>
* @version 1.0
*/
public class HibernatePlugIn implements PlugIn {
/**
* the key under which the <code>SessionFactory</code> instance is stored
* in the <code>ServletContext</code>.
*/
public static final String SESSION_FACTORY_KEY
= SessionFactory.class.getName();
private static Log _log = LogFactory.getLog(HibernatePlugIn.class);
/**
* indicates whether the <code>SessionFactory</code> instance will be stored
* in the <code>ServletContext</code>, or not.
*/
private boolean _storedInServletContext = true;
/**
* the path to the xml configuration file. the path should start with a
* '/' character and be relative to the root of the class path.
* (DEFAULT: "/hibernate.cfg.xml")
*/
private String _configFilePath = "/hibernate.cfg.xml";
private ActionServlet _servlet = null;
private ModuleConfig _config = null;
private SessionFactory _factory = null;
/**
* Destroys the <code>SessionFactory</code> instance.
*/
public void destroy() {
_servlet = null;
_config = null;
try {
_log.debug("Destroying SessionFactory...");
_factory.close();
_log.debug("SessionFactory destroyed...");
} catch (Exception e) {
_log.error("Unable to destroy SessionFactory...(exception ignored)",
e);
}
}
/**
* Initializes the <code>SessionFactory</code>.
* @param servlet the <code>ActionServlet</code> instance under which the
* plugin will run.
* @param config the <code>ModuleConfig</code> for the module under which
* the plugin will run.
*/
public void init(ActionServlet servlet, ModuleConfig config)
throws ServletException {
_servlet = servlet;
_config = config;
initHibernate();
}
/**
* Initializes Hibernate with the config file found at
* <code>configFilePath</code>.
*/
private void initHibernate() throws ServletException {
Configuration configuration = null;
URL configFileURL = null;
ServletContext context = null;
try {
configFileURL = HibernatePlugIn.class.getResource(_configFilePath);
context = _servlet.getServletContext();
if (_log.isDebugEnabled()) {
_log.debug("Initializing Hibernate from "
+ _configFilePath + "...");
}
configuration = (new Configuration()).configure(configFileURL);
_factory = configuration.buildSessionFactory();
if (_storedInServletContext) {
_log.debug("Storing SessionFactory in ServletContext...");
context.setAttribute(SESSION_FACTORY_KEY, _factory);
}
} catch (Throwable t) {
_log.error("Exception while initializing Hibernate.");
_log.error("Rethrowing exception...", t);
throw (new ServletException(t));
}
}
/**
* Setter for property configFilePath.
* @param configFilePath New value of property configFilePath.
*/
public void setConfigFilePath(String configFilePath) {
if ((configFilePath == null) || (configFilePath.trim().length() == 0)) {
throw new IllegalArgumentException(
"configFilePath cannot be blank or null.");
}
if (_log.isDebugEnabled()) {
_log.debug("Setting 'configFilePath' to '"
+ configFilePath + "'...");
}
_configFilePath = configFilePath;
}
/**
* Setter for property storedInServletContext.
* @param storedInServletContext New value of property storedInServletContext.
*/
public void setStoredInServletContext(String storedInServletContext) {
if ((storedInServletContext == null)
|| (storedInServletContext.trim().length() == 0)) {
storedInServletContext = "false";
}
if (_log.isDebugEnabled()) {
_log.debug("Setting 'storedInServletContext' to '"
+ storedInServletContext + "'...");
}
_storedInServletContext
= new Boolean(storedInServletContext).booleanValue();
}
}
A Usage example would be excellent!
|
08 Sep 2003, 16:07
|
themax
|
A usage example would be excellent!
|
|
Some more meat in the bones. Configruing hibernate with struts
|
26 Nov 2003, 14:12
|
mark.lowe
|
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration
-2.0.dtd">
<hibernate-configuration>
<!-- a SessionFactory instance listed as /jndi/name -->
<session-factory name="foo:/hibernate/SessionFactory">
<!-- properties -->
<property
name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="connection.username">brian</property>
<property name="connection.password">arses</property>
<property name="connection.url">jdbc:mysql://localhost:3306/
mydata</property>
<property
name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>
<property
name="transaction.factory_class">net.sf.hibernate.transaction.JDBCTra
nsactionFactory</property>
<property name="dbcp.minIdle">1</property>
<property name="cache.use_query_cache">true</property>
<!-- mapping files -->
<mapping resource="com/sparrow/om/Arse.hbm.xml"/>
</session-factory>
</hibernate-configuration>
and in struts config..
<plug-in className="edu.arbor.util.plugin.HibernatePlugIn">
<set-property property="storedInServletContext" value="true"/>
</plug-in>
..
in struts action
..
Context ctx = new InitialContext();
SessionFactory sf = (SessionFactory) ctx.lookup("foo:/hibernate/
SessionFactory");
hibSession = sf.openSession();
Query query = hibSession.createQuery("from com.sparrow.om.Arse");
Iterator it = query.iterate();
while(it.hasNext()) {
Arse arse = (Arse) it.next();
arseList.add(arse);
}
request.setAttribute("arses", arseList.toArray());
..
|
|
Tomcat notes
|
23 Aug 2004, 18:03
|
chrismaeda
|
The previous example (where the SessionFactory is bound in the JNDI
tree) doesn't work for Tomcat since Tomcat's JNDI is read-only.
If you store the SessionFactory in the servlet context, you get it
back with the following code:
(SessionFactory) servletContext.getAttribute
(HibernatePlugIn.SESSION_FACTORY_KEY);
If you are using JSP 1.2 or 2.0, you could also use this EL expression:
"${applicationScope['net.sf.hibernate.SessionFactory']}"
This works for generic servlets as well. Just execute the plugin code
in the servlet's init() method.
|
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2006-04-20 14:57
zhyiwww 阅读(279)
评论(0) 编辑 收藏 所属分类:
j2ee