Class BayeuxServerImpl
- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.eclipse.jetty.util.component.ContainerLifeCycle
-
- org.cometd.server.BayeuxServerImpl
-
- All Implemented Interfaces:
Bayeux,BayeuxServer,org.eclipse.jetty.util.component.Container,org.eclipse.jetty.util.component.Destroyable,org.eclipse.jetty.util.component.Dumpable,org.eclipse.jetty.util.component.Dumpable.DumpableContainer,org.eclipse.jetty.util.component.LifeCycle
@ManagedObject("The CometD server") public class BayeuxServerImpl extends org.eclipse.jetty.util.component.ContainerLifeCycle 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, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException
-
Nested classes/interfaces inherited from interface org.cometd.bayeux.Bayeux
Bayeux.BayeuxListener, Bayeux.Validator
-
Nested classes/interfaces inherited from interface org.cometd.bayeux.server.BayeuxServer
BayeuxServer.BayeuxServerListener, BayeuxServer.ChannelListener, BayeuxServer.Extension, BayeuxServer.SessionListener, BayeuxServer.SubscriptionListener
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringALLOWED_TRANSPORTS_OPTIONstatic java.lang.StringBROADCAST_TO_PUBLISHER_OPTIONstatic java.lang.StringEXECUTOR_MAX_THREADSstatic java.lang.StringSCHEDULER_THREADSstatic java.lang.StringSWEEP_PERIOD_OPTIONstatic java.lang.StringSWEEP_THREADS_OPTIONstatic java.lang.StringTRANSPORTS_OPTIONstatic java.lang.StringVALIDATE_MESSAGE_FIELDS_OPTION-
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPING
-
Fields inherited from interface org.cometd.bayeux.server.BayeuxServer
ATTRIBUTE
-
-
Constructor Summary
Constructors Constructor Description BayeuxServerImpl()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddExtension(BayeuxServer.Extension extension)Adds the given extension to this Bayeux object.voidaddListener(BayeuxServer.BayeuxServerListener listener)Adds a listener to this Bayeux object.protected voidaddServerSession(ServerSessionImpl session, ServerMessage message)ServerTransportaddTransport(ServerTransport transport)MarkedReference<ServerChannel>createChannelIfAbsent(java.lang.String channelName, ConfigurableServerChannel.Initializer... initializers)Creates aServerChanneland initializes it atomically if the channel does not exist, or returns it if it already exists.protected ServerMessage.MutablecreateReply(ServerMessage.Mutable message)protected voiddoStart()protected voiddoStop()voiddump(java.lang.Appendable out, java.lang.String indent)protected voiderror(ServerMessage.Mutable reply, java.lang.String error)voidexecute(java.lang.Runnable job)protected voidextendOutgoing(ServerSession sender, ServerSession session, ServerMessage.Mutable message, Promise<java.lang.Boolean> promise)voidextendReply(ServerSessionImpl sender, ServerSessionImpl session, ServerMessage.Mutable reply, Promise<ServerMessage.Mutable> promise)protected AbstractHttpTransportfindHttpTransport(javax.servlet.http.HttpServletRequest request)voidfreeze(ServerMessage.Mutable mutable)java.util.List<java.lang.String>getAllowedTransports()ServerChannelgetChannel(java.lang.String channelId)java.util.List<ServerChannel>getChannels()java.util.concurrent.ExecutorgetExecutor()java.util.List<BayeuxServer.Extension>getExtensions()JSONContextServergetJSONContext()java.util.Set<java.lang.String>getKnownTransportNames()java.util.Map<java.lang.String,java.lang.Object>getLastSweepInfo()protected java.util.List<BayeuxServer.BayeuxServerListener>getListeners()java.util.Map<java.lang.String,java.lang.Object>getLongestSweepInfo()java.lang.StringgetName()java.lang.ObjectgetOption(java.lang.String qualifiedName)protected booleangetOption(java.lang.String name, boolean dft)protected longgetOption(java.lang.String name, long dft)java.util.Set<java.lang.String>getOptionNames()java.util.Map<java.lang.String,java.lang.Object>getOptions()org.eclipse.jetty.util.thread.SchedulergetScheduler()SecurityPolicygetSecurityPolicy()ServerSessiongetSession(java.lang.String clientId)java.util.List<ServerSession>getSessions()longgetSweepPeriod()intgetSweepThreads()ServerTransportgetTransport(java.lang.String transport)java.util.List<ServerTransport>getTransports()voidhandle(ServerSessionImpl session, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise)protected voidinitializeJSONContext()protected voidinitializeMetaChannels()protected voidinitializeServerTransports()booleanisBroadcastToPublisher()booleanisDetailedDump()ChannelIdnewChannelId(java.lang.String id)LocalSessionnewLocalSession(java.lang.String idHint)Creates a newLocalSession.ServerMessage.MutablenewMessage()ServerMessage.MutablenewMessage(ServerMessage original)ServerSessionImplnewServerSession()protected voidpublish(ServerSessionImpl session, ServerChannelImpl channel, ServerMessage.Mutable message, boolean receiving, Promise<java.lang.Boolean> promise)longrandomLong()voidremoveExtension(BayeuxServer.Extension extension)Removes the given extension from this Bayeux object.voidremoveListener(BayeuxServer.BayeuxServerListener listener)Removes a listener from this Bayeux object.protected booleanremoveServerChannel(ServerChannelImpl channel)booleanremoveServerSession(ServerSession session, boolean timeout)booleanremoveSession(ServerSession session)Removes the givensessionfrom this BayeuxServer.protected Promise<java.lang.Boolean>resolveLoop(AsyncFoldLeft.Loop<java.lang.Boolean> loop)org.eclipse.jetty.util.thread.Scheduler.Taskschedule(java.lang.Runnable task, long delay)Entry point to schedule tasks in CometD.voidsetAllowedTransports(java.lang.String... allowed)voidsetAllowedTransports(java.util.List<java.lang.String> allowed)voidsetDetailedDump(boolean detailedDump)voidsetExecutor(java.util.concurrent.Executor executor)voidsetOption(java.lang.String qualifiedName, java.lang.Object value)voidsetOptions(java.util.Map<java.lang.String,java.lang.Object> options)voidsetScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler)voidsetSecurityPolicy(SecurityPolicy securityPolicy)voidsetSweepPeriod(long sweepPeriod)voidsetSweepThreads(int sweepThreads)voidsetTransports(java.util.List<ServerTransport> transports)voidsetTransports(ServerTransport... transports)voidsweep()protected voidunknownSession(ServerMessage.Mutable reply)protected java.lang.StringvalidateMessage(ServerMessage.Mutable message)-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
-
-
-
Field Detail
-
ALLOWED_TRANSPORTS_OPTION
public static final java.lang.String ALLOWED_TRANSPORTS_OPTION
- See Also:
- Constant Field Values
-
SWEEP_PERIOD_OPTION
public static final java.lang.String SWEEP_PERIOD_OPTION
- See Also:
- Constant Field Values
-
SWEEP_THREADS_OPTION
public static final java.lang.String SWEEP_THREADS_OPTION
- See Also:
- Constant Field Values
-
TRANSPORTS_OPTION
public static final java.lang.String TRANSPORTS_OPTION
- See Also:
- Constant Field Values
-
VALIDATE_MESSAGE_FIELDS_OPTION
public static final java.lang.String VALIDATE_MESSAGE_FIELDS_OPTION
- See Also:
- Constant Field Values
-
BROADCAST_TO_PUBLISHER_OPTION
public static final java.lang.String BROADCAST_TO_PUBLISHER_OPTION
- See Also:
- Constant Field Values
-
SCHEDULER_THREADS
public static final java.lang.String SCHEDULER_THREADS
- See Also:
- Constant Field Values
-
EXECUTOR_MAX_THREADS
public static final java.lang.String EXECUTOR_MAX_THREADS
- See Also:
- Constant Field Values
-
-
Method Detail
-
getName
public java.lang.String getName()
-
doStart
protected void doStart() throws java.lang.Exception- Overrides:
doStartin classorg.eclipse.jetty.util.component.ContainerLifeCycle- Throws:
java.lang.Exception
-
doStop
protected void doStop() throws java.lang.Exception- Overrides:
doStopin classorg.eclipse.jetty.util.component.ContainerLifeCycle- Throws:
java.lang.Exception
-
initializeMetaChannels
protected void initializeMetaChannels()
-
initializeJSONContext
protected void initializeJSONContext() throws java.lang.Exception- Throws:
java.lang.Exception
-
initializeServerTransports
protected void initializeServerTransports()
-
setExecutor
public void setExecutor(java.util.concurrent.Executor executor)
-
getExecutor
public java.util.concurrent.Executor getExecutor()
-
execute
public void execute(java.lang.Runnable job)
-
setScheduler
public void setScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler)
-
getScheduler
public org.eclipse.jetty.util.thread.Scheduler getScheduler()
-
schedule
public org.eclipse.jetty.util.thread.Scheduler.Task schedule(java.lang.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
-
newChannelId
public ChannelId newChannelId(java.lang.String id)
-
getOptions
public java.util.Map<java.lang.String,java.lang.Object> getOptions()
-
getOption
@ManagedOperation(value="The value of the given configuration option", impact="INFO") public java.lang.Object getOption(@Name("optionName") java.lang.String qualifiedName)- Specified by:
getOptionin 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(java.lang.String name, long dft)
-
getOption
protected boolean getOption(java.lang.String name, boolean dft)
-
getOptionNames
public java.util.Set<java.lang.String> getOptionNames()
- Specified by:
getOptionNamesin interfaceBayeux- Returns:
- the set of configuration options
- See Also:
Bayeux.getOption(String)
-
setOption
public void setOption(java.lang.String qualifiedName, java.lang.Object value)- Specified by:
setOptionin interfaceBayeux- Parameters:
qualifiedName- the configuration option namevalue- the configuration option value- See Also:
Bayeux.getOption(String)
-
setOptions
public void setOptions(java.util.Map<java.lang.String,java.lang.Object> options)
-
randomLong
public long randomLong()
-
getSecurityPolicy
public SecurityPolicy getSecurityPolicy()
- Specified by:
getSecurityPolicyin interfaceBayeuxServer- Returns:
- the
SecurityPolicyassociated with this session - See Also:
BayeuxServer.setSecurityPolicy(SecurityPolicy)
-
getJSONContext
public JSONContextServer getJSONContext()
-
createChannelIfAbsent
public MarkedReference<ServerChannel> createChannelIfAbsent(java.lang.String channelName, ConfigurableServerChannel.Initializer... initializers)
Description copied from interface:BayeuxServerCreates a
ServerChanneland 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.ChannelListenerto atomically initialize a channel. Theinitializerswill 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:
createChannelIfAbsentin interfaceBayeuxServer- Parameters:
channelName- the channel nameinitializers- the initializers invoked to configure the channel- Returns:
- a
MarkedReferencewhose reference is the channel, and the mark signals whether the channel has been created because it did not exist before.
-
getSessions
public java.util.List<ServerSession> getSessions()
- Specified by:
getSessionsin interfaceBayeuxServer- Returns:
- the list of
ServerSessions known to this BayeuxServer object
-
getSession
public ServerSession getSession(java.lang.String clientId)
- Specified by:
getSessionin interfaceBayeuxServer- Parameters:
clientId- theServerSessionidentifier- Returns:
- the
ServerSessionwith the givenclientIdor null if no such valid session exists.
-
addServerSession
protected void addServerSession(ServerSessionImpl session, ServerMessage message)
-
removeSession
public boolean removeSession(ServerSession session)
Description copied from interface:BayeuxServerRemoves the given
sessionfrom 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:
removeSessionin interfaceBayeuxServer- Parameters:
session- the session to remove- Returns:
- true if the session was known to this BayeuxServer and was removed
-
removeServerSession
public boolean removeServerSession(ServerSession session, boolean timeout)
- Parameters:
session- the session to removetimeout- whether the session has been removed due to a timeout- Returns:
- true if the session was removed and was connected
-
newServerSession
public ServerSessionImpl newServerSession()
-
newLocalSession
public LocalSession newLocalSession(java.lang.String idHint)
Description copied from interface:BayeuxServerCreates a new
LocalSession.A
LocalSessionis 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:
newLocalSessionin 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:
newMessagein interfaceBayeuxServer- Returns:
- a new or recycled mutable message instance.
-
newMessage
public ServerMessage.Mutable newMessage(ServerMessage original)
-
setSecurityPolicy
public void setSecurityPolicy(SecurityPolicy securityPolicy)
- Specified by:
setSecurityPolicyin interfaceBayeuxServer- Parameters:
securityPolicy- theSecurityPolicyassociated with this session- See Also:
BayeuxServer.getSecurityPolicy()
-
addExtension
public void addExtension(BayeuxServer.Extension extension)
Description copied from interface:BayeuxServerAdds the given extension to this Bayeux object.
- Specified by:
addExtensionin interfaceBayeuxServer- Parameters:
extension- the extension to add- See Also:
BayeuxServer.removeExtension(Extension)
-
removeExtension
public void removeExtension(BayeuxServer.Extension extension)
Description copied from interface:BayeuxServerRemoves the given extension from this Bayeux object.
- Specified by:
removeExtensionin interfaceBayeuxServer- Parameters:
extension- the extension to remove- See Also:
BayeuxServer.addExtension(Extension)
-
getExtensions
public java.util.List<BayeuxServer.Extension> getExtensions()
- Specified by:
getExtensionsin 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:BayeuxServerAdds a listener to this Bayeux object.
- Specified by:
addListenerin interfaceBayeuxServer- Parameters:
listener- the listener to add- See Also:
BayeuxServer.removeListener(BayeuxServerListener)
-
getChannel
public ServerChannel getChannel(java.lang.String channelId)
- Specified by:
getChannelin interfaceBayeuxServer- Parameters:
channelId- the channel identifier- Returns:
- a
ServerChannelwith the givenchannelId, or null if no such channel exists - See Also:
BayeuxServer.createChannelIfAbsent(String, ConfigurableServerChannel.Initializer...)
-
getChannels
public java.util.List<ServerChannel> getChannels()
- Specified by:
getChannelsin interfaceBayeuxServer- Returns:
- the list of channels known to this BayeuxServer object
-
removeListener
public void removeListener(BayeuxServer.BayeuxServerListener listener)
Description copied from interface:BayeuxServerRemoves a listener from this Bayeux object.
- Specified by:
removeListenerin 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 java.lang.String validateMessage(ServerMessage.Mutable message)
-
publish
protected void publish(ServerSessionImpl session, ServerChannelImpl channel, ServerMessage.Mutable message, boolean receiving, Promise<java.lang.Boolean> promise)
-
resolveLoop
protected Promise<java.lang.Boolean> resolveLoop(AsyncFoldLeft.Loop<java.lang.Boolean> loop)
-
freeze
public void freeze(ServerMessage.Mutable mutable)
-
extendOutgoing
protected void extendOutgoing(ServerSession sender, ServerSession session, ServerMessage.Mutable message, Promise<java.lang.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 java.util.List<BayeuxServer.BayeuxServerListener> getListeners()
-
getKnownTransportNames
public java.util.Set<java.lang.String> getKnownTransportNames()
- Specified by:
getKnownTransportNamesin interfaceBayeux- Returns:
- the set of known transport names of this Bayeux object.
- See Also:
Bayeux.getAllowedTransports()
-
getTransport
public ServerTransport getTransport(java.lang.String transport)
- Specified by:
getTransportin 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(java.util.List<ServerTransport> transports)
-
getTransports
public java.util.List<ServerTransport> getTransports()
-
findHttpTransport
protected AbstractHttpTransport findHttpTransport(javax.servlet.http.HttpServletRequest request)
-
getAllowedTransports
@ManagedAttribute(value="The transports allowed by this CometD server", readonly=true) public java.util.List<java.lang.String> getAllowedTransports()- Specified by:
getAllowedTransportsin 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(java.lang.String... allowed)
-
setAllowedTransports
public void setAllowedTransports(java.util.List<java.lang.String> allowed)
-
isBroadcastToPublisher
@ManagedAttribute(value="Whether this CometD 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, java.lang.String error)
-
createReply
protected ServerMessage.Mutable createReply(ServerMessage.Mutable message)
-
sweep
@ManagedOperation(value="Sweeps channels and sessions of this CometD server", impact="ACTION") public void sweep()
-
isDetailedDump
@ManagedAttribute("Reports additional details in the dump() operation") public boolean isDetailedDump()
-
setDetailedDump
public void setDetailedDump(boolean detailedDump)
-
getSweepPeriod
@ManagedAttribute("The period, in milliseconds, of the sweeping activity performed by the server") public long getSweepPeriod()
-
setSweepPeriod
public void setSweepPeriod(long sweepPeriod)
-
getSweepThreads
@ManagedAttribute("The maximum number of threads that can be used by the sweeping activity performed by the server") public int getSweepThreads()
-
setSweepThreads
public void setSweepThreads(int sweepThreads)
-
dump
public void dump(java.lang.Appendable out, java.lang.String indent) throws java.io.IOException- Specified by:
dumpin interfaceorg.eclipse.jetty.util.component.Dumpable- Overrides:
dumpin classorg.eclipse.jetty.util.component.ContainerLifeCycle- Throws:
java.io.IOException
-
getLastSweepInfo
public java.util.Map<java.lang.String,java.lang.Object> getLastSweepInfo()
-
getLongestSweepInfo
public java.util.Map<java.lang.String,java.lang.Object> getLongestSweepInfo()
-
-