You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/04/19 22:53:20 UTC
svn commit: r395393 [3/10] - in /incubator/roller/trunk: ./
contrib/plugins/src/org/roller/presentation/velocity/plugins/topictag/
metadata/database/hibernate/
sandbox/atomadminprotocol/src/org/roller/presentation/atomadminapi/
sandbox/atomprotocol/src...
Modified: incubator/roller/trunk/src/org/roller/business/hibernate/HibernatePropertiesManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/hibernate/HibernatePropertiesManagerImpl.java?rev=395393&r1=395392&r2=395393&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/hibernate/HibernatePropertiesManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/hibernate/HibernatePropertiesManagerImpl.java Wed Apr 19 13:53:01 2006
@@ -13,44 +13,53 @@
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
-import org.hibernate.criterion.Expression;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.roller.RollerException;
-import org.roller.business.PersistenceStrategy;
-import org.roller.business.PropertiesManagerImpl;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.config.runtime.ConfigDef;
+import org.roller.config.runtime.DisplayGroup;
+import org.roller.config.runtime.PropertyDef;
+import org.roller.config.runtime.RuntimeConfigDefs;
+import org.roller.model.PropertiesManager;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.pojos.RollerConfigData;
import org.roller.pojos.RollerPropertyData;
/**
- * A hibernate specific implementation of the properties manager.
- *
- * @author Allen Gilliland
+ * Hibernate implementation of the PropertiesManager.
*/
-public class HibernatePropertiesManagerImpl extends PropertiesManagerImpl {
+public class HibernatePropertiesManagerImpl implements PropertiesManager {
static final long serialVersionUID = -4326713177137796936L;
- private static Log mLogger =
- LogFactory.getLog(HibernatePropertiesManagerImpl.class);
+ private static Log log = LogFactory.getLog(HibernatePropertiesManagerImpl.class);
+
+ private HibernatePersistenceStrategy strategy = null;
/**
* Creates a new instance of HibernatePropertiesManagerImpl
*/
- public HibernatePropertiesManagerImpl(PersistenceStrategy strategy) {
- super(strategy);
- mLogger.debug("Instantiating Hibernate Properties Manager");
+ public HibernatePropertiesManagerImpl(HibernatePersistenceStrategy strat) {
+
+ log.debug("Instantiating Hibernate Properties Manager");
+
+ this.strategy = strat;
+
+ // TODO: and new method initialize(props)
+ init();
}
/**
- * Retrieve a single property by name
+ * Retrieve a single property by name.
*/
public RollerPropertyData getProperty(String name) throws RollerException {
try {
- Session session = ((HibernateStrategy) mStrategy).getSession();
- return (RollerPropertyData) mStrategy.load(name, RollerPropertyData.class);
+ return (RollerPropertyData) strategy.load(name, RollerPropertyData.class);
} catch (HibernateException e) {
throw new RollerException(e);
}
@@ -58,14 +67,18 @@
/**
- * Retrieve all properties
+ * Retrieve all properties.
+ *
+ * Properties are returned in a Map to make them easy to lookup. The Map
+ * uses the property name as the key and the RollerPropertyData object
+ * as the value.
*/
public Map getProperties() throws RollerException {
HashMap props = new HashMap();
try {
- Session session = ((HibernateStrategy) mStrategy).getSession();
+ Session session = strategy.getSession();
Criteria criteria = session.createCriteria(RollerPropertyData.class);
List list = criteria.list();
@@ -87,5 +100,184 @@
return props;
}
+
+
+ /**
+ * Save a single property.
+ */
+ public void saveProperty(RollerPropertyData property) throws RollerException {
+
+ this.strategy.store(property);
+ }
+
+
+ /**
+ * Save all properties.
+ */
+ public void saveProperties(Map properties) throws RollerException {
+
+ // just go through the list and saveProperties each property
+ Iterator props = properties.values().iterator();
+ while (props.hasNext()) {
+ this.strategy.store((RollerPropertyData) props.next());
+ }
+ }
+
+
+ private void init() {
+ Map props = null;
+ try {
+ props = this.getProperties();
+
+ if(props.size() < 1) {
+ // empty props table ... try migrating, then load defaults
+ props = migrateOldRollerConfig(props);
+ props = initializeMissingProps(props);
+ } else {
+ // found existing props ... check for new props
+ props = initializeMissingProps(props);
+ }
+
+ // save our changes
+ this.saveProperties(props);
+ } catch (Exception e) {
+ log.fatal("Failed to initialize runtime configuration properties."+
+ "Please check that the database has been upgraded!", e);
+ throw new RuntimeException(e);
+ }
+
+ }
+
+
+ /**
+ * Migrate data from the old roller config.
+ * This is called only if the existing runtime properties are empty.
+ */
+ private Map migrateOldRollerConfig(Map props) {
+ // try to get the old config
+ Roller roller = RollerFactory.getRoller();
+ RollerConfigData rollerConfig = null;
+
+ try {
+ rollerConfig = roller.getConfigManager().getRollerConfig();
+ } catch (Exception e) {
+ // We currently treat any exception obtaining the roller config
+ // as if we had not found it.
+ log.error(e);
+ }
+
+ if (rollerConfig != null) {
+ log.info("Found old roller config ... doing migration to new runtime properties.");
+ // copy over data
+ props.put("site.name",
+ new RollerPropertyData("site.name", rollerConfig.getSiteName()));
+ props.put("site.description",
+ new RollerPropertyData("site.description", rollerConfig.getSiteDescription()));
+ props.put("site.adminemail",
+ new RollerPropertyData("site.adminemail", rollerConfig.getEmailAddress()));
+ props.put("site.absoluteurl",
+ new RollerPropertyData("site.absoluteurl", rollerConfig.getAbsoluteURL()));
+ props.put("site.linkbacks.enabled",
+ new RollerPropertyData("site.linkbacks.enabled", rollerConfig.getEnableLinkback().toString()));
+ props.put("users.registration.enabled",
+ new RollerPropertyData("users.registration.enabled", rollerConfig.getNewUserAllowed().toString()));
+ props.put("users.themes.path",
+ new RollerPropertyData("users.themes.path", rollerConfig.getUserThemes()));
+ props.put("users.editor.pages",
+ new RollerPropertyData("users.editor.pages", rollerConfig.getEditorPages()));
+ props.put("users.comments.enabled",
+ new RollerPropertyData("users.comments.enabled", "true"));
+ props.put("users.comments.autoformat",
+ new RollerPropertyData("users.comments.autoformat", rollerConfig.getAutoformatComments().toString()));
+ props.put("users.comments.escapehtml",
+ new RollerPropertyData("users.comments.escapehtml", rollerConfig.getEscapeCommentHtml().toString()));
+ props.put("users.comments.emailnotify",
+ new RollerPropertyData("users.comments.emailnotify", rollerConfig.getEmailComments().toString()));
+ props.put("uploads.enabled",
+ new RollerPropertyData("uploads.enabled", rollerConfig.getUploadEnabled().toString()));
+ props.put("uploads.types.allowed",
+ new RollerPropertyData("uploads.types.allowed", rollerConfig.getUploadAllow()));
+ props.put("uploads.types.forbid",
+ new RollerPropertyData("uploads.types.forbid", rollerConfig.getUploadForbid()));
+ props.put("uploads.file.maxsize",
+ new RollerPropertyData("uploads.file.maxsize", rollerConfig.getUploadMaxFileMB().toString()));
+ props.put("uploads.dir.maxsize",
+ new RollerPropertyData("uploads.dir.maxsize", rollerConfig.getUploadMaxDirMB().toString()));
+ /* no longer part of runtime config
+ props.put("aggregator.enabled",
+ new RollerPropertyData("aggregator.enabled", rollerConfig.getEnableAggregator().toString()));
+ props.put("aggregator.cache.enabled",
+ new RollerPropertyData("aggregator.cache.enabled", rollerConfig.getRssUseCache().toString()));
+ props.put("aggregator.cache.timeout",
+ new RollerPropertyData("aggregator.cache.timeout", rollerConfig.getRssCacheTime().toString()));
+ props.put("debug.memory.enabled",
+ new RollerPropertyData("debug.memory.enabled", rollerConfig.getMemDebug().toString()));
+ */
+ props.put("spam.blacklist",
+ new RollerPropertyData("spam.blacklist", rollerConfig.getRefererSpamWords()));
+ } else {
+ log.info("Old roller config not found ... default values will be loaded");
+ }
+
+ return props;
+ }
+
+
+ /**
+ * This method compares the property definitions in the RuntimeConfigDefs
+ * file with the properties in the given Map and initializes any properties
+ * that were not found in the Map.
+ *
+ * If the Map of props is empty/null then we will initialize all properties.
+ **/
+ private Map initializeMissingProps(Map props) {
+
+ if(props == null)
+ props = new HashMap();
+
+ // start by getting our runtimeConfigDefs
+ RuntimeConfigDefs runtimeConfigDefs =
+ RollerRuntimeConfig.getRuntimeConfigDefs();
+
+ // can't do initialization without our config defs
+ if(runtimeConfigDefs == null)
+ return props;
+
+ // iterator through all the definitions and add properties
+ // that are not already in our props map
+ ConfigDef configDef = null;
+ DisplayGroup dGroup = null;
+ PropertyDef propDef = null;
+ Iterator defs = runtimeConfigDefs.getConfigDefs().iterator();
+ while(defs.hasNext()) {
+ configDef = (ConfigDef) defs.next();
+
+ Iterator groups = configDef.getDisplayGroups().iterator();
+ while(groups.hasNext()) {
+ dGroup = (DisplayGroup) groups.next();
+
+ Iterator propdefs = dGroup.getPropertyDefs().iterator();
+ while(propdefs.hasNext()) {
+ propDef = (PropertyDef) propdefs.next();
+
+ // do we already have this prop? if not then add it
+ if(!props.containsKey(propDef.getName())) {
+ RollerPropertyData newprop =
+ new RollerPropertyData(propDef.getName(), propDef.getDefaultValue());
+
+ props.put(propDef.getName(), newprop);
+
+ log.info("Found uninitialized property "+propDef.getName()+
+ " ... setting value to ["+propDef.getDefaultValue()+"]");
+ }
+ }
+ }
+ }
+
+ return props;
+ }
+
+
+ public void release() {}
}
Modified: incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java?rev=395393&r1=395392&r2=395393&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java Wed Apr 19 13:53:01 2006
@@ -6,10 +6,11 @@
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
-
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -23,8 +24,6 @@
import org.hibernate.criterion.Order;
import org.hibernate.type.Type;
import org.roller.RollerException;
-import org.roller.business.PersistenceStrategy;
-import org.roller.business.RefererManagerImpl;
import org.roller.config.RollerRuntimeConfig;
import org.roller.model.RefererManager;
import org.roller.pojos.RefererData;
@@ -38,34 +37,120 @@
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.engine.SessionFactoryImplementor;
import org.hibernate.dialect.Dialect;
+import org.roller.model.Roller;
+import org.roller.model.RollerFactory;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.util.DateUtil;
+import org.roller.util.LinkbackExtractor;
+import org.roller.util.Utilities;
/**
- * Hibernate queries.
- * @author David M Johnson
+ * Hibernate implementation of the RefererManager.
*/
-public class HibernateRefererManagerImpl extends RefererManagerImpl
- implements RefererManager {
+public class HibernateRefererManagerImpl implements RefererManager {
+
static final long serialVersionUID = -4966091850482256435L;
- private static Log mLogger =
- LogFactory.getFactory().getInstance(HibernateRefererManagerImpl.class);
+ private static Log log = LogFactory.getLog(HibernateRefererManagerImpl.class);
+
+ protected static final String DAYHITS = "dayHits";
+ protected static final String TOTALHITS = "totalHits";
+
+ private HibernatePersistenceStrategy strategy = null;
+ private Date mRefDate = new Date();
+ private SimpleDateFormat mDateFormat = DateUtil.get8charDateFormat();
+
+
+ public HibernateRefererManagerImpl(HibernatePersistenceStrategy strat) {
+
+ log.debug("Instantiating Hibernate Referer Manager");
+
+ strategy = strat;
+ }
+
+
+ /**
+ *
+ *
+ * @see org.roller.pojos.RefererManager#saveReferer(org.roller.pojos.RefererData)
+ */
+ public void saveReferer(RefererData referer) throws RollerException {
+ strategy.store(referer);
+ }
+
+
+ public void removeReferer(RefererData referer) throws RollerException {
+ strategy.remove(referer);
+ }
+
+
+ /**
+ * Clear referrer dayhits and remove referrers without excerpts.
+ *
+ * TODO: do we really need dialect specific queries?
+ */
+ public void clearReferrers() throws RollerException {
+
+ if (log.isDebugEnabled()) {
+ log.debug("clearReferrers");
+ }
+ try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
+ String reset = "update RefererData set dayHits=0";
+ session.createQuery(reset).executeUpdate();
+ String delete = null;
+ if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
+ delete = "delete RefererData where excerpt is null or excerpt like ''";
+ } else {
+ delete = "delete RefererData where excerpt is null or excerpt=''";
+ }
+ session.createQuery(delete).executeUpdate();
+ } catch (Exception e) {
+ log.error("EXCEPTION resetting referers",e);
+ }
+ }
+
- //-------------------------------------------------- Startup and Shutdown
- public HibernateRefererManagerImpl(PersistenceStrategy support)
- throws RollerException {
- super();
- mStrategy = (HibernateStrategy)support;
- mLogger.debug("Instantiating Referer Manager");
+ /**
+ * Clear referrer dayhits and remove referrers without excerpts.
+ *
+ * TODO: do we really need dialect specific queries?
+ */
+ public void clearReferrers(WebsiteData website) throws RollerException {
+
+ if (log.isDebugEnabled()) {
+ log.debug("clearReferrers");
+ }
+ try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
+ String reset = "update RefererData set dayHits=0 where website=:site";
+ session.createQuery(reset)
+ .setParameter("site",website).executeUpdate();
+ String delete = null;
+ if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
+ delete = "delete RefererData where website=:site and (excerpt is null or excerpt like '')";
+ } else {
+ delete = "delete RefererData where website=:site and (excerpt is null or excerpt='')";
+ }
+ session.createQuery(delete)
+ .setParameter("site",website).executeUpdate();
+ } catch (Exception e) {
+ log.error("EXCEPTION resetting referers",e);
+ }
}
- //-----------------------------------------------------------------------
+
/**
* Apply ignoreWord/spam filters to all referers in system.
*/
public void applyRefererFilters() throws RollerException {
+
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
Criteria criteria = session.createCriteria(RefererData.class);
String spamwords = RollerRuntimeConfig.getProperty("spam.blacklist");
@@ -75,6 +160,7 @@
Junction or = Expression.disjunction();
for (int i=0; i<blacklist.length; i++) {
String ignoreWord = blacklist[i].trim();
+ //log.debug("including ignore word - "+ignoreWord);
or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
}
criteria.add(Expression.conjunction()
@@ -82,25 +168,29 @@
.add(or)
);
- Iterator referers = criteria.list().iterator();
- while (referers.hasNext()) {
- removeReferer( ((RefererData)referers.next()).getId() );
+ log.debug("removing spam referers - "+criteria.list().size());
+
+ Iterator referer = criteria.list().iterator();
+ while (referer.hasNext()) {
+ this.strategy.remove((RefererData) referer.next());
}
+
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
+
/**
* Apply ignoreWord/spam filters to all referers in website.
*/
public void applyRefererFilters(WebsiteData website) throws RollerException {
+
if (null == website) throw new RollerException("website is null");
if (null == website.getBlacklist()) return;
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
Criteria criteria = session.createCriteria(RefererData.class);
String[] blacklist = StringUtils.split(
@@ -118,62 +208,65 @@
.add(or)
);
- Iterator referers = criteria.list().iterator();
- while (referers.hasNext()) {
- removeReferer( ((RefererData)referers.next()).getId() );
+ Iterator referer = criteria.list().iterator();
+ while (referer.hasNext()) {
+ this.strategy.remove((RefererData) referer.next());
}
+
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* Use Hibernate directly because Roller's Query API does too much allocation.
*/
protected List getExistingReferers(WebsiteData website, String dateString,
String permalink) throws RollerException {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.conjunction()
- .add(Expression.eq("website",website))
- .add(Expression.eq("dateString",dateString))
- .add(Expression.eq("refererPermalink",permalink)));
+
try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.conjunction()
+ .add(Expression.eq("website",website))
+ .add(Expression.eq("dateString",dateString))
+ .add(Expression.eq("refererPermalink",permalink)));
+
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* Use Hibernate directly because Roller's Query API does too much allocation.
*/
protected List getMatchingReferers(WebsiteData website, String requestUrl,
String refererUrl) throws RollerException {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.conjunction()
- .add(Expression.eq("website",website))
- .add(Expression.eq("requestUrl",requestUrl))
- .add(Expression.eq("refererUrl",refererUrl)));
+
try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.conjunction()
+ .add(Expression.eq("website",website))
+ .add(Expression.eq("requestUrl",requestUrl))
+ .add(Expression.eq("refererUrl",refererUrl)));
+
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* Use raw SQL because Hibernate can't handle sorting by sum.
+ *
+ * TODO: do we really need raw sql? can't hibernate do this?
*/
public List getDaysPopularWebsites(int max) throws RollerException {
- // TODO Hibernate version of getDaysPopularWebsites
// TODO Move to full use of mSupport
String msg = "Getting popular websites";
Session ses = null; // the session will eventually be release by RequestFilter
@@ -181,7 +274,7 @@
try {
List list = new ArrayList();
- ses = ((HibernateStrategy)mStrategy).getSession();
+ ses = ((HibernatePersistenceStrategy)strategy).getSession();
con = ses.connection();
final PreparedStatement stmt;
@@ -191,57 +284,57 @@
if (currentDialect instanceof HSQLDialect) {
// special handling for HSQLDB
stmt = con.prepareStatement(
- "select top ? w.id, w.name, w.handle, sum(r.dayhits) as s "+
- "from website as w, referer as r "+
- "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
- "group by w.name, w.handle, w.id order by s desc");
+ "select top ? w.id, w.name, w.handle, sum(r.dayhits) as s "+
+ "from website as w, referer as r "+
+ "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
+ "group by w.name, w.handle, w.id order by s desc");
stmt.setInt(1, max);
stmt.setBoolean(2, true);
stmt.setBoolean(3, true);
} else if(currentDialect instanceof DerbyDialect) {
- // special handling for Derby
- stmt = con.prepareStatement(
- "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
- "from website as w, referer as r "+
- "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
- "group by w.name, w.handle, w.id order by s desc");
- stmt.setBoolean(1, true);
+ // special handling for Derby
+ stmt = con.prepareStatement(
+ "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
+ "from website as w, referer as r "+
+ "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
+ "group by w.name, w.handle, w.id order by s desc");
+ stmt.setBoolean(1, true);
stmt.setBoolean(2, true);
stmt.setMaxRows(max);
} else if(currentDialect instanceof DB2Dialect) {
// special handling for IBM DB2
stmt = con.prepareStatement(
- "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
- "from website as w, referer as r "+
- "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
- "group by w.name, w.handle, w.id order by s desc fetch first " +
- Integer.toString(max) + " rows only");
+ "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
+ "from website as w, referer as r "+
+ "where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
+ "group by w.name, w.handle, w.id order by s desc fetch first " +
+ Integer.toString(max) + " rows only");
stmt.setBoolean(1, true);
stmt.setBoolean(2, true);
} else if (currentDialect instanceof OracleDialect) {
- stmt = con.prepareStatement(
- "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
- "from website w, referer r "+
- "where r.websiteid=w.id and w.isenabled=? and w.isactive=? and rownum <= ? " +
- "group by w.name, w.handle, w.id order by s desc");
- stmt.setBoolean(1, true);
- stmt.setBoolean(2, true);
- stmt.setInt(3, max );
+ stmt = con.prepareStatement(
+ "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
+ "from website w, referer r "+
+ "where r.websiteid=w.id and w.isenabled=? and w.isactive=? and rownum <= ? " +
+ "group by w.name, w.handle, w.id order by s desc");
+ stmt.setBoolean(1, true);
+ stmt.setBoolean(2, true);
+ stmt.setInt(3, max );
} else if (currentDialect instanceof SQLServerDialect) {
- stmt = con.prepareStatement("select top " + max + " w.id, w.name, w.handle, sum(r.dayhits) as s " +
- "from website as w, referer as r where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
- "group by w.name, w.handle, w.id order by s desc");
- stmt.setBoolean(1, true);
+ stmt = con.prepareStatement("select top " + max + " w.id, w.name, w.handle, sum(r.dayhits) as s " +
+ "from website as w, referer as r where r.websiteid=w.id and w.isenabled=? and w.isactive=? " +
+ "group by w.name, w.handle, w.id order by s desc");
+ stmt.setBoolean(1, true);
stmt.setBoolean(2, true);
} else { // for MySQL and PostgreSQL
stmt = con.prepareStatement(
- "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
- "from website as w, referer as r "+
- "where r.websiteid=w.id and w.isenabled= ? and w.isactive=? " +
- // Ben Walding (a Postgres SQL user): Basically, you have
- // to have all non-aggregated columns that exist in your
- // 'SELECT' section, in the 'GROUP BY' section as well:
- "group by w.name, w.handle, w.id order by s desc limit ?");
+ "select w.id, w.name, w.handle, sum(r.dayhits) as s "+
+ "from website as w, referer as r "+
+ "where r.websiteid=w.id and w.isenabled= ? and w.isactive=? " +
+ // Ben Walding (a Postgres SQL user): Basically, you have
+ // to have all non-aggregated columns that exist in your
+ // 'SELECT' section, in the 'GROUP BY' section as well:
+ "group by w.name, w.handle, w.id order by s desc limit ?");
stmt.setBoolean(1, true);
stmt.setBoolean(2, true);
stmt.setInt(3, max);
@@ -260,38 +353,39 @@
websiteHandle,
hits));
if(list.size() >= max) {
- rs.close();
- break;
+ rs.close();
+ break;
}
}
while ( rs.next() );
}
return list;
} catch (Throwable pe) {
- mLogger.error(msg, pe);
+ log.error(msg, pe);
throw new RollerException(msg, pe);
- }
+ }
}
- //-----------------------------------------------------------------------
/**
* Use raw SQL because Hibernate can't handle the query.
*/
- protected int getHits(WebsiteData website, String type)
- throws RollerException {
+ protected int getHits(WebsiteData website, String type) throws RollerException {
int hits = 0;
- if (mLogger.isDebugEnabled()) {
- mLogger.debug("getHits: " + website.getName());
+ if (log.isDebugEnabled()) {
+ log.debug("getHits: " + website.getName());
}
Object[] args = { Boolean.TRUE, website.getId() };
Type[] types = { Hibernate.BOOLEAN, Hibernate.STRING };
// For a query like this, Hibernate returns a list of lists
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
List results;
try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
Query q = session.createQuery(
"select sum(h.dayHits),sum(h.totalHits) from h in class " +
"org.roller.pojos.RefererData " +
@@ -318,6 +412,7 @@
return hits;
}
+
/**
* @see org.roller.pojos.RefererManager#getReferers(java.lang.String)
*/
@@ -325,40 +420,39 @@
if (website==null )
throw new RollerException("website is null");
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.eq("website",website));
- criteria.addOrder(Order.desc("totalHits"));
try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website",website));
+ criteria.addOrder(Order.desc("totalHits"));
+
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- //-----------------------------------------------------------------------
+
/**
* @see org.roller.pojos.RefererManager#getTodaysReferers(String)
*/
- public List getTodaysReferers(WebsiteData website)
- throws RollerException {
+ public List getTodaysReferers(WebsiteData website) throws RollerException {
if (website==null )
throw new RollerException("website is null");
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.eq("website", website));
- criteria.add(Expression.gt("dayHits", new Integer(0)));
- criteria.addOrder(Order.desc("dayHits"));
try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.gt("dayHits", new Integer(0)));
+ criteria.addOrder(Order.desc("dayHits"));
+
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* Returns referers for a specified day. Duplicate enties are not
@@ -367,27 +461,27 @@
* org.roller.pojos.WebsiteData, java.lang.String)
*/
public List getReferersToDate(WebsiteData website, String date)
- throws RollerException {
+ throws RollerException {
if (website==null )
throw new RollerException("website is null");
if (date==null )
throw new RollerException("Date is null");
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.eq("website", website));
- criteria.add(Expression.eq("dateString", date));
- criteria.add(Expression.eq("duplicate", Boolean.FALSE));
- criteria.addOrder(Order.desc("totalHits"));
try {
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.eq("dateString", date));
+ criteria.add(Expression.eq("duplicate", Boolean.FALSE));
+ criteria.addOrder(Order.desc("totalHits"));
+
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* @see org.roller.pojos.RefererManager#getReferersToEntry(
@@ -398,7 +492,7 @@
throw new RollerException("entryid is null");
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
Criteria criteria = session.createCriteria(RefererData.class);
criteria.createAlias("weblogEntry","e");
@@ -414,62 +508,37 @@
}
}
- //-----------------------------------------------------------------------
/**
- * @see org.roller.pojos.RefererManager#getReferersToEntry(
- * java.lang.String, java.lang.String)
+ * Query for collection of referers.
*/
- public void removeReferersForEntry(String entryid) throws RollerException {
- if (null == entryid)
- throw new RollerException("entryid is null");
+ protected List getReferersToWebsite(WebsiteData website, String refererUrl)
+ throws RollerException {
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
Criteria criteria = session.createCriteria(RefererData.class);
- criteria.createAlias("weblogEntry","e");
- criteria.add(Expression.eq("e.id", entryid));
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.eq("refererUrl", refererUrl));
- Iterator referers = criteria.list().iterator();
- while (referers.hasNext()) {
- removeReferer( ((RefererData)referers.next()).getId() );
- }
- } catch (HibernateException e) {
- throw new RollerException(e);
- }
- }
-
- //-----------------------------------------------------------------------
-
- /**
- * Query for collection of referers.
- */
- protected List getReferersToWebsite(WebsiteData website, String refererUrl)
- throws RollerException {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(RefererData.class);
- criteria.add(Expression.eq("website", website));
- criteria.add(Expression.eq("refererUrl", refererUrl));
- try {
return criteria.list();
} catch (HibernateException e) {
throw new RollerException(e);
}
}
- //-----------------------------------------------------------------------
/**
* Query for collection of referers.
*/
- protected List getReferersWithSameTitle(
- WebsiteData website,
- String requestUrl,
- String title,
- String excerpt)
+ protected List getReferersWithSameTitle(WebsiteData website,
+ String requestUrl,
+ String title,
+ String excerpt)
throws RollerException {
+
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ Session session = ((HibernatePersistenceStrategy)strategy).getSession();
Criteria criteria = session.createCriteria(RefererData.class);
Junction conjunction = Expression.conjunction();
@@ -489,57 +558,291 @@
}
}
+
+ public int getDayHits(WebsiteData website) throws RollerException {
+ return getHits(website, DAYHITS);
+ }
+
+
+ public int getTotalHits(WebsiteData website) throws RollerException {
+ return getHits(website, TOTALHITS);
+ }
+
+
/**
- * Clear referrer dayhits and remove referrers without excerpts.
+ * @see org.roller.pojos.RefererManager#retrieveReferer(java.lang.String)
*/
- public void clearReferrers() throws RollerException {
-
- if (mLogger.isDebugEnabled()) {
- mLogger.debug("clearReferrers");
- }
+ public RefererData getReferer(String id) throws RollerException {
+ return (RefererData)strategy.load(id,RefererData.class);
+ }
+
+
+ public void processReferrer(String requestUrl,
+ String referrerUrl,
+ String weblogHandle,
+ String entryAnchor,
+ String dateString) {
+
+ log.debug("processing referrer ["+referrerUrl+
+ "] accessing ["+requestUrl+"]");
+
+ if (weblogHandle == null)
+ return;
+
+ String selfSiteFragment = "/page/"+weblogHandle;
+ WebsiteData weblog = null;
+ WeblogEntryData entry = null;
+
+ // lookup the weblog now
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
- String reset = "update RefererData set dayHits=0";
- session.createQuery(reset).executeUpdate();
- String delete = null;
- if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
- delete = "delete RefererData where excerpt is null or excerpt like ''";
+ UserManager userMgr = RollerFactory.getRoller().getUserManager();
+ weblog = userMgr.getWebsiteByHandle(weblogHandle);
+ if (weblog == null) return;
+
+ // now lookup weblog entry if possible
+ if (entryAnchor != null) {
+ WeblogManager weblogMgr = RollerFactory.getRoller().getWeblogManager();
+ entry = weblogMgr.getWeblogEntryByAnchor(weblog, entryAnchor);
+ }
+ } catch (RollerException re) {
+ // problem looking up website, gotta bail
+ log.error("Error looking up website object", re);
+ return;
+ }
+
+ try {
+ List matchRef = null;
+
+ // try to find existing RefererData for referrerUrl
+ if (referrerUrl == null || referrerUrl.trim().length() < 8) {
+ referrerUrl = "direct";
+
+ // Get referer specified by referer URL of direct
+ matchRef = getReferersToWebsite(weblog, referrerUrl);
} else {
- delete = "delete RefererData where excerpt is null or excerpt=''";
+ referrerUrl = Utilities.stripJsessionId(referrerUrl);
+
+ // Query for referer with same referer and request URLs
+ matchRef = getMatchingReferers(weblog, requestUrl, referrerUrl);
+
+ // If referer was not found, try adding or leaving off 'www'
+ if ( matchRef.size() == 0 ) {
+ String secondTryUrl = null;
+ if ( referrerUrl.startsWith("http://www") ) {
+ secondTryUrl = "http://"+referrerUrl.substring(11);
+ } else {
+ secondTryUrl = "http://www"+referrerUrl.substring(7);
+ }
+
+ matchRef = getMatchingReferers(weblog, requestUrl, secondTryUrl);
+ if ( matchRef.size() == 1 ) {
+ referrerUrl = secondTryUrl;
+ }
+ }
}
- session.createQuery(delete).executeUpdate();
- } catch (Exception e) {
- mLogger.error("EXCEPTION resetting referers",e);
+
+ if (matchRef.size() == 1) {
+ // Referer was found in database, so bump up hit count
+ RefererData ref = (RefererData)matchRef.get(0);
+
+ ref.setDayHits(new Integer(ref.getDayHits().intValue() + 1));
+ ref.setTotalHits(new Integer(ref.getTotalHits().intValue() + 1));
+
+ log.debug("Incrementing hit count on existing referer: "+referrerUrl);
+
+ saveReferer(ref);
+
+ } else if (matchRef.size() == 0) {
+
+ // Referer was not found in database, so new Referer object
+ Integer one = new Integer(1);
+ RefererData ref =
+ new RefererData(
+ null,
+ weblog,
+ entry,
+ dateString,
+ referrerUrl,
+ null,
+ requestUrl,
+ null,
+ "", // Read comment above regarding Derby bug
+ Boolean.FALSE,
+ Boolean.FALSE,
+ one,
+ one);
+
+ if (log.isDebugEnabled()) {
+ log.debug("newReferer="+ref.getRefererUrl());
+ }
+
+ String refurl = ref.getRefererUrl();
+
+ // If not a direct or search engine then search for linkback
+ boolean doLinkbackExtraction =
+ RollerRuntimeConfig.getBooleanProperty("site.linkbacks.enabled");
+ if (doLinkbackExtraction
+ && entry != null
+ && !refurl.equals("direct")
+ && !refurl.startsWith("http://google")
+ && !refurl.startsWith("http://www.google")
+ && !refurl.startsWith("http://search.netscape")
+ && !refurl.startsWith("http://www.blinkpro")
+ && !refurl.startsWith("http://search.msn")
+ && !refurl.startsWith("http://search.yahoo")
+ && !refurl.startsWith("http://uk.search.yahoo")
+ && !refurl.startsWith("http://www.javablogs.com")
+ && !refurl.startsWith("http://www.teoma")
+ ) {
+ // Launch thread to extract referer linkback
+
+ try {
+ Roller mRoller = RollerFactory.getRoller();
+ mRoller.getThreadManager().executeInBackground(
+ new LinkbackExtractorRunnable(ref));
+ } catch (InterruptedException e) {
+ log.warn("Interrupted during linkback extraction",e);
+ }
+ } else {
+ saveReferer(ref);
+ }
+ }
+ } catch (RollerException pe) {
+ log.error(pe);
+ } catch (NullPointerException npe) {
+ log.error(npe);
}
- }
+ }
+
/**
- * Clear referrer dayhits and remove referrers without excerpts.
- */
- public void clearReferrers(WebsiteData website) throws RollerException {
-
- if (mLogger.isDebugEnabled()) {
- mLogger.debug("clearReferrers");
- }
- try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Dialect currentDialect = ((SessionFactoryImplementor)session.getSessionFactory()).getDialect();
- String reset = "update RefererData set dayHits=0 where website=:site";
- session.createQuery(reset)
- .setParameter("site",website).executeUpdate();
- String delete = null;
- if ( currentDialect instanceof SQLServerDialect || currentDialect instanceof OracleDialect ){
- delete = "delete RefererData where website=:site and (excerpt is null or excerpt like '')";
- } else {
- delete = "delete RefererData where website=:site and (excerpt is null or excerpt='')";
+ * Use LinkbackExtractor to parse title and excerpt from referer
+ */
+ class LinkbackExtractorRunnable implements Runnable {
+
+ private RefererData mReferer = null;
+
+ public LinkbackExtractorRunnable( RefererData referer) {
+ mReferer = referer;
+ }
+
+ public void run() {
+
+ try {
+ LinkbackExtractor lb = new LinkbackExtractor(
+ mReferer.getRefererUrl(),mReferer.getRequestUrl());
+
+ if ( lb.getTitle()!=null && lb.getExcerpt()!=null ) {
+ mReferer.setTitle(lb.getTitle());
+ mReferer.setExcerpt(lb.getExcerpt());
+
+ if ( lb.getPermalink() != null ) {
+ // The presence of a permalink indicates that this
+ // linkback was parsed out of an RSS feed and is
+ // presumed to be a good linkback.
+
+ mReferer.setRefererPermalink(lb.getPermalink());
+
+ // See if this request/permalink is in the DB
+ List matchRef = getExistingReferers(
+ mReferer.getWebsite(),
+ mReferer.getDateString(),
+ mReferer.getRefererPermalink());
+
+ // If it is the first, then set it to be visible
+ if ( matchRef.size() == 0 ) {
+ mReferer.setVisible(Boolean.TRUE);
+ } else {
+ // We can't throw away duplicates or we will
+ // end up reparsing them everytime a hit comes
+ // in from one of them, but we can mark them
+ // as duplicates.
+ mReferer.setDuplicate(Boolean.TRUE);
+ }
+
+ saveReferer(mReferer);
+
+ }
+
+ else {
+ // Store the new referer
+ saveReferer(mReferer);
+
+ // Hacky Referer URL weighting kludge:
+ //
+ // If there are multple referers to a request URL,
+ // then we want to pick the best one. The others
+ // are marked as duplicates. To do this we use a
+ // weight. The weight formula is:
+ //
+ // w = URL length + (100 if URL contains anchor)
+
+ // LOOP: find the referer with the highest weight
+ Boolean visible = Boolean.FALSE;
+ List refs= getReferersWithSameTitle(
+ mReferer.getWebsite(),
+ mReferer.getRequestUrl(),
+ lb.getTitle(),
+ lb.getExcerpt());
+ RefererData chosen = null;
+ int maxweight = 0;
+ for (Iterator rdItr = refs.iterator();rdItr.hasNext();) {
+ RefererData referer = (RefererData) rdItr.next();
+
+ int weight = referer.getRefererUrl().length();
+ if (referer.getRefererUrl().indexOf('#') != -1) {
+ weight += 100;
+ }
+
+ if ( weight > maxweight ) {
+ chosen = referer;
+ maxweight = weight;
+ }
+
+ if (referer.getVisible().booleanValue()) {
+ // If any are visible then chosen
+ // replacement must be visible as well.
+ visible = Boolean.TRUE;
+ }
+
+ }
+
+ // LOOP: to mark all of the lower weight ones
+ // as duplicates
+ for (Iterator rdItr = refs.iterator();rdItr.hasNext();) {
+ RefererData referer = (RefererData) rdItr.next();
+
+ if (referer != chosen) {
+ referer.setDuplicate(Boolean.TRUE);
+ } else {
+ referer.setDuplicate(Boolean.FALSE);
+ referer.setVisible(visible);
+ }
+ saveReferer(referer);
+ }
+
+
+ }
+ } else {
+ // It is not a linkback, but store it anyway
+ saveReferer(mReferer);
+
+ log.info("No excerpt found at refering URL "
+ + mReferer.getRefererUrl());
+ }
+ } catch (Exception e) {
+ log.error("Processing linkback",e);
+ } finally {
+ strategy.release();
}
- session.createQuery(delete)
- .setParameter("site",website).executeUpdate();
- } catch (Exception e) {
- mLogger.error("EXCEPTION resetting referers",e);
+
}
- }
+
+ }
+
+
+ public void release() {}
+
}
Modified: incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRollerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRollerImpl.java?rev=395393&r1=395392&r2=395393&view=diff
==============================================================================
--- incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRollerImpl.java (original)
+++ incubator/roller/trunk/src/org/roller/business/hibernate/HibernateRollerImpl.java Wed Apr 19 13:53:01 2006
@@ -3,14 +3,10 @@
*/
package org.roller.business.hibernate;
-import org.hibernate.HibernateException;
-import org.hibernate.SessionFactory;
-import org.hibernate.cfg.Configuration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.roller.RollerException;
-import org.roller.business.PersistenceStrategy;
-import org.roller.business.utils.UpgradeDatabase;
+import org.roller.business.RollerImpl;
import org.roller.model.BookmarkManager;
import org.roller.model.ConfigManager;
import org.roller.model.AutoPingManager;
@@ -22,66 +18,51 @@
import org.roller.model.Roller;
import org.roller.model.UserManager;
import org.roller.model.WeblogManager;
-import org.roller.pojos.UserData;
-import java.sql.Connection;
/**
- * Implements Roller, the entry point interface for the Roller business tier APIs.
- * Hibernate specific implementation.
- *
- * @author David M Johnson
+ * A Hibernate specific implementation of the Roller business layer.
*/
-public class HibernateRollerImpl extends org.roller.business.RollerImpl
-{
+public class HibernateRollerImpl extends RollerImpl {
+
static final long serialVersionUID = 5256135928578074652L;
-
- private static Log mLogger =
- LogFactory.getFactory().getInstance(HibernateRollerImpl.class);
- protected BookmarkManager mBookmarkManager;
- protected ConfigManager mConfigManager = null;
- protected PropertiesManager mPropsManager = null;
- protected PlanetManager planetManager = null;
- protected RefererManager mRefererManager;
- protected UserManager mUserManager;
- protected WeblogManager mWeblogManager;
- protected PingQueueManager mPingQueueManager;
- protected AutoPingManager mAutoPingManager;
- protected PingTargetManager mPingTargetManager;
- protected static HibernateRollerImpl me;
- protected PersistenceStrategy mStrategy = null;
- protected static SessionFactory mSessionFactory;
-
-
- protected HibernateRollerImpl() throws RollerException
- {
- mLogger.debug("Initializing sessionFactory for Hibernate");
-
- try
- {
- Configuration config = new Configuration();
- config.configure("/hibernate.cfg.xml");
- mSessionFactory = config.buildSessionFactory();
- }
- catch (HibernateException e)
- {
- mLogger.error("Error Setting up SessionFactory",e);
- throw new RollerException(e);
+ private static Log mLogger = LogFactory.getLog(HibernateRollerImpl.class);
+
+ // our singleton instance
+ private static HibernateRollerImpl me = null;
+
+ // a persistence utility class
+ private HibernatePersistenceStrategy strategy = null;
+
+ // references to the managers we maintain
+ private BookmarkManager bookmarkManager = null;
+ private ConfigManager configManager = null;
+ private PropertiesManager propertiesManager = null;
+ private PlanetManager planetManager = null;
+ private RefererManager refererManager = null;
+ private UserManager userManager = null;
+ private WeblogManager weblogManager = null;
+ private PingQueueManager pingQueueManager = null;
+ private AutoPingManager autoPingManager = null;
+ private PingTargetManager pingTargetManager = null;
+
+
+ protected HibernateRollerImpl() throws RollerException {
+ try {
+ strategy = new HibernatePersistenceStrategy();
+ } catch(Throwable t) {
+ // if this happens then we are screwed
+ throw new RollerException(t);
}
-
- mStrategy = new HibernateStrategy(mSessionFactory);
}
-
+
/**
* Instantiates and returns an instance of HibernateRollerImpl.
- * @see org.roller.model.RollerFactory
*/
- public static Roller instantiate() throws RollerException
- {
- if (me == null)
- {
+ public static Roller instantiate() throws RollerException {
+ if (me == null) {
mLogger.debug("Instantiating HibernateRollerImpl");
me = new HibernateRollerImpl();
}
@@ -89,219 +70,142 @@
return me;
}
-
- public void begin() throws RollerException
- {
- mStrategy.begin(UserData.ANONYMOUS_USER);
- }
- public void begin(UserData user) throws RollerException
- {
- mStrategy.begin(user);
+ public void flush() throws RollerException {
+ this.strategy.flush();
}
- public UserData getUser() throws RollerException
- {
- return mStrategy.getUser();
- }
- public void setUser(UserData user) throws RollerException
- {
- mStrategy.setUser(user);
+ public void release() {
+
+ // release our own stuff first
+ if (bookmarkManager != null) bookmarkManager.release();
+ if (configManager != null) configManager.release();
+ if (refererManager != null) refererManager.release();
+ if (userManager != null) userManager.release();
+ if (weblogManager != null) weblogManager.release();
+ if (pingTargetManager != null) pingTargetManager.release();
+ if (pingQueueManager != null) pingQueueManager.release();
+ if (autoPingManager != null) autoPingManager.release();
+
+ // tell Hibernate to close down
+ this.strategy.release();
+
+ // then let parent do its thing
+ super.release();
}
- public void commit() throws RollerException
- {
- mStrategy.commit();
+
+ public void shutdown() {
+
+ // do our own shutdown first
+ this.release();
+
+ // then let parent do its thing
+ super.shutdown();
}
- public void rollback()
- {
- try
- {
- mStrategy.rollback();
- }
- catch (Throwable e)
- {
- mLogger.error(e);
- }
- }
-
- /**
+
+ /**
* @see org.roller.model.Roller#getUserManager()
*/
- public UserManager getUserManager() throws RollerException
- {
- if ( mUserManager == null )
- {
- mUserManager = new HibernateUserManagerImpl(mStrategy);
+ public UserManager getUserManager() throws RollerException {
+ if ( userManager == null ) {
+ userManager = new HibernateUserManagerImpl(strategy);
}
- return mUserManager;
+ return userManager;
}
-
- /**
+
+ /**
* @see org.roller.model.Roller#getBookmarkManager()
*/
- public BookmarkManager getBookmarkManager() throws RollerException
- {
- if ( mBookmarkManager == null )
- {
- mBookmarkManager = new HibernateBookmarkManagerImpl(mStrategy);
+ public BookmarkManager getBookmarkManager() throws RollerException {
+ if ( bookmarkManager == null ) {
+ bookmarkManager = new HibernateBookmarkManagerImpl(strategy);
}
- return mBookmarkManager;
+ return bookmarkManager;
}
-
- /**
+
+ /**
* @see org.roller.model.Roller#getWeblogManager()
*/
- public WeblogManager getWeblogManager() throws RollerException
- {
- if ( mWeblogManager == null )
- {
- mWeblogManager = new HibernateWeblogManagerImpl(mStrategy);
+ public WeblogManager getWeblogManager() throws RollerException {
+ if ( weblogManager == null ) {
+ weblogManager = new HibernateWeblogManagerImpl(strategy);
}
- return mWeblogManager;
+ return weblogManager;
}
-
- /**
+
+ /**
* @see org.roller.model.Roller#getRefererManager()
*/
- public RefererManager getRefererManager() throws RollerException
- {
- if ( mRefererManager == null )
- {
- mRefererManager = new HibernateRefererManagerImpl(mStrategy);
+ public RefererManager getRefererManager() throws RollerException {
+ if ( refererManager == null ) {
+ refererManager = new HibernateRefererManagerImpl(strategy);
}
- return mRefererManager;
+ return refererManager;
}
-
+
/**
* @see org.roller.model.Roller#getConfigManager()
*/
- public ConfigManager getConfigManager() throws RollerException
- {
- if (mConfigManager == null)
- {
- mConfigManager = new HibernateConfigManagerImpl(mStrategy);
+ public ConfigManager getConfigManager() throws RollerException {
+ if (configManager == null) {
+ configManager = new HibernateConfigManagerImpl(strategy);
}
- return mConfigManager;
+ return configManager;
}
/**
* @see org.roller.model.Roller#getPropertiesManager()
*/
- public PropertiesManager getPropertiesManager() throws RollerException
- {
- if (mPropsManager == null)
- {
- mPropsManager = new HibernatePropertiesManagerImpl(mStrategy);
+ public PropertiesManager getPropertiesManager() throws RollerException {
+ if (propertiesManager == null) {
+ propertiesManager = new HibernatePropertiesManagerImpl(strategy);
}
- return mPropsManager;
+ return propertiesManager;
}
-
+
/**
* @see org.roller.model.Roller#getPingTargetManager()
*/
- public PingQueueManager getPingQueueManager() throws RollerException
- {
- if (mPingQueueManager == null)
- {
- mPingQueueManager = new HibernatePingQueueManagerImpl(mStrategy);
+ public PingQueueManager getPingQueueManager() throws RollerException {
+ if (pingQueueManager == null) {
+ pingQueueManager = new HibernatePingQueueManagerImpl(strategy);
}
- return mPingQueueManager;
+ return pingQueueManager;
}
-
+
/**
* @see org.roller.model.Roller#getPlanetManager()
*/
- public PlanetManager getPlanetManager() throws RollerException
- {
- if ( planetManager == null )
- {
- planetManager = new HibernatePlanetManagerImpl(mStrategy,this);
+ public PlanetManager getPlanetManager() throws RollerException {
+ if ( planetManager == null ) {
+ planetManager = new HibernateRollerPlanetManagerImpl(strategy);
}
return planetManager;
}
-
-
+
+
/**
* @see org.roller.model.Roller#getPingTargetManager()
*/
- public AutoPingManager getAutopingManager() throws RollerException
- {
- if (mAutoPingManager == null)
- {
- mAutoPingManager = new HibernateAutoPingManagerImpl(mStrategy);
+ public AutoPingManager getAutopingManager() throws RollerException {
+ if (autoPingManager == null) {
+ autoPingManager = new HibernateAutoPingManagerImpl(strategy);
}
- return mAutoPingManager;
+ return autoPingManager;
}
-
-
+
+
/**
* @see org.roller.model.Roller#getPingTargetManager()
*/
- public PingTargetManager getPingTargetManager() throws RollerException
- {
- if (mPingTargetManager == null)
- {
- mPingTargetManager = new HibernatePingTargetManagerImpl(mStrategy);
+ public PingTargetManager getPingTargetManager() throws RollerException {
+ if (pingTargetManager == null) {
+ pingTargetManager = new HibernatePingTargetManagerImpl(strategy);
}
- return mPingTargetManager;
- }
-
-
- /**
- * @see org.roller.model.Roller#getPersistenceStrategy()
- */
- public PersistenceStrategy getPersistenceStrategy()
- {
- return mStrategy;
+ return pingTargetManager;
}
- /**
- * @see org.roller.model.Roller#upgradeDatabase(java.sql.Connection)
- */
- public void upgradeDatabase(Connection con) throws RollerException
- {
- UpgradeDatabase.upgradeDatabase(con);
- }
-
- public void release()
- {
- super.release();
-
- if (mBookmarkManager != null) mBookmarkManager.release();
- if (mConfigManager != null) mConfigManager.release();
- if (mRefererManager != null) mRefererManager.release();
- if (mUserManager != null) mUserManager.release();
- if (mWeblogManager != null) mWeblogManager.release();
- if (mPingTargetManager != null) mPingTargetManager.release();
- if (mPingQueueManager != null) mPingQueueManager.release();
- if (mAutoPingManager != null) mAutoPingManager.release();
-
- try
- {
- if (mStrategy != null) mStrategy.release();
- }
- catch (Throwable e)
- {
- mLogger.error(
- "Exception with mSupport.release() [" + e + "]", e);
- }
- }
-
- public void shutdown()
- {
- super.shutdown();
-
- try
- {
- release();
- mSessionFactory.close();
- }
- catch (HibernateException e)
- {
- mLogger.error("Unable to close SessionFactory", e);
- }
- }
}