Index: errai-bus/src/main/java/org/jboss/errai/bus/client/framework/ClientMessageBusImpl.java =================================================================== diff -u -N -r0ef46517398ace1156e4070893f7a9c7af19898e -r37f27e57cc289bbb14f787b76e975688a8928c04 --- errai-bus/src/main/java/org/jboss/errai/bus/client/framework/ClientMessageBusImpl.java (.../ClientMessageBusImpl.java) (revision 0ef46517398ace1156e4070893f7a9c7af19898e) +++ errai-bus/src/main/java/org/jboss/errai/bus/client/framework/ClientMessageBusImpl.java (.../ClientMessageBusImpl.java) (revision 37f27e57cc289bbb14f787b76e975688a8928c04) @@ -29,6 +29,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -188,7 +189,7 @@ } } - Map m = new HashMap(); + Map m = new LinkedHashMap(); m.put(Capabilities.WebSockets.name(), new WebsocketHandler(transportToBusCallback, ClientMessageBusImpl.this)); m.put(Capabilities.SSE.name(), new SSEHandler(transportToBusCallback, ClientMessageBusImpl.this)); m.put(Capabilities.LongPolling.name(), Index: errai-bus/src/test/java/org/jboss/errai/bus/client/tests/BusTransportHandlerTest.java =================================================================== diff -u -N --- errai-bus/src/test/java/org/jboss/errai/bus/client/tests/BusTransportHandlerTest.java (revision 0) +++ errai-bus/src/test/java/org/jboss/errai/bus/client/tests/BusTransportHandlerTest.java (revision 37f27e57cc289bbb14f787b76e975688a8928c04) @@ -0,0 +1,54 @@ +package org.jboss.errai.bus.client.tests; + +import java.util.Collection; + +import org.jboss.errai.bus.client.ErraiBus; +import org.jboss.errai.bus.client.framework.ClientMessageBusImpl; +import org.jboss.errai.bus.client.framework.transports.TransportHandler; + +public class BusTransportHandlerTest extends AbstractErraiTest { + + @Override + public String getModuleName() { + return "org.jboss.errai.bus.ErraiBusTests"; + } + + public void testTransportHandlerPriority() { + runAfterInit(new Runnable() { + @Override + public void run() { + ClientMessageBusImpl bus = (ClientMessageBusImpl) ErraiBus.get(); + Collection handlers = bus.getAllAvailableHandlers(); + int webSocketHandlerPriority = indexOf(handlers, "WebSockets"); + int sseHandlerPriority = indexOf(handlers, "HTTP + Server-Sent Events"); + int longPollingHandlerPriority = indexOf(handlers, "HTTP Long Polling");; + int shortPollingHandlerPriority = indexOf(handlers, "HTTP Short Polling");; + + System.out.println("Handler priorities:" + + " " + webSocketHandlerPriority + + " " + sseHandlerPriority + + " " + longPollingHandlerPriority + + " " + shortPollingHandlerPriority); + + assertTrue(webSocketHandlerPriority < sseHandlerPriority); + assertTrue(sseHandlerPriority < longPollingHandlerPriority); + assertTrue(longPollingHandlerPriority < shortPollingHandlerPriority); + finishTest(); + } + }); + + delayTestFinish(30000); + } + + private static int indexOf(Collection handlers, String type) { + int i = 0; + for (TransportHandler handler : handlers) { + if (handler.getStatistics().getTransportDescription().equals(type)) { + return i; + } + i++; + } + fail("Couldn't find bus transport type \"" + type + "\""); + return -1; // NOTREACHED + } +}