2009-09-07 2 views
0

У меня есть требование, чтобы сделать клиент IMAP в качестве веб-приложенияВозможно ли использовать IMAP + пейджинг?

Я достиг функциональности сортировки, как:

//userFolder is an Object of IMAPFolder 
    Message[] messages = userFolder.getMessages(); 

    Arrays.sort(messages, new Comparator<Message>() 
    { 
     public int compare(Message message1, Message message2) 
     { 
      int returnValue = 0; 
      try 
      { 
       if (sortCriteria == SORT_SENT_DATE) 
       { 
        returnValue = message1.getSentDate().compareTo(message2.getSentDate()); 
       } 
      } catch (Exception e) 
      { 
       System.out.println(e.getMessage()); 
       e.printStackTrace(); 
      } 

      if (sortType == SORT_TYPE_DESCENDING) 
      { 
       returnValue = -returnValue; 
      } 

      return returnValue; 
     } 
    }); 

фрагмент кода не является полным, его просто кратко SORT_SENT_DATE, SORT_TYPE_DESCENDING являются мои собственные константы.

На самом деле это решение работает нормально, но она не в логике для подкачки Будучи веб-приложение, я не могу ожидать сервер для загрузки всех сообщений для каждого пользователя и сортировать их (У нас есть ситуации> 1000 одновременных пользователей почтовые ящики, имеющие более 1000 сообщений)

Также не имеет смысла загружать все веб-серверы, сортировать их, возвращать только небольшую часть (скажем 1-20), и по следующему запросу снова загружать все их сортировать и возвращать (21-40). Возможно кэширование, но пользователь gaurantee действительно сделает запрос?

Я слышал, что есть класс под названием FetchProfile, может ли это помочь мне здесь? (Я предполагаю, что он все равно загрузит все сообщения, но только необходимую информацию) Есть ли другой способ достичь этого?

Мне нужно решение, которое могло бы также работать в операции поиска (поиск с поиском подкачки), Я создал архитектурную архитектуру для создания SearchTerm, но здесь мне также понадобится подкачка.

для реф, я задал этот же вопрос по адресу: http://www.coderanch.com/t/461408/Other-JSE-JEE-APIs/java/it-possible-use-IMAP-paging

ответ

2

Вам потребуется сервер с расширением SORT и даже то, что не может быть enough. Затем вы отправляете SORT на конкретный почтовый ящик и FETCH только те номера сообщений, которые попадают в ваше представление.

Обновления на основе комментариев:

Для серверов, где расширение СНПА не доступно следующая лучшая вещь, чтобы FETCH поля заголовка, представляющим ключ сортировки для всех элементов (например, FETCH 1:* BODY[HEADER.FIELDS(SUBJECT)] для субъекта или FETCH 1:* BODY[HEADER.FIELDS(DATA)] для отправленных. дата), затем сортируйте на основе ключа. Таким образом вы получите список отсортированного номера сообщения, который должен быть эквивалентен тому, что команда SORT вернется.

Если серверный кеш-сервер разрешен, лучшим способом является сохранение кеша огибающих (в смысле IMAP ENVELOPE), а затем его обновление с использованием методов, описанных в RFC 4549. Легко сортировать и задавать этот кеш.

На Java есть два API-интерфейса IMAP - официальный API JavaMail и Risoretto. Risoretto более низкоуровневый и должен позволить реализовать что-либо, описанное выше, JavaMail также может это сделать, но у меня нет большого опыта с ним.

+0

BTW, я никогда не пытался реализовать это с помощью JavaMail API, но библиотеки с открытым исходным кодом Risoretto (http://columba.sourceforge.net/ristretto-1.0-docs/) должны его поддерживать. –

+0

+1 за предложение, Мой сервер не поддерживает сортировку Расширение (я использую GMAIL в настоящее время для тестирования) –

+1

Говоря чисто в терминах IMAP, вторым лучшим способом после расширения SORT является FETCH 1: * BODY .PEEK [HEADER.FIELDS (SUBJECT)], который вернет вам ключи сортировки.Затем вы можете отсортировать его и получить список номеров сообщений, эквивалентный списку, полученному от SORT. К сожалению, это не лучший способ реализовать его на практике. - Что мы делаем в приложении, это FETCH всех конвертов (в определении IMAP) и кэширования. Затем мы синхронизируем кеш (RFC4549 - http://www.isi.edu/in-notes/rfc4549.txt) и используем его для сортировки и отображения. –