package com.googlecode.tawus.cometd.examples; import java.util.HashMap; import java.util.Map; import org.cometd.bayeux.Message; import org.cometd.bayeux.client.ClientSessionChannel; import org.cometd.client.BayeuxClient; import org.cometd.client.transport.ClientTransport; import org.cometd.client.transport.LongPollingTransport; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.webapp.WebAppContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class JavaClientBasedTest extends Assert { private Server server; private static final Logger logger = LoggerFactory.getLogger(JavaClientBasedTest.class); private String greeting; @BeforeClass public void startupServer() throws Exception { server = new Server(9990); server.setStopAtShutdown(true); server.setGracefulShutdown(1000); WebAppContext context = new WebAppContext(); context.setContextPath("/test"); context.setWar("src/test/webapp"); server.setHandler(context); server.start(); logger.info("Server started"); } @Test public void testJavaClient() throws Exception { HttpClient httpClient = new HttpClient(); httpClient.setConnectTimeout(100000); httpClient.start(); Map<String, Object> options = new HashMap<String, Object>(); ClientTransport transport = LongPollingTransport.create(options, httpClient); final BayeuxClient client = new BayeuxClient( "http://localhost:9990/test/cometd/", transport); client.handshake(); assertTrue(client.waitFor(1000, BayeuxClient.State.CONNECTED)); assertNull(greeting); client.batch(new Runnable() { public void run() { logger.info("Subscribing to /hello"); // /Subscribe client.getChannel("/hello").subscribe( new ClientSessionChannel.MessageListener() { public void onMessage(ClientSessionChannel channel, Message message) { logger.info("Got Subscribed message"); greeting = (String) message.getDataAsMap().get( "greeting"); } }); logger.info("Subscribed, now publishing"); // Publish Map<String, Object> data = new HashMap<String, Object>(); data.put("name", "Tawus"); client.getChannel("/service/hello").publish(data); } }); Thread.sleep(4000); assertEquals(greeting, "Hello, Tawus"); // Disconnect client.disconnect(); client.waitFor(2000, BayeuxClient.State.DISCONNECTED); } @AfterClass public void stopServer() throws Exception { server.stop(); logger.info("Server stopped"); } }