Class BayeuxServerImpl
- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.cometd.server.BayeuxServerImpl
-
- All Implemented Interfaces:
Bayeux
,BayeuxServer
,org.eclipse.jetty.util.component.Dumpable
,org.eclipse.jetty.util.component.LifeCycle
@ManagedObject("The CometD server") public class BayeuxServerImpl extends org.eclipse.jetty.util.component.AbstractLifeCycle implements BayeuxServer, org.eclipse.jetty.util.component.Dumpable
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
-
Nested classes/interfaces inherited from interface org.cometd.bayeux.Bayeux
Bayeux.BayeuxListener
-
Nested classes/interfaces inherited from interface org.cometd.bayeux.server.BayeuxServer
BayeuxServer.BayeuxServerListener, BayeuxServer.ChannelListener, BayeuxServer.Extension, BayeuxServer.SessionListener, BayeuxServer.SubscriptionListener
-
-
Field Summary
Fields Modifier and Type Field Description static String
ALLOWED_TRANSPORTS_OPTION
static String
BROADCAST_TO_PUBLISHER_OPTION
static String
SWEEP_PERIOD_OPTION
static String
TRANSPORTS_OPTION
static String
VALIDATE_MESSAGE_FIELDS_OPTION
-
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING
-
Fields inherited from interface org.cometd.bayeux.server.BayeuxServer
ATTRIBUTE
-
-
Constructor Summary
Constructors Constructor Description BayeuxServerImpl()
-
Method Summary
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, setStopTimeout, start, stop, toString
-
-
-
-
Field Detail
-
ALLOWED_TRANSPORTS_OPTION
public static final String ALLOWED_TRANSPORTS_OPTION
- See Also:
- Constant Field Values
-
SWEEP_PERIOD_OPTION
public static final String SWEEP_PERIOD_OPTION
- See Also:
- Constant Field Values
-
TRANSPORTS_OPTION
public static final String TRANSPORTS_OPTION
- See Also:
- Constant Field Values
-
VALIDATE_MESSAGE_FIELDS_OPTION
public static final String VALIDATE_MESSAGE_FIELDS_OPTION
- See Also:
- Constant Field Values
-
BROADCAST_TO_PUBLISHER_OPTION
public static final String BROADCAST_TO_PUBLISHER_OPTION
- See Also:
- Constant Field Values
-
-
Method Detail
-
doStart
protected void doStart() throws Exception
- Overrides:
doStart
in classorg.eclipse.jetty.util.component.AbstractLifeCycle
- Throws:
Exception
-
doStop
protected void doStop() throws Exception
- Overrides:
doStop
in classorg.eclipse.jetty.util.component.AbstractLifeCycle
- Throws:
Exception
-
initializeMetaChannels
protected void initializeMetaChannels()
-
initializeServerTransports
protected void initializeServerTransports()
-
schedule
public org.eclipse.jetty.util.thread.Scheduler.Task schedule(Runnable task, long delay)
Entry point to schedule tasks in CometD.
Subclasses may override and run the task in a
Executor
, rather than in the scheduler thread.- Parameters:
task
- the task to scheduledelay
- the delay, in milliseconds, to run the task- Returns:
- the task promise
-
getOption
@ManagedOperation(value="The value of the given configuration option", impact="INFO") public Object getOption(@Name("optionName") String qualifiedName)
- Specified by:
getOption
in interfaceBayeux
- Parameters:
qualifiedName
- the configuration option name- Returns:
- the configuration option with the given
qualifiedName
- See Also:
Bayeux.setOption(String, Object)
,Bayeux.getOptionNames()
-
getOption
protected long getOption(String name, long dft)
-
getOption
protected boolean getOption(String name, boolean dft)
-
getOptionNames
public Set<String> getOptionNames()
- Specified by:
getOptionNames
in interfaceBayeux
- Returns:
- the set of configuration options
- See Also:
Bayeux.getOption(String)
-
setOption
public void setOption(String qualifiedName, Object value)
- Specified by:
setOption
in interfaceBayeux
- Parameters:
qualifiedName
- the configuration option namevalue
- the configuration option value- See Also:
Bayeux.getOption(String)
-
randomLong
public long randomLong()
-
getSecurityPolicy
public SecurityPolicy getSecurityPolicy()
- Specified by:
getSecurityPolicy
in interfaceBayeuxServer
- Returns:
- the
SecurityPolicy
associated with this session - See Also:
BayeuxServer.setSecurityPolicy(SecurityPolicy)
-
getJSONContext
public JSONContext.Server getJSONContext()
-
createChannelIfAbsent
public MarkedReference<ServerChannel> createChannelIfAbsent(String channelName, ConfigurableServerChannel.Initializer... initializers)
Description copied from interface:BayeuxServer
Creates a
ServerChannel
and initializes it atomically if the channel does not exist, or returns it if it already exists.This method can be used instead of adding a
BayeuxServer.ChannelListener
to atomically initialize a channel. Theinitializers
will be called before any other thread can access the new channel instance.This method should be used when a channel needs to be initialized (e.g. by adding listeners) before any publish or subscribes can occur on the channel, or before any other thread may concurrently create the same channel.
- Specified by:
createChannelIfAbsent
in interfaceBayeuxServer
- Parameters:
channelName
- the channel nameinitializers
- the initializers invoked to configure the channel- Returns:
- a
MarkedReference
whose reference is the channel, and the mark signals whether the channel has been created because it did not exist before.
-
getSessions
public List<ServerSession> getSessions()
- Specified by:
getSessions
in interfaceBayeuxServer
- Returns:
- the list of
ServerSession
s known to this BayeuxServer object
-
removeSession
public boolean removeSession(ServerSession session)
Description copied from interface:BayeuxServer
Removes the given
session
from this BayeuxServer.This method triggers the invocation of all listeners that would be called if the session was disconnected or if the session timed out.
- Specified by:
removeSession
in interfaceBayeuxServer
- Parameters:
session
- the session to remove- Returns:
- true if the session was known to this BayeuxServer and was removed
-
getSession
public ServerSession getSession(String clientId)
- Specified by:
getSession
in interfaceBayeuxServer
- Parameters:
clientId
- theServerSession
identifier- Returns:
- the
ServerSession
with the givenclientId
or null if no such valid session exists.
-
addServerSession
protected void addServerSession(ServerSessionImpl session, ServerMessage message)
-
removeServerSession
public boolean removeServerSession(ServerSession session, boolean timedOut)
- Parameters:
session
- the session to removetimedOut
- whether the remove reason is server-side expiration- Returns:
- true if the session was removed and was connected
-
newServerSession
public ServerSessionImpl newServerSession()
-
newLocalSession
public LocalSession newLocalSession(String idHint)
Description copied from interface:BayeuxServer
Creates a new
LocalSession
.A
LocalSession
is a server-side ClientSession that allows server-side code to have special clients (resident within the same JVM) that can be used to publish and subscribe like a client-side session would do.- Specified by:
newLocalSession
in interfaceBayeuxServer
- Parameters:
idHint
- a hint to be included in the unique clientId of the session.- Returns:
- a new
LocalSession
-
newMessage
public ServerMessage.Mutable newMessage()
- Specified by:
newMessage
in interfaceBayeuxServer
- Returns:
- a new or recycled mutable message instance.
-
newMessage
public ServerMessage.Mutable newMessage(ServerMessage original)
-
setSecurityPolicy
public void setSecurityPolicy(SecurityPolicy securityPolicy)
- Specified by:
setSecurityPolicy
in interfaceBayeuxServer
- Parameters:
securityPolicy
- theSecurityPolicy
associated with this session- See Also:
BayeuxServer.getSecurityPolicy()
-
addExtension
public void addExtension(BayeuxServer.Extension extension)
Description copied from interface:BayeuxServer
Adds the given extension to this Bayeux object.
- Specified by:
addExtension
in interfaceBayeuxServer
- Parameters:
extension
- the extension to add- See Also:
BayeuxServer.removeExtension(Extension)
-
removeExtension
public void removeExtension(BayeuxServer.Extension extension)
Description copied from interface:BayeuxServer
Removes the given extension from this Bayeux object.
- Specified by:
removeExtension
in interfaceBayeuxServer
- Parameters:
extension
- the extension to remove- See Also:
BayeuxServer.addExtension(Extension)
-
getExtensions
public List<BayeuxServer.Extension> getExtensions()
- Specified by:
getExtensions
in interfaceBayeuxServer
- Returns:
- an immutable list of extensions present in this BayeuxServer instance
- See Also:
BayeuxServer.addExtension(Extension)
-
addListener
public void addListener(BayeuxServer.BayeuxServerListener listener)
Description copied from interface:BayeuxServer
Adds a listener to this Bayeux object.
- Specified by:
addListener
in interfaceBayeuxServer
- Parameters:
listener
- the listener to add- See Also:
BayeuxServer.removeListener(BayeuxServerListener)
-
getChannel
public ServerChannel getChannel(String channelId)
- Specified by:
getChannel
in interfaceBayeuxServer
- Parameters:
channelId
- the channel identifier- Returns:
- a
ServerChannel
with the givenchannelId
, or null if no such channel exists - See Also:
BayeuxServer.createChannelIfAbsent(String, ConfigurableServerChannel.Initializer...)
-
getChannels
public List<ServerChannel> getChannels()
- Specified by:
getChannels
in interfaceBayeuxServer
- Returns:
- the list of channels known to this BayeuxServer object
-
removeListener
public void removeListener(BayeuxServer.BayeuxServerListener listener)
Description copied from interface:BayeuxServer
Removes a listener from this Bayeux object.
- Specified by:
removeListener
in interfaceBayeuxServer
- Parameters:
listener
- the listener to remove- See Also:
BayeuxServer.addListener(BayeuxServerListener)
-
handle
public void handle(ServerSessionImpl session, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise)
-
validateMessage
protected String validateMessage(ServerMessage.Mutable message)
-
publish
protected void publish(ServerSessionImpl session, ServerChannelImpl channel, ServerMessage.Mutable message, boolean receiving, Promise<Boolean> promise)
-
resolveLoop
protected Promise<Boolean> resolveLoop(AsyncFoldLeft.Loop<Boolean> loop)
-
freeze
public void freeze(ServerMessage.Mutable mutable)
-
extendOutgoing
protected void extendOutgoing(ServerSession sender, ServerSession session, ServerMessage.Mutable message, Promise<Boolean> promise)
-
extendReply
public void extendReply(ServerSessionImpl sender, ServerSessionImpl session, ServerMessage.Mutable reply, Promise<ServerMessage.Mutable> promise)
-
removeServerChannel
protected boolean removeServerChannel(ServerChannelImpl channel)
-
getListeners
protected List<BayeuxServer.BayeuxServerListener> getListeners()
-
getKnownTransportNames
public Set<String> getKnownTransportNames()
- Specified by:
getKnownTransportNames
in interfaceBayeux
- Returns:
- the set of known transport names of this
Bayeux
object. - See Also:
Bayeux.getAllowedTransports()
-
getTransport
public ServerTransport getTransport(String transport)
- Specified by:
getTransport
in interfaceBayeux
- Parameters:
transport
- the transport name- Returns:
- the transport with the given name or null if no such transport exist
-
addTransport
public ServerTransport addTransport(ServerTransport transport)
-
setTransports
public void setTransports(ServerTransport... transports)
-
setTransports
public void setTransports(List<ServerTransport> transports)
-
getTransports
public List<ServerTransport> getTransports()
-
findHttpTransport
protected AbstractHttpTransport findHttpTransport(javax.servlet.http.HttpServletRequest request)
-
getAllowedTransports
@ManagedAttribute(value="The transports allowed by this server", readonly=true) public List<String> getAllowedTransports()
- Specified by:
getAllowedTransports
in interfaceBayeux
- Returns:
- the ordered list of transport names that will be used in the negotiation of transports with the other peer.
- See Also:
Bayeux.getKnownTransportNames()
-
setAllowedTransports
public void setAllowedTransports(String... allowed)
-
isBroadcastToPublisher
@ManagedAttribute(value="Whether this server broadcast messages to the publisher", readonly=true) public boolean isBroadcastToPublisher()
-
unknownSession
protected void unknownSession(ServerMessage.Mutable reply)
-
error
protected void error(ServerMessage.Mutable reply, String error)
-
createReply
protected ServerMessage.Mutable createReply(ServerMessage.Mutable message)
-
sweep
@ManagedOperation(value="Sweeps channels and sessions of this BayeuxServer", impact="ACTION") public void sweep()
-
isDetailedDump
@ManagedAttribute("Reports additional details in the dump") public boolean isDetailedDump()
-
setDetailedDump
public void setDetailedDump(boolean detailedDump)
-
dump
public void dump(Appendable out, String indent) throws IOException
- Specified by:
dump
in interfaceorg.eclipse.jetty.util.component.Dumpable
- Throws:
IOException
-
-