Class Oort

java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.cometd.oort.Oort
All Implemented Interfaces:
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("CometD cloud node")
public class Oort
extends org.eclipse.jetty.util.component.ContainerLifeCycle

Oort is the cluster manager that links one CometD server to a set of other CometD servers.

The Oort instance is created and configured by either OortMulticastConfigServlet or OortStaticConfigServlet.

This class maintains a collection of OortComet instances to each CometD server, created by calls to observeComet(String).

The key configuration parameter is the Oort URL, which is full public URL of the CometD servlet to which the Oort instance is bound, for example: http://myserver:8080/context/cometd.

Oort instances can be configured with a shared secret, which allows the Oort instance to distinguish handshakes coming from remote clients from handshakes coming from other Oort comets: the firsts may be subject to a stricter authentication policy than the seconds.

See Also:
OortMulticastConfigServlet, OortStaticConfigServlet
  • Nested Class Summary

    Nested Classes
    Modifier and Type Class Description
    protected class  Oort.CloudListener
    This listener handles messages sent to /oort/cloud that contains the list of comets connected to the Oort that just joined the cloud.
    static interface  Oort.CometListener
    Listener interface that gets notified of comet events, that is when a new comet joins the cloud or when a comet leaves the cloud.

    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.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

    org.eclipse.jetty.util.component.LifeCycle.Listener
  • Field Summary

    Fields
    Modifier and Type Field Description
    static java.lang.String EXT_COMET_URL_FIELD  
    static java.lang.String EXT_OORT_ALIAS_URL_FIELD  
    static java.lang.String EXT_OORT_FIELD  
    static java.lang.String EXT_OORT_ID_FIELD  
    static java.lang.String EXT_OORT_SECRET_FIELD  
    static java.lang.String EXT_OORT_URL_FIELD  
    static java.lang.String OORT_ATTRIBUTE  
    static java.lang.String OORT_CLOUD_CHANNEL  
    static java.lang.String OORT_SERVICE_CHANNEL  

    Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    FAILED, STARTED, STARTING, STOPPED, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor Description
    Oort​(BayeuxServer bayeux, java.lang.String url)  
  • Method Summary

    Modifier and Type Method Description
    void addCometListener​(Oort.CometListener listener)
    Registers the given listener to be notified of comet events.
    protected void configureOortComet​(OortComet oortComet)  
    protected void connectComet​(OortComet comet, java.util.Map<java.lang.String,​java.lang.Object> fields)  
    void deobserveChannel​(java.lang.String channelId)  
    OortComet deobserveComet​(java.lang.String cometURL)  
    protected void doStart()  
    protected void doStop()  
    void dump​(java.lang.Appendable out, java.lang.String indent)  
    protected java.lang.String encodeSecret​(java.lang.String secret)  
    protected OortComet findComet​(java.lang.String cometURL)  
    BayeuxServer getBayeuxServer()  
    java.util.List<ClientTransport.Factory> getClientTransportFactories()  
    OortComet getComet​(java.lang.String cometURL)  
    java.lang.String getId()  
    JSONContext.Client getJSONContextClient()  
    java.util.Set<java.lang.String> getKnownComets()  
    java.util.Set<java.lang.String> getObservedChannels()  
    LocalSession getOortSession()  
    protected java.util.concurrent.ScheduledExecutorService getScheduler()  
    java.lang.String getSecret()  
    java.lang.String getURL()  
    boolean isAckExtensionEnabled()  
    boolean isBinaryExtensionEnabled()  
    protected boolean isCometConnected​(java.lang.String oortURL)  
    boolean isOort​(ServerSession session)  
    boolean isOortHandshake​(Message handshake)  
    protected void joinComets​(Message message)  
    protected OortComet newOortComet​(java.lang.String cometURL)  
    protected OortComet newOortComet​(java.lang.String cometURL, ClientTransport transport, ClientTransport[] otherTransports)  
    protected java.util.Map<java.lang.String,​java.lang.Object> newOortHandshakeFields​(java.lang.String cometURL, java.lang.String oortAliasURL)  
    void observeChannel​(java.lang.String channelName)
    Observes the given channel, registering to receive messages from the Oort comets connected to this Oort instance.
    OortComet observeComet​(java.lang.String cometURL)
    Connects (if not already connected) and observes another Oort instance (identified by the given URL) via a OortComet instance.
    void removeCometListener​(Oort.CometListener listener)
    Deregisters the given listener from being notified of comet events.
    void removeCometListeners()
    Deregisters all comet listeners.
    protected static java.lang.String replacePunctuation​(java.lang.String source, char replacement)  
    void setAckExtensionEnabled​(boolean value)  
    void setBinaryExtensionEnabled​(boolean value)  
    void setClientTransportFactories​(java.util.List<ClientTransport.Factory> factories)  
    void setJSONContextClient​(JSONContext.Client jsonContext)  
    void setSecret​(java.lang.String secret)  
    java.lang.String toString()  

    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

    Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.eclipse.jetty.util.component.Container

    getCachedBeans, getEventListeners

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

    dumpSelf

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    isDumpable
  • Field Details

    • OORT_ATTRIBUTE

      public static final java.lang.String OORT_ATTRIBUTE
    • EXT_OORT_FIELD

      public static final java.lang.String EXT_OORT_FIELD
      See Also:
      Constant Field Values
    • EXT_OORT_URL_FIELD

      public static final java.lang.String EXT_OORT_URL_FIELD
      See Also:
      Constant Field Values
    • EXT_OORT_ID_FIELD

      public static final java.lang.String EXT_OORT_ID_FIELD
      See Also:
      Constant Field Values
    • EXT_OORT_SECRET_FIELD

      public static final java.lang.String EXT_OORT_SECRET_FIELD
      See Also:
      Constant Field Values
    • EXT_COMET_URL_FIELD

      public static final java.lang.String EXT_COMET_URL_FIELD
      See Also:
      Constant Field Values
    • EXT_OORT_ALIAS_URL_FIELD

      public static final java.lang.String EXT_OORT_ALIAS_URL_FIELD
      See Also:
      Constant Field Values
    • OORT_CLOUD_CHANNEL

      public static final java.lang.String OORT_CLOUD_CHANNEL
      See Also:
      Constant Field Values
    • OORT_SERVICE_CHANNEL

      public static final java.lang.String OORT_SERVICE_CHANNEL
      See Also:
      Constant Field Values
  • Constructor Details

    • Oort

      public Oort​(BayeuxServer bayeux, java.lang.String url)
  • Method Details

    • doStart

      protected void doStart() throws java.lang.Exception
      Overrides:
      doStart in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      java.lang.Exception
    • doStop

      protected void doStop() throws java.lang.Exception
      Overrides:
      doStop in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      java.lang.Exception
    • getScheduler

      protected java.util.concurrent.ScheduledExecutorService getScheduler()
    • getBayeuxServer

      @ManagedAttribute(value="The BayeuxServer of this Oort", readonly=true) public BayeuxServer getBayeuxServer()
    • getURL

      @ManagedAttribute(value="The URL of this Oort", readonly=true) public java.lang.String getURL()
      Returns:
      the public absolute URL of the Oort CometD server
    • getId

      @ManagedAttribute(value="The unique ID of this Oort", readonly=true) public java.lang.String getId()
    • getSecret

      @ManagedAttribute("The secret of this Oort") public java.lang.String getSecret()
    • setSecret

      public void setSecret​(java.lang.String secret)
    • isAckExtensionEnabled

      @ManagedAttribute("Whether the acknowledgement extension is enabled") public boolean isAckExtensionEnabled()
    • setAckExtensionEnabled

      public void setAckExtensionEnabled​(boolean value)
    • isBinaryExtensionEnabled

      @ManagedAttribute("Whether the binary extension is enabled") public boolean isBinaryExtensionEnabled()
    • setBinaryExtensionEnabled

      public void setBinaryExtensionEnabled​(boolean value)
    • getJSONContextClient

      public JSONContext.Client getJSONContextClient()
    • setJSONContextClient

      public void setJSONContextClient​(JSONContext.Client jsonContext)
    • getClientTransportFactories

      public java.util.List<ClientTransport.Factory> getClientTransportFactories()
    • setClientTransportFactories

      public void setClientTransportFactories​(java.util.List<ClientTransport.Factory> factories)
    • observeComet

      public OortComet observeComet​(java.lang.String cometURL)

      Connects (if not already connected) and observes another Oort instance (identified by the given URL) via a OortComet instance.

      Parameters:
      cometURL - the Oort URL to observe
      Returns:
      The OortComet instance associated to the Oort instance identified by the URL or null if the given Oort URL represent this Oort instance
    • newOortComet

      protected OortComet newOortComet​(java.lang.String cometURL)
    • newOortComet

      protected OortComet newOortComet​(java.lang.String cometURL, ClientTransport transport, ClientTransport[] otherTransports)
    • configureOortComet

      protected void configureOortComet​(OortComet oortComet)
    • encodeSecret

      protected java.lang.String encodeSecret​(java.lang.String secret)
    • connectComet

      protected void connectComet​(OortComet comet, java.util.Map<java.lang.String,​java.lang.Object> fields)
    • deobserveComet

      public OortComet deobserveComet​(java.lang.String cometURL)
    • getKnownComets

      @ManagedAttribute(value="URLs of known Oorts in the cluster", readonly=true) public java.util.Set<java.lang.String> getKnownComets()
      Returns:
      the set of known Oort comet servers URLs.
    • getComet

      public OortComet getComet​(java.lang.String cometURL)
      Parameters:
      cometURL - the URL of a Oort comet
      Returns:
      the OortComet instance connected with the Oort comet with the given URL
    • findComet

      protected OortComet findComet​(java.lang.String cometURL)
      Parameters:
      cometURL - the URL of a Oort comet
      Returns:
      the OortComet instance connecting or connected with the Oort comet with the given URL
    • observeChannel

      @ManagedOperation(value="Observes the given channel", impact="ACTION") public void observeChannel​(@Name(value="channel",description="The channel to observe") java.lang.String channelName)

      Observes the given channel, registering to receive messages from the Oort comets connected to this Oort instance.

      Once observed, all OortComet instances subscribe to the channel and will repeat any messages published to the local channel (with loop prevention), so that the messages are distributed to all Oort comet servers.

      Parameters:
      channelName - the channel to observe
    • deobserveChannel

      @ManagedOperation(value="Deobserves the given channel", impact="ACTION") public void deobserveChannel​(@Name(value="channel",description="The channel to deobserve") java.lang.String channelId)
    • isOort

      public boolean isOort​(ServerSession session)
      Parameters:
      session - the server session to test
      Returns:
      whether the given server session is one of those created by the Oort internal working
      See Also:
      isOortHandshake(Message)
    • isOortHandshake

      public boolean isOortHandshake​(Message handshake)
      Parameters:
      handshake - the handshake message to test
      Returns:
      whether the given handshake message is coming from another Oort comet that has been configured with the same secret
      See Also:
      isOort(ServerSession)
    • newOortHandshakeFields

      protected java.util.Map<java.lang.String,​java.lang.Object> newOortHandshakeFields​(java.lang.String cometURL, java.lang.String oortAliasURL)
    • isCometConnected

      protected boolean isCometConnected​(java.lang.String oortURL)
      Parameters:
      oortURL - the comet URL to check for connection
      Returns:
      whether the given comet is connected to this comet
    • addCometListener

      public void addCometListener​(Oort.CometListener listener)
      Registers the given listener to be notified of comet events.
      Parameters:
      listener - the listener to add
      See Also:
      removeCometListener(CometListener)
    • removeCometListener

      public void removeCometListener​(Oort.CometListener listener)
      Deregisters the given listener from being notified of comet events.
      Parameters:
      listener - the listener to remove
      See Also:
      addCometListener(CometListener)
    • removeCometListeners

      public void removeCometListeners()
      Deregisters all comet listeners.
      See Also:
      addCometListener(CometListener), removeCometListener(CometListener)
    • joinComets

      protected void joinComets​(Message message)
    • getObservedChannels

      public java.util.Set<java.lang.String> getObservedChannels()
    • getOortSession

      public LocalSession getOortSession()
      Returns:
      the oortSession
    • replacePunctuation

      protected static java.lang.String replacePunctuation​(java.lang.String source, char replacement)
    • dump

      public void dump​(java.lang.Appendable out, java.lang.String indent) throws java.io.IOException
      Specified by:
      dump in interface org.eclipse.jetty.util.component.Dumpable
      Overrides:
      dump in class org.eclipse.jetty.util.component.ContainerLifeCycle
      Throws:
      java.io.IOException
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class org.eclipse.jetty.util.component.AbstractLifeCycle