On This Page

The platform's solace binding includes both a java based and jni based implementation and allows connectivity to a solace message router.

JNI vs JAVA Binding

The Java binding uses solace's JCSMP api while the JNI binding uses solace's CCSMP api. The JNI binding supports zero garbage messaging while in steady state, but only works on linux platforms. The Java binding is not zero garbage but works on all platform supported by X. Other differences between the two bindings are:

Bus Descriptor Format

A solace message bus can be configured via a descriptor string as follows which takes the connection information followed by a list of provider properties. 

solace://<address>:<port>&prop1=val1&propN=valN

An example bus descriptor for solace would like like:

solace://<address>:<port>&usejni=true&vpn_name=default&username=test& /
password=test&usejni=true&vpn_name=default&username=test&password=test

DDL

In a DDL config file a solace bus can equivalently be configured in one two ways

<buses>
  <bus name="my-bus">
    <provider>solace</provider>
    <address>192.168.1.9</address>
    <port>55555</port>
    <properties>
      <usejni>true</usejni>
      <vpn_name>default</vpn_name>
      <username>test</username>
      <password>test</password>
    </properties>
    <channels>
      ...
    </channels>
  </bus>
</buses>
<buses>
  <bus name="my-bus" descriptor="solace://<address>:<port>&amp;usejni=true&amp;vpn_name=default&amp; /
   username=test&amp;password=test&amp;usejni=true&amp;vpn_name=default&amp;username=test&amp;password=test">
    <channels>
      ...
    </channels>
  </bus>
</buses>

The descriptor form is useful in cases where the descriptor name may be supplied as an external configuration property that is substituted for example:

<buses>
  <bus name="my-bus" descriptor="${myBusDescriptor::loopback://mybus">
    <channels>
      ...
    </channels>
  </bus>
</buses>

Solace Provider Properties

Passed Through Properties

The solace JCSMP and JNI apis on which the platform's solace binding is built allow configuration of the connection by specifying properties. The provider properties specified in the bus descriptor for the binding are passed through to the solace connection as follows:

See the solace documentation for more information on JCSMP and CCSMP. Neeve, does not test properties not explicitly called out on this page or in the javadoc. End users should therefore do their own due diligence in testing any passed through properties. 

Rationalized Properties

To make is easier for applications to switch between using the jni (c) and jcsmp (java) binding implementations, several commonly used binding properties are automatically translated by the binding. These are summarized in the table below. If your application doesn't use any additional solace configuration properties then switching between the java a c

Binding PropertyJCSMP PropertyCCSMP Property
"vpn_name""jcsmp.vpn_name""SESSION_VPN_NAME"
"username""jcsmp.usename""SESSION_USERNAME"
"password""jcsmp.password""SESSION_PASSWORD"
"publish_window_size""jcsmp.pub_ack_window_size""SESSION_PUB_WINDOW_SIZE"
"reconnect_retry_count""jcsmp.CLIENT_CHANNEL_PROPERTIES.ReconnectRetries""SESSION_RECONNECT_RETRIES"
"connect_retry_count""jcsmp.CLIENT_CHANNEL_PROPERTIES.ConnectRetries""SESSION_CONNECT_RETRIES"
"tcp_nodelay""jcsmp.CLIENT_CHANNEL_PROPERTIES.tcpNoDelay""SESSION_TCP_NODELAY"
"reapply_subscriptions""jcsmp.REAPPLY_SUBSCRIPTIONS""SESSION_REAPPLY_SUBSCRIPTIONS"
"ignore_subscriptions_error""jcsmp.IGNORE_DUPLICATE_SUBSCRIPTION_ERROR""SESSION_IGNORE_DUP_SUBSCRIPTION_ERROR"

MessageBusDescriptor
.PROPNAME_ADDRESS

(the value from the bus descriptor address)

"jcsmp.HOST""SESSION_HOST"

Additional Properties

See the SolaceBindingProperties javadoc for the listing of additional provider properties specific to the solace binding.

Auto Tuning

When not explicitly as binding property, the following properties are automatically set on the binding based on the global optimization value.

Binding Propertynv.optimizefor=latencynv.optimizefor=throughputno optimization
"tcp_nodelay"truefalsefalse
"detached_sends_queue_wait_strategy"See XRuntime.
createWaitStrategy
See XRuntime.
createWaitStrategy
Blocking
"detached_dispatch_queue_wait_strategy"See XRuntime.
createWaitStrategy
See XRuntime.
createWaitStrategy
Blocking

Orphan Subscription Checks

When a solace message bus binding has a queue name specified it is capable of issue guaranteed subscriptions against that queue. When a binding is started it is possible that there may already be existing subscriptions on the queue that don't match those that the application is issuing. Such subscriptions are considered to be 'orphan' subscriptions - presumably those left over from an early session that were not removed.

The following policy can be configured to check for orphan subscriptions

 Policy Desecription
None

With this policy, the appliance is not queried for subscriptions

This is the default policy

Ignore

With this policy enabled the appliance is queried for subscriptions, but no action is taken other than tracing the orphans subscriptions at info level.

One other difference between SolaceOrphanSubscriptionCheckPolicy.None and SolaceOrphanSubscriptionCheckPolicy.Ignore is the the query subscriptions are reported to a subscription validator if registered. 

LogExceptionAndContinue

With this policy enabled the appliance is queried for subscriptions and if orphands are found an exception is logged.

NoOrphan

With this policy enabled the appliance is queried for subscriptions and an exception is thrown from the message binding start method.

Configuration

To check for existing subscription SEMP must be enabled for the binding to retrieve the list of subscriptions over the messaging connection. The following provider properties must be specified on the bus descriptor to perform subscription checks:

PropertyUsageDefaultDescription
enable_semprequiredfalse

Property controlling whether or not Solace semp over messaging requests are enabled.

Controls whether or not semp over messaging requests are enabled. This property must be enabled in order to query the solace appliance for existing subscriptions. This requires that the appliance has semp over messaging enabled and that the user is authorized to make semp requests.

(warning) NOTE: SEMP operations are currently an experimental feature. Enabling semp is not recommended in production without rigorous end user testing, and it should be noted that solace could drop support for SEMP over messaging in the future. Reliance on SEMP operations may also limit ability to connect to solace appliance versions that don't have a compatibles SEMP model.

orphan_subscription_checkrequiredNone

Property controlling the orphan subscription check policy.

This policy controls checks for orphaned Guaranteed subscriptions done when the solace binding is started. The check for orphaned is performed after the bindings subscription are created, but just before messaging is started. The solace appliance is queried for the list of Guaranteed subscriptions on the Queue and compared to the subscriptions that were issued. Any subscriptions on the queue that were not issued by the binding are deemed to be orphans.

When using a policy other than None, "enable_semp" must be set to true. 

semp_versionrecommendedsoltr/7_1_1The version of semp requests must match that supported by the messaging appliance. If this property is not set semp requests will be retried using the version reported in the error response if a version mismatch is detected. Setting this property correctly avoids the need to make the initial request to determine the semp version.
semp_request_timeoutrecommended10000

Property controlling what timeout to use for semp requests in milliseconds.

It is recommended that you test against your appliance and application under load to ensure that the default timeout of 10 seconds is sufficient.

subscription_validatorunsupported-This is a legacy property that allows the an application registered callback to perform additional subscription validation. This should only be used on guidance for Neeve support.