Конечный штат Машина для Java Client - лучшая практика необходимаJAVA

Программисты JAVA общаются здесь
Anonymous
Конечный штат Машина для Java Client - лучшая практика необходима

Сообщение Anonymous »

Я создаю клиента Java для печати сообщений с небольшой государственной машиной в основе моего основного класса. Этот клиент оправляет очередь JMS и решает, нужно ли ему распечатать сообщение из очереди или необходимо отправить сообщение обратно с JMS. другие классы. < /li>
Должен ли я отслеживать свои объекты (config, сообщение) как статические поля? alt = "Окончательное состояние машины" src = "https://i.sstatic.net/ybmu4.png" /> < /p>

Основной класс: < /p>

public class StateMachine {

private static State state;
private static Properties config;
private static Message message;

public static void main(String[] args) throws Exception {

// Finite State Machine
state = State.START;
while (state != State.STOP) {
switch (state) {
case START:
start();
break;
case INITIALIZE:
initialize();
break;
case CONFIG:
config();
break;
case POLLING:
polling();
break;
case PUSH:
push();
break;
case MESSAGE:
message();
break;
case PRINT:
print();
break;
case STOP:
polling();
break;
default:
stop();
break;
}
}
System.exit(0);
}

private static void start() {
// The Client is started: move to initialization phase.
state = State.INITIALIZE;
}

private static void initialize() {
// Currently nothing - Go directory to configuration
state = State.CONFIG;
}

private static void config() {
// Get the configuration
config = PropertyManager.readConfiguration();

String task = config.getProperty("task");
if (task.equals("polling")) {
state = State.POLLING;
} else {
state = State.PUSH;
}
}

private static void polling() {
// Start polling until a message arrives
try {
...
//Implementation that polls a JMQ queue
...
//Break when message arrives
while (true) {
message = consumer.receiveNoWait();
break;
}
session.close();
connection.close();
} catch (Exception ex) {
LOGGER.error(" - {}", ex.toString());
}
state = State.MESSAGE;
}

private static void push() {
// Push a message to the queue
...
// Start polling again
state = State.POLLING;
}

private static void message() {
// Decides what to do after a message is arrived
....
// Currenty, print all messages
state = State.PRINT;
}

private static void print() {
// Print the message
if (message instanceof TextMessage) {
... print ...
}
// Move back to polling after a print.
state = State.POLLING;
}

private static void stop() {
// Go to the STOP state.
state = State.STOP;
}
}


Подробнее здесь: https://stackoverflow.com/questions/311 ... ice-needed

Вернуться в «JAVA»