Как восстановить новые поступающие данные, голосовав и накормить их назад

Здесь метод читает базу данных, у которой есть уникальный идентификатор с порядковым номером, который продолжает увеличиваться, с тех пор новичок на Яве, могу я знать, как осуществить этот повторяющийся опрос и проверку на новое входящее сообщение каждый раз.

public void run() {
int seqId = 0;
    while(true) {
        List list = null;
        try {
            list = fullPoll(seqId);
            if (!list.isEmpty()) {
                seqId = list.get(0).getSequence();
                incomingMessages.addAll(list);
                System.out.println("waiting 3 seconds");
                System.out.println("new incoming message");
                Thread.sleep(3000);

            }
        } catch (Exception e1) {
            e1.printStackTrace();
        }


    }
}

//Method which defines polling of the database and also count the number of Queries
public List fullPoll(int lastSeq) throws Exception {
    Statement st = dbConnection.createStatement();
    ResultSet rs = st.executeQuery("select * from msg_new_to_bde where ACTION =  804 and SEQ >" + lastSeq + "order by SEQ DESC");     
    List pojoCol = new ArrayList();
    while (rs.next()) {
        KpiMessage filedClass = convertRecordsetToPojo(rs);
        pojoCol.add(filedClass);
    }
    for (KpiMessage pojoClass : pojoCol) {
        System.out.print(" " + pojoClass.getSequence());
        System.out.print(" " + pojoClass.getTableName());
        System.out.print(" " + pojoClass.getAction());
        System.out.print(" " + pojoClass.getKeyInfo1());
        System.out.print(" " + pojoClass.getKeyInfo2());
        System.out.println(" " + pojoClass.getEntryTime());
    }
   //         return seqId;           
    return pojoCol;
}  

Моя цель состоит в том, чтобы Получить голоса стола от базы данных и также проверить на новое входящее сообщение, которое я могу найти от Заголовка областью Секнкейд в столе, который уникален и продолжает увеличиваться для новых записей. Теперь моя проблема

1. Позволяет говорят после того, как я голосую в первый раз, когда это читает все записи и делает нить, чтобы спать в течение 6 секунд к среднему времени, как я могу получить новые поступающие данные и Получить голоса их снова?

2. Также, как добавить новые данные, когда они делают Опрос во второй раз и передают новые данные к другому классу.

2
nl ja de
пожалуйста, отформатируйте свой код!!!
добавлено автор MrSmith42, источник
пожалуйста, удалите не полезные комментарии!
добавлено автор MrSmith42, источник

2 ответы

Poller calls fullPoll every 6 secs and passes lastSeq param to it. Initially lastSeq = 0. When Poller gets result list it replaces the lastSeq with max SEQ value. fullPoll retrieves only records with SEQ > lastSeq.

void run() throws Exception {
    int seqId = 0;
    while(true) {
          List list = fullPoll(seqId);
          if (!list.isEmpty()) {
            seqId = list.get(0).getSequene();
          }
          Thread.sleep(6000); 
    }
}

public List fullPoll(int lastSeq) throws Exception {
       ...
       ResultSet rs = st.executeQuery("select * from msg_new_to_bde where ACTION =  804 and SEQ > " + lastSeq + " order by SEQ 
      DESC");     
      .. 
}
2
добавлено
огромное спасибо попробовало это, но все еще наличие ошибок в ответ печатает, и мимолетные параметры... могут вы улаживать это... gist.github.com/9bab6f82c83ff6fb9c3a
добавлено автор Babu, источник
спасибо мне выполнили его, но теперь, если не выполнение fullPoll() неоднократно вместо этого его ожидание только новых поступающих данных, как я могу достигнуть этого параллельно... Я Обновил код выше, пожалуйста, дайте мне решение...
добавлено автор Babu, источник
There' s проблема в том, как получают затем макс. последовательность, посмотрите мое обновление.
добавлено автор Evgeniy Dorofeev, источник

Вот некоторый код, который можно использовать, чтобы надеть работу. Я пытался сделать его довольно гибким использованием образец The Observer; этим путем можно соединить многократные "процессоры сообщения" с тем же самым poller:

public class MessageRetriever implements Runnable {
    private int lastID;
    private List listeners;

   ...

    public void addMessageListener(MessageListener listener) {
        this.listeners.add(listener)
    }

    public void removeMessageListener(MessageListener listener) {
        this.listeners.remove(listener)
    }

    public void run() {
        //code to repeat the polling process given some time interval    
    }  

    private void pollMessages() {
        if (this.lastID == 0)
            this.fullPoll()
        else
            this.partialPoll()           
    }

    private void fullPoll() {
        //your full poll code

        //assuming they are ordered by ID and it haves the ID field - you should
        //replace this code according to your structure
        this.lastID = pojoCol.get(pojoCol.length() - 1).getID() 

        this.fireInitialMessagesSignal(pojoCol)
    }

    private void fireInitialMessagesSignal(List messages) {
        for (MessageListener listener : this.listeners)
            listener.initialMessages(messages)
    }

    private void partialPoll() {
        //code to retrieve messages *past* the lastID. You could do this by 
        //adding an extra condition on your where sentence e.g 
        //select * from msg_new_to_bde where ACTION = 804 AND SEQ > lastID order by SEQ DESC
        //the same as before
        this.lastID = pojoCol.get(pojoCol.length() - 1).getID() 

        this.fireNewMessagesListener(pojoCol)
    }

    private void fireNewMessagesListener(List messages) {
        for (MessageListener listener : this.listeners)
            listener.newMessages(messages)
    }

}

И интерфейс

public interface MessageListener {
    public void initialMessages(List messages);
    public void newMessages(List messages)
}

В основном, используя этот подход, ретривер - работоспособное (может быть выполнен на своей собственной нити), и заботится о целом процессе: делает начальный опрос и продолжает делать "частичные" опросы на данных интервалах.

Различные события запускают различные сигналы, посылая затронутые сообщения зарегистрированным слушателям, и те обрабатывают сообщения, как они хотят.

1
добавлено
огромное спасибо, у меня есть выдувание моего ума в течение дня... Я буду управлять им & возвращаться вам...
добавлено автор Babu, источник
@thank вы asermax
добавлено автор Babu, источник
@arsemax я в состоянии сделать опрос впервые и получить новое сообщение, но застреваю здесь тем, как передать это к другому классу и возвращающийся, чтобы Голосовать еще раз.... Мой код не в состоянии повторить опрос после интервала..., пожалуйста, проверьте мой обновленный код...
добавлено автор Babu, источник
@Babu Никакой prob. Удостоверьтесь, что эта модель соответствует вашим потребностям, это может быть излишество для того, что необходимо сделать tho, в этом случае решение Евгения Дорофеева может лучше подойти.
добавлено автор asermax, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Software Design and OOP
Software Design and OOP
1 481 участник(ов)

OOP, software design, architecture, GRASP, GoF, SOLID, separation of concerns, безысходность. Пожалуйста, придерживайтесь указанных тем. https://oopru.github.io More cool stuff: @fp_ru @tdd_ru @coding_interview_ru @coding_ru

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async