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

📄 avalonmailrepository.java

📁 java mail,java mailjava mailjava mailjava mail
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                    new StringBuffer(256)                            .append("Locked ")                            .append(key)                            .append(" for ")                            .append(Thread.currentThread().getName())                            .append(" @ ")                            .append(new java.util.Date(System.currentTimeMillis()));                getLogger().debug(debugBuffer.toString());            }//            synchronized (this) {//                notifyAll();//            }            return true;        } else {            return false;        }    }    /**     * Stores a message in this repository. Shouldn't this return the key     * under which it is stored?     *     * @param mc the mail message to store     */    public void store(Mail mc) throws MessagingException {        try {            String key = mc.getName();            //Remember whether this key was locked            boolean wasLocked = true;            synchronized (this) {                wasLocked = lock.isLocked(key);                    if (!wasLocked) {                    //If it wasn't locked, we want a lock during the store                    lock(key);                }            }            try {                if (keys != null && !keys.contains(key)) {                    keys.add(key);                }                boolean saveStream = true;                MimeMessage message = mc.getMessage();                // if the message is a Copy on Write proxy we check the wrapped message                // to optimize the behaviour in case of MimeMessageWrapper                if (message instanceof MimeMessageCopyOnWriteProxy) {                    MimeMessageCopyOnWriteProxy messageCow = (MimeMessageCopyOnWriteProxy) message;                    message = messageCow.getWrappedMessage();                }                if (message instanceof MimeMessageWrapper) {                    MimeMessageWrapper wrapper = (MimeMessageWrapper) message;                    if (DEEP_DEBUG) {                        System.out.println("Retrieving from: " + wrapper.getSourceId());                        StringBuffer debugBuffer =                            new StringBuffer(64)                                    .append("Saving to:       ")                                    .append(destination)                                    .append("/")                                    .append(mc.getName());                        System.out.println(debugBuffer.toString());                        System.out.println("Modified: " + wrapper.isModified());                    }                    StringBuffer destinationBuffer =                        new StringBuffer(128)                            .append(destination)                            .append("/")                            .append(mc.getName());                    if (destinationBuffer.toString().equals(wrapper.getSourceId()) && !wrapper.isModified()) {                        //We're trying to save to the same place, and it's not modified... we shouldn't save.                        //More importantly, if we try to save, we will create a 0-byte file since we're                        //retrying to retrieve from a file we'll be overwriting.                        saveStream = false;                    }                }                if (saveStream) {                    OutputStream out = null;                    try {                        out = sr.put(key);                        mc.getMessage().writeTo(out);                    } finally {                        if (out != null) out.close();                    }                }                //Always save the header information                or.put(key, mc);            } finally {                if (!wasLocked) {                    // If it wasn't locked, we need to unlock now                    unlock(key);                    synchronized (this) {                        notify();                    }                }            }            if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {                StringBuffer logBuffer =                    new StringBuffer(64)                            .append("Mail ")                            .append(key)                            .append(" stored.");                getLogger().debug(logBuffer.toString());            }        } catch (Exception e) {            getLogger().error("Exception storing mail: " + e, e);            throw new MessagingException("Exception caught while storing Message Container: " + e);        }    }    /**     * Retrieves a message given a key. At the moment, keys can be obtained     * from list() in superinterface Store.Repository     *     * @param key the key of the message to retrieve     * @return the mail corresponding to this key, null if none exists     */    public Mail retrieve(String key) throws MessagingException {        if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) {            getLogger().debug("Retrieving mail: " + key);        }        try {            Mail mc = null;            try {                mc = (Mail) or.get(key);            }             catch (RuntimeException re){                StringBuffer exceptionBuffer = new StringBuffer(128);                if(re.getCause() instanceof Error){                    exceptionBuffer.append("Error when retrieving mail, not deleting: ")                            .append(re.toString());                }else{                    exceptionBuffer.append("Exception retrieving mail: ")                            .append(re.toString())                            .append(", so we're deleting it.");                    remove(key);                }                getLogger().warn(exceptionBuffer.toString());                return null;            }            MimeMessageAvalonSource source = new MimeMessageAvalonSource(sr, destination, key);            mc.setMessage(new MimeMessageCopyOnWriteProxy(source));            return mc;        } catch (Exception me) {            getLogger().error("Exception retrieving mail: " + me);            throw new MessagingException("Exception while retrieving mail: " + me.getMessage());        }    }    /**     * Removes a specified message     *     * @param mail the message to be removed from the repository     */    public void remove(Mail mail) throws MessagingException {        remove(mail.getName());    }    /**     * Removes a Collection of mails from the repository     * @param mails The Collection of <code>MailImpl</code>'s to delete     * @throws MessagingException     * @since 2.2.0     */    public void remove(Collection mails) throws MessagingException {        Iterator delList = mails.iterator();        while (delList.hasNext()) {            remove((Mail)delList.next());        }    }    /**     * Removes a message identified by key.     *     * @param key the key of the message to be removed from the repository     */    public void remove(String key) throws MessagingException {        if (lock(key)) {            try {                if (keys != null) keys.remove(key);                sr.remove(key);                or.remove(key);            } finally {                unlock(key);            }        } else {            StringBuffer exceptionBuffer =                new StringBuffer(64)                        .append("Cannot lock ")                        .append(key)                        .append(" to remove it");            throw new MessagingException(exceptionBuffer.toString());        }    }    /**     * List string keys of messages in repository.     *     * @return an <code>Iterator</code> over the list of keys in the repository     *     */    public Iterator list() {        // Fix ConcurrentModificationException by cloning         // the keyset before getting an iterator        final ArrayList clone;        if (keys != null) synchronized(keys) {            clone = new ArrayList(keys);        } else {            clone = new ArrayList();            for (Iterator i = or.list(); i.hasNext(); ) {                clone.add(i.next());            }        }        if (fifo) Collections.sort(clone); // Keys is a HashSet; impose FIFO for apps that need it        return clone.iterator();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -