james-server-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oki DZ <ok...@pindad.com>
Subject POP3Server
Date Thu, 13 Sep 2001 04:29:41 GMT
Hi,

I think the stat() method in the POP3Server.java can be made to work
faster by storing the message names in the userMailbox Vector instead of
the MailImpl; you don't have to do a retrieve() from the mail
repository, which means that there would be lesser number of database
connections used (of course, this implies that there would be a quite lot 
of modification in the rest of the code).

    private void stat() {
	userMailbox = new Vector();
	userMailbox.add(DELETED);
	Iterator i = userInbox.list();
	if (i != null) {
	    for (;i.hasNext();) {
		String key = (String) i.next();
		userMailbox.addElement(key);
	    }
	}
	backupUserMailbox = (Vector) userMailbox.clone();
    }

Adding some methods in the MailRepository interface would be nicer too. In
the following, I implemented getMessageSize(Vector) method to get the
total size of messages in a particular user's mailbox. The SQL statement
would be: select sum(length(message_body)) from Message where ...

   private void doSTAT(String command,String argument,String argument1) {
        if (state == TRANSACTION) {
            long size = 0;
            int count = 0;
	    String key;
	    Vector keys = new Vector();
	    for (Iterator i = userMailbox.iterator(); i.hasNext();) {
		if (!(key = (String) i.next()).equals(DELETED)) {
		    keys.add(key);
		    count++;
		} 
	    }
            try {
		size = userInbox.getMessageSize(keys);
                out.println(OK_RESPONSE + " " + count + " " + size);

The following are some of the methods I added in MailRepository interface:
    // Returns message size; the total size of a particular mailbox
    int getMessageSize(Vector keys) throws MessagingException;

    // Return message size; the size of an individual message
    int getMessageSize(String key) throws MessagingException;

    // Returns message name and its size pairs; it's implementation
    // made faster by opening a connection once, and then doing a loop
    // for getting each size of the message (using length(message_body)).
    Hashtable getMessageSizeList(Vector keys) throws MessagingException;

Those are useful to speedup the performance of the POP server by
implementing specific calls to the database directly. The modified
interface would mean a lot for other repositories though (eg: the file
repository); ie: lots of modifications.

Just some ideas of improvement,
Oki




---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org


Mime
View raw message