Check out my Salesforce Streaming Spring MVC project
http://cloudsole-streaming.herokuapp.com/
Find the code here:
https://github.com/thysmichels/cloudsole-force.com-streaming-web
Using Salesforce Streaming in Java project:
Push Topic Factory
package com.example.service; import com.force.sdk.streaming.client.ForceBayeuxClient; import com.force.sdk.streaming.client.ForceStreamingClientModule; import com.force.sdk.streaming.client.PushTopicManager; import com.force.sdk.streaming.exception.ForceStreamingException; import com.force.sdk.streaming.model.PushTopic; import com.google.inject.Guice; import com.google.inject.Injector; public class PushTopicFactory { public Injector createInjector(){ Injector injector = Guice.createInjector(new ForceStreamingClientModule()); return injector; } public ForceBayeuxClient createClient(Injector injector){ ForceBayeuxClient client = injector.getInstance(ForceBayeuxClient.class); return client; } public PushTopicManager createPushTopManager(Injector injector){ PushTopicManager pushTopicManager = injector.getInstance(PushTopicManager.class); return pushTopicManager; } public PushTopic getTopicByName(PushTopicManager pushTopicManager, String topicName) throws ForceStreamingException{ PushTopic topic = pushTopicManager.getTopicByName(topicName); return topic; } public PushTopic createPushTopic(PushTopicManager pushTopicManager, String name, Double apiVersion, String query, String description){ PushTopic createTopic = pushTopicManager.createPushTopic(new PushTopic(name, apiVersion, query, description)); return createTopic; } public PushTopic pushTopicFactory(String topicName) throws ForceStreamingException{ PushTopicFactory pushTopicFactory = new PushTopicFactory(); Injector injector = pushTopicFactory.createInjector(); pushTopicFactory.createClient(injector); PushTopicManager publicTopicManager = pushTopicFactory.createPushTopManager(injector); return pushTopicFactory.getTopicByName(publicTopicManager, topicName); } public ForceBayeuxClient createPushTopicClientFactory(){ PushTopicFactory pushTopicClientFactory = new PushTopicFactory(); ForceBayeuxClient fbClient = pushTopicClientFactory.createClient(pushTopicClientFactory.createInjector()); return fbClient; } }
Streaming Service
package com.example.service; import java.io.IOException; import org.cometd.bayeux.Message; import org.cometd.bayeux.client.ClientSessionChannel; import org.eclipse.jetty.util.log.Log; import com.example.service.PushTopicFactory; import com.force.sdk.streaming.client.ForceBayeuxClient; import com.force.sdk.streaming.client.PushTopicManager; import com.force.sdk.streaming.exception.ForceStreamingException; import com.force.sdk.streaming.model.PushTopic; import com.google.inject.Injector; public class StreamingService { public void pushTopicSubScriber(){ PushTopicFactory pushTopicFactory = new PushTopicFactory(); Injector injector = pushTopicFactory.createInjector(); ForceBayeuxClient client = pushTopicFactory.createClient(injector); PushTopicManager publicTopicManager = pushTopicFactory.createPushTopManager(injector); PushTopic createTopic = pushTopicFactory.createPushTopic(publicTopicManager, "NewAccountPushTopic", 27.0, "select Id, Name from Account", "New Push Topic"); PushTopic topic = null; try { topic = pushTopicFactory.getTopicByName(publicTopicManager, createTopic.getName()); } catch (ForceStreamingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { client.subscribeTo(topic, new ClientSessionChannel.MessageListener() { public void onMessage(ClientSessionChannel channel, Message message) { Log.info(message.getJSON()); } }); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }