private LocalSession findOrCreateLocalSession(Object bean, String name) { LocalSession session = sessions.get(bean); if (session == null) { session = bayeuxServer.newLocalSession(name); LocalSession existing = sessions.putIfAbsent(bean, session); if (existing != null) { session = existing; } else { session.handshake(); } } return session; }
/** * <p>Instantiate a CometD service with the given name and max number of pooled threads.</p> * * @param bayeux The BayeuxServer instance. * @param name The name of the service (used as client ID prefix). * @param maxThreads The max size of a ThreadPool to create to handle messages. */ public AbstractService(BayeuxServer bayeux, String name, int maxThreads) { _name = name; _bayeux = (BayeuxServerImpl)bayeux; _session = _bayeux.newLocalSession(name); _session.handshake(); if (maxThreads > 0) { setThreadPool(new QueuedThreadPool(maxThreads)); } if (!Modifier.isPublic(getClass().getModifiers())) { throw new IllegalArgumentException("Service class '" + getClass().getName() + "' must be public"); } }
public TimeServlet(BayeuxServer bayeuxServer) { this.bayeuxServer = bayeuxServer; this.channels = new ArrayList<ServerChannel>(); for (SystemTopics topic : SystemTopics.values()) { MarkedReference<ServerChannel> created = bayeuxServer.createChannelIfAbsent("/System/" + topic, new ConfigurableServerChannel.Initializer() { @Override public void configureChannel(ConfigurableServerChannel channel) { channel.setPersistent(true); } }); this.channels.add(topic.ordinal(), created.getReference()); } this.logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); this.updateTimer = new Timer("System.Time.ClientNotifier"); this.updateTimer.scheduleAtFixedRate(new ClientNotifier(), 1000, 1000); this.session = bayeuxServer.newLocalSession(TimeServlet.class.getName()); this.session.handshake(); }