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

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

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
добавлено отредактировано
Просмотры: 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, источник