Я обнаружил интересное поведение ... Я не могу решить, является ли это ошибкой или некомпетентностью, но сейчас склоняюсь к некомпетентности.
Этот код не войдет в цикл, даже если ожидают сообщения:
Message msg;
while ((msg = consumer.receiveNoWait()) != null) {
System.out.println(msg);
}
Этот код вводит цикл, обратите внимание на нулевое назначение:
Message msg = null;
while ((msg = consumer.receiveNoWait()) != null) {
System.out.println(msg);
}
Этот код работает на Glassfish 3.1.1b10 HotSpot 1.6_26 на Windows 32bit. Я не могу придумать объяснения, почему первый блок не работает!
РЕДАКТИРОВАТЬ / ОБНОВИТЬ 13 июля 2011 года:
Сначала я начал останавливать домен Glassfish и удалять его между развертываниями по запросу, и это все еще происходит:)
Во-вторых, я не могу выполнить синхронизацию на получателе или получателе, так как это код Java EE. Но я могу заверить, что сообщения доступны. Там около 500 из них доступны без потребителей. Фактически, создание QueueBrowser говорит мне, что сообщения доступны!
В-третьих, эта программа печатает "РАБОТАЕТ!" каждый раз!!! ARGH !!!
public static void main(String[] args) {
Object obj;
if ((obj = getNotNull()) != null) {
System.out.println("worked!");
} else {
System.out.println("failed!");
}
}
static Object getNotNull() {
return new Object();
}
Наконец, я говорил о своей собственной некомпетентности. ;)