⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 castorsqlpreferencespersistence.java

📁 java windows mda and reveus
💻 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 + -