gnu.mail.providers.nntp.NNTPMessage的容器类 [英] container class for gnu.mail.providers.nntp.NNTPMessage

查看:85
本文介绍了gnu.mail.providers.nntp.NNTPMessage的容器类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Glassfish为什么显示此facelets错误:

Why does Glassfish shows this facelets error:

javax.el.ELException: /foo/client.xhtml @11,74 value="#{messageBean.messages}": javax.mail.MessagingException: Socket closed;
  nested exception is:
    java.net.SocketException: Socket closed

我归因于过于频繁地在本地主机上点击 leafnode 而且太快了.下面的Glassfish日志显示了从leafnode成功检索到消息,但是多次调用SingletonNNTP.loadMessages().

Which I attribute to hitting leafnode on localhost too frequently and too rapidly. Glassfish logs below show successful message retrievals from leafnode, but multiple calls to SingletonNNTP.loadMessages().

如何正确处理套接字?有时Leafnode会提供所需的输出,有时却不会.

How can deal with sockets correctly? Sometimes Leafnode gives desired output, sometimes not.

INFO: Initializing Mojarra 2.1.6 (SNAPSHOT 20111206) for context '/NNTPjsf'
INFO: WEB0671: Loading application [NNTPjsf] at [/NNTPjsf]
INFO: NNTPjsf was successfully deployed in 2,574 milliseconds.
INFO: MessageBean..
INFO: MessageBean..
INFO: MessageBean.getMessages..
INFO: MessageBean.getNNTP..
INFO: MAKING SINGLETON..
INFO: NNTP.loadMessages...
INFO: NNTP.loadMessages...
nntp: <200 Leafnode NNTP Daemon, version 1.11.8 running at localhost (my fqdn: dur.bounceme.net)
nntp: >GROUP comp.lang.java.help
nntp: <211 82 3 84 comp.lang.java.help group selected
nntp: >GROUP comp.lang.java.help
nntp: <211 82 3 84 comp.lang.java.help group selected
nntp: >XHDR Message-ID 3-84
nntp: <221 Message-ID header (from overview) for postings 3-84:
nntp: <3 <afp6m75oi6nli4b6q87s317lkc13g689c2@4ax.com>
nntp: <4 <ed7f31e9-8a19-46c7-9a7c-ad8aabfb9599@x10g2000pbi.googlegroups.com>
nntp: <5 <uA4ar.13560$fj7.13111@newsfe20.iad>

支持bean如此:

package net.bounceme.dur.nntp;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import javax.mail.Message;

@Named
@SessionScoped
public class MessageBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final Logger logger = Logger.getLogger(MessageBean.class.getName());
    private static Level level = Level.INFO;
    private DataModel dm = null;

    public MessageBean() {
        logger.log(level, "MessageBean..");
    }

    public List<Message> getMessages() throws Exception {
        logger.log(level, "MessageBean.getMessages..");
        List<Message> messages = getNNTP();
        return messages;
    }

    public DataModel getModel() throws Exception {
        logger.log(level, "MessageBean.getModel..");
        List<Message> messages = getNNTP();
        dm = new ListDataModel(messages);
        return dm;
    }

    private synchronized List<Message> getNNTP() throws Exception {
        logger.log(level, "MessageBean.getNNTP..");
        List<Message> messages = new ArrayList<Message>();
        SingletonNNTP nntp = SingletonNNTP.INSTANCE;
        messages = nntp.getMessages(false);
        logger.log(level, "MessageBean.getNNTP nntp.size:  {0}", messages.size());
        return messages;
    }
}

单身人士:

package net.bounceme.dur.nntp;

import static java.lang.System.out;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;

public enum SingletonNNTP {

    INSTANCE;
    private final Logger logger = Logger.getLogger(SingletonNNTP.class.getName());
    private final Level level = Level.INFO;
    private Properties props = new Properties();
    private List<Message> messages = new ArrayList<Message>();

    private SingletonNNTP() {
        out.println("MAKING SINGLETON..");
        props = PropertiesReader.getProps();
        boolean loaded = false;
        try {
            loaded = setMessages(false);
        } catch (Exception ex) {
            Logger.getLogger(SingletonNNTP.class.getName()).log(Level.SEVERE, "FAILED TO LOAD MESSAGES", ex);
        }
    }

    public List<Message> getMessages(boolean debug) throws Exception {
        logger.log(level, "NNTP.getMessages...");
        logMessages();
        return Collections.unmodifiableList(messages);
    }

    private boolean setMessages(boolean debug) throws Exception {
        logger.log(level, "NNTP.loadMessages...");
        Session session = Session.getDefaultInstance(props);
        session.setDebug(debug);
        Store store = session.getStore(new URLName(props.getProperty("nntp.host")));
        store.connect();
        Folder root = store.getDefaultFolder();
        Folder folder = root.getFolder(props.getProperty("nntp.group"));
        folder.open(Folder.READ_ONLY);
        Message[] msgs = folder.getMessages();
        messages = Arrays.asList(msgs);
        folder.close(false);
        store.close();
        if (debug) {

        }
        return true;
    }

    private void logMessages() throws Exception {
        logger.log(level, "NNTP.logMessages..");
        for (Message m : messages) {
            logger.log(level, String.valueOf(m.getMessageNumber()));
            logger.log(level, m.getSubject());
            logger.log(level, m.getContent().toString());
        }
    }

    private void persistMessages() throws Exception {
        //entities.Messages
    }
}

推荐答案

该消息表示您关闭了套接字,然后尝试对其进行读取或写入.关闭连接后,您正在尝试阅读消息内容.在打开连接时,您不需要保存消息本身,而是保存它们的内容.

That message means that you closed the socket and then tried to read from or write to it. You are trying to read Message content after you have closed the connection. You need to save not the Messages themselves but their content, while the connection is open.

这篇关于gnu.mail.providers.nntp.NNTPMessage的容器类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆