📄 castorsqlpreferencespersistence.java
字号:
/*** * jwma Java WebMail * Copyright (c) 2000-2003 jwma team * * jwma is free software; you can distribute and use this source * under the terms of the BSD-style license received along with * the distribution. ***/package dtw.webmail.plugin.std;import dtw.webmail.JwmaKernel;import dtw.webmail.JwmaSession;import dtw.webmail.model.JwmaException;import dtw.webmail.model.JwmaPreferencesImpl;import dtw.webmail.model.JwmaMailIdentityImpl;import dtw.webmail.plugin.PreferencesPersistencePlugin;import dtw.webmail.util.CastorDatabase;import dtw.webmail.util.CastorDatabasePool;import dtw.webmail.util.JwmaSettings;import dtw.webmail.util.config.JwmaConfiguration;import dtw.webmail.util.config.PostOffice;import org.apache.log4j.Logger;import org.exolab.castor.jdo.Query;import java.io.FileReader;import java.io.FileWriter;/** * A <tt>PreferencesPersistancePlugin</tt> implementation * based on Castor JDO. * <p> * Stores the preferences in a database. * * @author Dieter Wimberger * @version 0.9.7 07/02/2003 */public class CastorSQLPreferencesPersistence implements PreferencesPersistencePlugin { //logging private static Logger log = Logger.getLogger(CastorSQLPreferencesPersistence.class); private String m_PreferencesTemplateFile; private CastorPreferences m_PreferencesTemplate; private CastorDatabasePool m_DBPool; public JwmaPreferencesImpl loadPreferences(String identity) throws JwmaException { CastorPreferences prefs = null; CastorDatabase db = null; try { db = m_DBPool.leaseDatabase(); //Begin transaction db.begin(); //get cached query Query oql = db.getQuery( JwmaDatabase.PREFINSTANCE_BYUSERID ); //bind param oql.bind(identity); //retrieve prefs instance prefs = (CastorPreferences) oql.execute().next(); //end transaction db.commit(); } catch (Exception ex) { throw new JwmaException("").setException(ex); } finally { //release the database m_DBPool.releaseDatabase(db); } return prefs; }//loadPreferences public void savePreferences(JwmaPreferencesImpl prefs) throws JwmaException { CastorDatabase db = null; CastorPreferences cprefs = (CastorPreferences) prefs; try { db = m_DBPool.leaseDatabase(); // Begin a transaction db.begin(); //check if the preferences are not persistent yet. //simplest is if the timestamp is not zero. if (cprefs.jdoGetTimeStamp() != 0) { cprefs.updatePreferences(db.getDatabase()); } else { cprefs.persistPreferences(db.getDatabase()); } // Commit the transaction db.commit(); } catch (Exception ex) { throw new JwmaException("").setException(ex); } finally { m_DBPool.releaseDatabase(db); } }//savePreferences public boolean isPersistent(String identity) throws JwmaException { //FIXME:This is definately not very efficient, but //if ok, and castor caches..hmm if (identity == null || identity.length() == 0) { return false; } CastorDatabase db = null; boolean exists = false; try { db = m_DBPool.leaseDatabase(); //Begin transaction db.begin(); //get cached query Query oql = db.getQuery( JwmaDatabase.PREFINSTANCE_BYUSERID ); //bind param oql.bind(identity); //retrieve prefs instance if (oql.execute().hasMore()) { exists = true; } //end transaction db.commit(); } catch (Exception ex) { String msg = JwmaKernel.getReference().getLogMessage("jwma.plugin.castor.objcheck"); log.error(msg, ex); throw new JwmaException(msg).setException(ex); } finally { //release the database m_DBPool.releaseDatabase(db); } return exists; }//isPersistent public JwmaPreferencesImpl getPreferencesTemplate(JwmaSession session) { //1. get clone JwmaPreferencesImpl prefs = m_PreferencesTemplate.getClone(); //2. make post office config dependent adjustments: PostOffice po = session.getPostOffice(); //set root folder prefs.setRootFolder(po.getRootFolder()); //set replyto domain from postoffice String replyto = po.getReplyToDomain(); if (replyto == null || replyto.length() == 0) { replyto = po.getAddress(); } ((JwmaMailIdentityImpl) prefs.getMailIdentity()).setReplyTo( session.getUsername() + "@" + replyto ); return prefs; }//getPreferencesTemplate public void activate() throws JwmaException { JwmaKernel kernel = JwmaKernel.getReference(); try { String etc = kernel.getDirectoryPath(JwmaKernel.ETC_DIR); //String m_MappingFile = etc + settings.getMappingFilename(); m_PreferencesTemplateFile = etc + JwmaConfiguration.TEMPLATE_FILENAME; //Setup castor helper CastorHelper helper = CastorHelper.getReference(); //load mapping //helper.loadMapping(m_MappingFile); //prepare jdo helper.prepareJDO(etc + "database.xml"); //set the pool m_DBPool = helper.getDatabasePool(); //load the template m_PreferencesTemplate = (CastorPreferences) helper.unmarshal(new FileReader(m_PreferencesTemplateFile)); log.info(JwmaKernel.getReference().getLogMessage("jwma.plugin.activation")); } catch (Exception ex) { log.info(JwmaKernel.getReference().getLogMessage("jwma.plugin.failedactivation")); throw new JwmaException("").setException(ex); } }//activate public void deactivate() { //FIXME: shut down pool, close down connections? }//deactivate public void setPreferencesTemplate(JwmaPreferencesImpl template) throws JwmaException { //set the reference immediately m_PreferencesTemplate = (CastorPreferences) template; //store try { FileWriter writer = new FileWriter(m_PreferencesTemplateFile); CastorHelper.getReference().marshal(template, writer); writer.close(); } catch (Exception ex) { throw new JwmaException("").setException(ex); } }//setPreferencesTemplate}//class CastorSQLPreferencesPersistence
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -