Interface ISessionTrees

This feature allows a client session to configure session trees.

Inherited Members
IFeature.Session
Namespace: PushTechnology.ClientInterface.Client.Features.SessionTrees
Assembly: Diffusion.Client.dll
Syntax
public interface ISessionTrees : IFeature
Remarks

A session tree is a virtual view of the topic tree presented to a session by fetch and subscription operations. Custom session trees for different sessions can be configured using declarative rules maintained by the server to meet data security, data optimisation, or personalisation and localisation requirements. Each session can be presented with a unique session tree based on its session properties.

A session tree is produced by applying branch mappings to the topic tree. Branch mappings are organised into branch mapping tables. Each branch mapping table is assigned to a unique path – the session tree branch.

A session tree is composed of session paths. Each session path is mapped via the branch mapping tables to a unique topic path.

A branch mapping table is an ordered list of (session filter, topic tree branch) pairs. For example, the branch mapping table for the session tree branch market/prices might be:

Session filter                           Topic tree branch
==============                           =================
USER_TIER is '1' or $Country is 'DE'     backend/discounted_prices
USER_TIER is '2'                         backend/standard_prices
$Principal is ''                         backend/delayed_prices

With this configuration, if an unauthenticated session (one that matches the $Principal is '' session filter) subscribes to the session path market/prices/X, and there is a topic bound to the topic path backend/delayed_prices/X, the subscription will complete. The session will receive a subscription notification under the session path market/prices/X, together with the topic properties and the value of the topic. The session is unaware that the data originates from a topic bound to a different topic path. If no topic is bound to backend/delayed_prices/X, the subscription will not resolve and the session will receive no data, even if there is a topic bound to market/prices/X.

Session trees complement the data transformation capabilities of ITopicViews topic views. In our example, the time delayed time feed at backend/delayed_prices could be maintained by a topic view using the delay by clause.

Branch mappings are persisted by the server and shared across a cluster, in a similar manner to topic views, security stores, and metric collectors. Branch mappings are editable using this feature, and via the management console.

For a given session and session path, at most one branch mapping applies. The applicable branch mapping is chosen as follows:

  • Each branch mapping table with session tree branch that is a prefix of the session path is considered. For a given table, the first branch mapping with a session filter that matches the session's properties is the one that applies. A branch mapping table may have no applicable branch mappings for a session.
  • If there are several such branch mapping tables with a branch mapping that for the session, the one with the longest prefix of the session path applies.
  • If no branch mapping table has a branch mapping for the session, the session path is translated to the identical topic path.

Access control

To subscribe to or fetch from a session path, a session must be granted the appropriate path permission to the session path for the operation (SELECT_TOPIC, or READ_TOPIC). The session doesn't require any permissions to the topic path of the topic providing the data.

To create or replace branch mappings, a session needs the MODIFY_TOPIC path permission for the session tree branch of the branch mapping table, EXPOSE_BRANCH path permission for the topic tree branch of each branch mapping, and (if an existing table with the same session tree branch is being replaced) EXPOSE_BRANCH permission for each branch mapping of existing table.

To retrieve a branch mapping table, a session needs the READ_TOPIC path permission for its session tree branch.

Accessing the feature

This feature may be obtained from an ISession as follows:

var sessionTrees = session.SessionTrees;

Added in version 6.7.

Methods

GetBranchMappingTableAsync(String)

Retrieves a branch mapping table from the server.

Declaration
Task<IBranchMappingTable> GetBranchMappingTableAsync(string sessionTreeBranch)
Parameters
Type Name Description
System.String sessionTreeBranch

The session tree branch that identifies the branch mapping table.

Returns
Type Description
Task<IBranchMappingTable>

The Task that completes when a response is received from the server, returning the branch mapping table for sessionTreeBranch.

Remarks

If there is no branch mapping table at the given session tree branch, this method will return an empty branch mapping table.

Exceptions
Type Condition
SessionSecurityException

The calling session does not have READ_TOPIC permission for the session tree branch of the branch mapping table. Thrown by the returned task.

SessionClosedException

The calling session is closed. Thrown by the returned task.

GetBranchMappingTableAsync(String, CancellationToken)

Retrieves a branch mapping table from the server.

Declaration
Task<IBranchMappingTable> GetBranchMappingTableAsync(string sessionTreeBranch, CancellationToken cancellationToken)
Parameters
Type Name Description
System.String sessionTreeBranch

The session tree branch that identifies the branch mapping table.

CancellationToken cancellationToken

The cancellation token used to cancel the current operation.

Returns
Type Description
Task<IBranchMappingTable>

The Task that completes when a response is received from the server, returning the branch mapping table for sessionTreeBranch.

Remarks

If there is no branch mapping table at the given session tree branch, this method will return an empty branch mapping table.

Exceptions
Type Condition
SessionSecurityException

The calling session does not have READ_TOPIC permission for the session tree branch of the branch mapping table. Thrown by the returned task.

SessionClosedException

The calling session is closed. Thrown by the returned task.

GetSessionTreeBranchesWithMappingsAsync()

Retrieves the session tree branches of the server's branch mapping tables. The results will only include the session tree branches of branch mapping tables that have at least one branch mapping and for which the calling session has READ_TOPIC path permission for the session tree branch.

Declaration
Task<IReadOnlyCollection<string>> GetSessionTreeBranchesWithMappingsAsync()
Returns
Type Description
Task<IReadOnlyCollection<System.String>>

The Task that completes when a response is received from the server, returning a list of session tree branches in path order.

Remarks

Individual branch mapping tables can be retrieved using GetBranchMappingTableAsync(String).

Exceptions
Type Condition
SessionClosedException

The calling session is closed. Thrown by the returned task.

GetSessionTreeBranchesWithMappingsAsync(CancellationToken)

Retrieves the session tree branches of the server's branch mapping tables. The results will only include the session tree branches of branch mapping tables that have at least one branch mapping and for which the calling session has READ_TOPIC path permission for the session tree branch.

Declaration
Task<IReadOnlyCollection<string>> GetSessionTreeBranchesWithMappingsAsync(CancellationToken cancellationToken)
Parameters
Type Name Description
CancellationToken cancellationToken

The cancellation token used to cancel the current operation.

Returns
Type Description
Task<IReadOnlyCollection<System.String>>

The Task that completes when a response is received from the server, returning a list of session tree branches in path order.

Remarks

Individual branch mapping tables can be retrieved using GetBranchMappingTableAsync(String).

Exceptions
Type Condition
SessionClosedException

The calling session is closed. Thrown by the returned task.

PutBranchMappingTableAsync(IBranchMappingTable)

Creates or replaces a branch mapping table.

Declaration
Task<object> PutBranchMappingTableAsync(IBranchMappingTable branchMappingTable)
Parameters
Type Name Description
IBranchMappingTable branchMappingTable

The new table.

Returns
Type Description
Task<System.Object>

The Task that completes when a response is received.

Remarks

The server ensures that there is at most one branch mapping table for a session tree branch. Putting a new branch mapping table will replace any previous branch mapping table with the same session tree branch. To remove all branch mappings for a session tree branch, put an empty branch mapping table.

If the task completes successfully, the Task result will be null.

Exceptions
Type Condition
InvalidBranchMappingException

The branchMappingTable or one of its branch mappings is invalid. Thrown by the returned task.

SessionSecurityException

The calling session does not have MODIFY_TOPIC permission for the session tree branch of the branch mapping table. Thrown by the returned task.

SessionSecurityException

The calling session does not have EXPOSE_BRANCH permission for each branch mapping of branchMappingTable, and (if there is an existing table for the session tree branch) EXPOSE_BRANCH permission for each branch mapping of the existing table. Thrown by the returned task.

ClusterRoutingException

The operation failed due to a transient cluster error. Thrown by the returned task.

SessionClosedException

The calling session is closed. Thrown by the returned task.

PutBranchMappingTableAsync(IBranchMappingTable, CancellationToken)

Creates or replaces a branch mapping table.

Declaration
Task<object> PutBranchMappingTableAsync(IBranchMappingTable branchMappingTable, CancellationToken cancellationToken)
Parameters
Type Name Description
IBranchMappingTable branchMappingTable

The new table.

CancellationToken cancellationToken

The cancellation token used to cancel the current operation.

Returns
Type Description
Task<System.Object>

The Task that completes when a response is received.

Remarks

The server ensures that a session tree branch has at most one branch mapping table. Putting a new branch mapping table will replace any previous branch mapping table with the same session tree branch. To remove all branch mappings for a session tree branch, put an empty branch mapping table.

If the task completes successfully, the Task result will be null.

Exceptions
Type Condition
InvalidBranchMappingException

The branchMappingTable or one of its branch mappings is invalid. Thrown by the returned task.

SessionSecurityException

The calling session does not have MODIFY_TOPIC permission for the session tree branch of the branch mapping table. Thrown by the returned task.

SessionSecurityException

The calling session does not have EXPOSE_BRANCH permission for each branch mapping of branchMappingTable, and (if there is an existing table for the session tree branch) EXPOSE_BRANCH permission for each branch mapping of the existing table. Thrown by the returned task.

ClusterRoutingException

The operation failed due to a transient cluster error. Thrown by the returned task.

SessionClosedException

The calling session is closed. Thrown by the returned task.

Back to top