Bug fixes

  • Changes to the periodic alarm reporting period will now be reflected across all cluster nodes immediately rather than requiring a restart of nodes not handling the change request in the first instance before the change is applied. (RHI-3511)

  • Fixed a NullPointerException that occurred during node startup if a Rhino installation containing existing management database state was moved to a different filesystem directory. (RHI-5774)


Bug fixes

  • Fixed a potential NullPointerException when handling SQLExceptions in the persistent database storage subsystem. (RHI-5548)

  • Fixed failover of the replicated SLEE-generated service activities so now they will only get adopted by nodes where the corresponding service is running. If a service is not running on any remaining nodes then the activity for that service is removed. This also fixes an AssertionError that would occur, for example, on node recovery when the restarting node considered itself to be the first node where a service was starting again and tried to recreate the service activity, but failed to do so because the activity already existed on another node where it shouldn’t. (RHI-5636)

  • If a service was deactivated on the node owning the associated SLEE-generated service activity, and the service was still running on other cluster nodes, ownership of the service activity was not being reassigned to one of these other nodes, rather the activity remained owned by the deactivating node. This could cause future problems such as AssertionErrors, for example, if the other nodes were restarted. This issue is now fixed. (RHI-5658)

  • Fixed a memory leak that occurred in Rhino if a stats client started collection for a statistics session that had no stat parameter subscriptions. Also fixed a reconnection issue in rhino-stats where it failed to restart stats collection after certain connection failover scenarios, meaning the client didn’t output stats any more after the failover. (RHI-5717)

  • Fixed a sorting comparator bug in the rhino-console listactivealarms command that could lead to an IllegalArgumentException in particular dataset cases. (RHI-5732)


  • Added a new built-in ServiceNodeActivity and ServiceNodeStartedEvent, similar to the SLEE-defined ServiceActivity and ServiceStartedEvent, but with the following differences:

    • A ServiceNodeActivity is not replicated.

    • A separate ServiceNodeActivity is started for a service on each node where that service starts. A ServiceNodeStartEvent is fired on each ServiceNodeActivity when the activity starts.

    • A ServiceNodeActivity ends (with a normal ActivityEndEvent) when the associated service on the node transitions to the stopping state.


Bug fixes

  • Fixed rare BufferOverflowException triggered by concurrent SNMP counter access (RHI-5493)

  • Fix a bug where SBB parts were not releasing their component references to dependent event types when unverified. (RHI-5520)

  • Fixed NPE when attempting to set SBB tracer levels in a service with an install level of INSTALLED. The operation now fails with a more appropriate error. (RHI-5542)


  • Added new 'alarmType' parameter ( to SNMP Alarm Notifications. This OID contains the Alarm Type listed in the alarm catelog. (RHI-5516)


Bug fixes

  • Fixed a code generation issue that caused deployment of an SBB to fail if the SBB didn’t define an Activity Context Interface but the SBB abstract class defined a non-abstract asSbbActivityContextInterface method. (RHI-5258)

  • Fixed an internal corruption of metadata that occurred if a component referenced by more than one linked component had one of those linked components removed. This could have led to, for example, service activation callbacks for the remaining linked components not being made to resource adaptors when required by a target service component. (RHI-5347)

  • Fixed a lock manager issue that affected a deactivate-and-activate service operation when more than one service was being deactivated, and improved the resiliency of stopping tasks in general in the wake of unexpected errors during their execution. (RHI-5362)


  • Added a deregisterProfileMBeans command to rhino-console that allows rogue profile MBeans such as those for uncommitted profiles to be cleaned up. (RHI-5383)


Bug fixes

  • Fixed bug in activity attachment mapping that caused various failures including event delivery spinning on activity-end cleanup. (RHI-5097)

  • CMP fields of type java.math.BigInteger or java.math.BigDecimal will no longer cause a deployment failure during code generation. (RHI-4516)

  • Fixed an issue in export scripts which created resource adaptor entities before the relevant security permissions had been set. (RHI-4500)

  • Corrected header attached to CSV alarm log, and fixed timestamp field formatting when an alarm originates from a user-defined namespace. (RHI-4631)

  • Fixed the exporter when multiple namespace names are sanitised to the same value. The exporter will now generate unique filenames in the exported data when sanitised names clash, rather than simply overwriting previously written data. (RHI-4705)

  • Fixed some erroneous transactional behaviour during namespace creation and removal that occurred if the bounding transaction happened to fail during commit. (RHI-4712)

  • The internal distributed management lock is now correctly released if an attempt is made to remove a configuration item of an unknown type. (RHI-4795)

  • Fixed an activity end race condition in the activity handler that could lead to the pessimistic or replicated lock for an activity not being released when the enclosing transaction ends. (RHI-4983)

  • Profile, Usage, and Usage Notification Manager MBeans related to a profile table will now be correctly deregistered from the MBean server when a profile table is renamed. (RHI-4975)


  • The rhino-console installlocaldu command now supports an optional -url argument to specify an alternate URL identifier for the deployable unit. (RHI-4939)

  • Rhino client tools now allow the GC_OPTIONS environment variable to be overridden. (RHI-5101)

  • The <setactivenamespace> Ant task now also updates the rhino.namespace system property so that any new connection object instances inherit the same namespace context. (RHI-4764)

  • The system property "file.encoding" is now globally readable by default. This is needed by some JDBC drivers. (RHI-4907)


Bug fixes

  • Fixed a NullPointerException thrown by the createpersistenceinstance and updatepersistenceinstance Ant management tasks. (RHI-4482)


New Features

  • The namespaces feature is now supported for production use.

Bug fixes

  • Fixed double-event scheduling from multiple suspend-resume cycles and interleaved transactions suspending, resuming and firing events. (RHI-3207)

  • Fixed a problem that could cause corruption of internal state when a node failed during deployment. (RHI-4327)

  • Fixed a NullPointerException that occurred when accessing service state in symmetric activation state mode. (RHI-4377)

  • Fixed a race condition that could report a profile as still being edited by some other management client if a client tried to edit a profile immediately after committing or rolling back changes to that same profile. (RHI-4442)

  • Fixed a NullPointerException that occurred when deploying linked components. (RHI-4395)

  • Fix after-transaction logic to always clean up activity event queues. Prevents stuck activities from transactions containing resources that fail between commit and cleanup. (RHI-4326)

  • Services and resource adaptor entities that are in the STOPPING state when a node is started will now correctly revert to the INACTIVE state during bootup when the symmetric activation state mode is not enabled. (RHI-4421)

  • Fixed a race condition between the creation of a profile in a user transaction and a concurrent long-running timeout and rollback of that transaction. This race condition meant that some metadata state for the failed profile creation was not cleaned up, preventing any further profile creation attempts for that profile to succeed. (RHI-4424)

  • Fixed compilation issues when deploying SBBs with a very large number of CMP fields. (RHI-4392)

  • Fix malformed ObjectName generation that prevented interaction with object pool configurations for components in user-defined namespaces. The "use-defaults" property of object pool configurations has been removed because it did not function in an obvious manner. (RHI-4391)

  • The namespace that each management operation was performed on is now included in the management.csv audit log file, present as the 7th field in the CSV. Rhino will use the old audit log file format if the "rhino.audit.log_format" system property is set to "2.4" (but this should not be set if namespaces are being used because it will not be possible to tell which namespace an operation was run in). (RHI-4352)

  • ServiceUsageMBean, ProfileTableUsageMBean and ResourceUsageMBean are now included in the management audit log. (RHI-4427)

  • The snapshot tool can now be used from a remote host. (RHI-4406)

  • Fixed Java GC options in the Windows Rhino SDK scripts. (RHI-4409)


  • Improved the mechanism used to detect and protect against concurrent profile edits occurring over the profile management interface. This change should prevent unexpected lock timeouts if the compare-and-set locking operation takes longer than one second, eg. slow hardware. (RHI-4239)

  • Added ability to optionally exclude individual configuration types when importing a Rhino export. This is particularly useful for cases where the target Rhino instance does not have a JDBC driver for the persistence configuration being imported. (RHI-4386)


Bug fixes

  • Fixed an UnrecognizedLinkNameException when listing resource adaptor link names. (RHI-4211)

  • Fixed a NullPointerException when a management client tried to get the current trace level for a tracer. (RHI-4278)

  • Fixed event router warnings when stage items were rejected for execution, typically because of overload. (RHI-4241)

  • Fixed a bug that prevented the per-node SNMP agent from being deactivated. (RHI-4318)

  • Fixed a bug that prevented an SNMP OID mapping from being registered if it was cleared when Rhino started. (RHI-4308)

  • In the case where a resource adaptor entity or profile table is created from a linked or shadowed component, only the install level of the resolved target component is now relevant when deciding whether or not to allow the operation to proceed. The install level of the virtual component itself is irrelevant. (RHI-4243)

  • Fixed a potential concurrency race condition that could lead to the SLEE getting stuck in the STOPPING state if a service was deactivated on some nodes when the symmetric activation state mode was enabled. (RHI-4254)

  • Fixed a number of issues affecting the cascade uninstaller when dealing with linked, shadowed, and copied components. (RHI-4207)

  • Fixed some issues with the cascade uninstaller failing to correctly determine the necessary uninstallation order in some complex scenarios, particularly involving copied components. (RHI-4213)

  • Removed a spurious message regarding the removal of copied components when running the cascade uninstaller in assumed-yes mode. (RHI-4215)

  • The cascade uninstaller will now successfully clean up copied or linked components that have active resource adaptor entities or profile tables created from them. (RHI-4240)

  • Fixed a bug that prevented passwords being updated with the rhino-user utility. (RHI-4201)

  • Fixed a possible change to the active namespace after using the exportall command in rhino-console. (RHI-4252)

  • Some issues affecting the scoping and cleanup of statistics parameter sets used by namespaces have been fixed. (RHI-4212)

  • SLEE, service, and resource adaptor entity state change notifications now include vendor-specific data that identifies which namespace the notification originated from. (RHI-4193)

  • Trace and usage notifications now include vendor-specific data that identifies which namespace the notification originated from. (RHI-4264)

  • SLEE 1.0-style alarm notifications now include vendor-specific data that specifies the namespace that the notification originated from. (RHI-4265)


  • Improved thread safety of RhinoConnection for use by multi-threaded clients. (RHI-4289)

  • Improved external database connection logging. (RHI-4186)

  • The Rhino SDK now has the "CMSClassUnloadingEnabled" JVM option enabled by default, to prevent out-of-memory errors under certain conditions. (It is already enabled by default for a production Rhino installation.) (RHI-3490)

  • Reduce repetitious log messages about deployable unit verification when importing. (RHI-4210)

  • Set default heap size for Rhino client tools to 64MB. (RHI-3176)


New Features

Rhino 2.5.0 introduces the following major new features:

  • Scattercast cluster communications mode is now a supported configuration in production environments. Scattercast management must now be done using management commands, not by editing configuration files. See the Rhino Administration and Deployment Guide for details. (RHI-3551)

  • The database configuration for external persistence of Rhino’s in-memory database state, along with JDBC resource configuration for applications, can now be dynamically updated at runtime rather than requiring a node or cluster restart. (RHI-3785)

  • Full JVM statistics are now available under the JVM parameter set. (RHI-3890)

  • Cluster-symmetric activation state is now supported as an option for services and resource adaptor entities. When this option is enabled, an activation state change that affects a service or resource adaptor entity will be reflected on all nodes in the cluster, and if a new node enters the cluster it will inherit the cluster-wide activation state for each of these components. (RHI-3934)

The following is an early preview feature and is not supported in production environments:

  • Rhino now supports multiple deployment namespaces. Namespaces are created by an administrator, and each namespace is isolated from all others. Each namespace contains its own deployable units and components, resource adaptor entities, profile tables, SLEE and component activation states, etc. Namespace management is available in the Rhino command line console but not yet in Rhino Element Manager. (RHI-3926)

Installation Changes

  • Update minimum supported version of Java 8 to 1.8.0_60. Earlier versions contain bugs that affect Rhino operation. (RHI-3745)

  • Rhino SDK requires Java 8 to run the embedded Rhino Element Manager. (RHI-4178)


  • Alarms have been added for the following conditions:

    • if a forward or reverse timewarp is detected, in addition to logging an error message as has always been the case (RHI-3101)

    • if the filesystem does not support sufficiently long file names. (RHI-3965)

    • if a threshold rule trigger or reset condition fails to evaluate, for example because it refers to a unknown parameter set or statistic. The alarm will be cleared if the rule is deleted or replaced, or a missing parameter set is restored. (RHI-410)

    • if watchdog.no_exit is set. This is a dangerous mode to run in and should never be used in a live environment. (RHI-3798)

  • The Rhino command-line client now reports alarms when they occur and includes the SLEE state and alarm count in the prompt. This new behaviour can be disabled by setting the system property "rhino.console.disable-listeners" to true. (RHI-2101)

  • The deactivate-and-activate-services operation is now a lot more atomic. Dropped call issues that previously could have occurred if a service took a long time to activate should no longer occur. (RHI-3783)

  • Added a component classloader auditing function that will look for potential classloader problems amongst the component’s dependencies. (RHI-4050)

  • Added command to reboot Rhino nodes to their current state. (RHI-3873)

  • SNMP index names are no longer truncated. The old behaviour can be restored by uncommenting the "" line in read-config-variables. (RHI-3796)

  • Add new Threshold Rule management API call to retrieve all configured rules at once. (RHI-4049)

  • Reduced severity of log message for cleanup of leaked OCIO buffers. This does not affect the reliability of the node. (RHI-3200)

  • New sample Systemd service descriptor for RHEL 7 and related systems. (RHI-3715)

Bug fixes

  • Fixed the potential for the SLEE, a service, or a resource adaptor entity to get stuck in the STOPPING state if a lock timeout happened to occur during the deactivation operation. (RHI-3453)

  • Services and resource adaptor entities will no longer get stuck in the STOPPING state if a temporary database error occurs when trying to reset their state back to INACTIVE. (RHI-3650)

  • Fix GroupHeartBeat failure on boot into a network containing a one way partition (RHI-3663)

  • The SLEE will no longer get stuck in the STOPPING state if a start operation is attempted while STOPPING. (RHI-3792)

  • UsageMBeans no longer return partial results if a node responds with an error. The error is now passed back to the client as a ManagementException as per the API (RHI-3850)

  • Added support for SBB Parts to the getsecuritypolicy and setsecuritypolicy Rhino Console commands. (RHI-3908)

  • Cluster will more gracefully handle one way network partitions. (RHI-3924)

  • Fixed snapshot decode of exported profile tables containing CMP fields that define serialisability only by way of a DatatypeCodec. (RHI-3986)

  • Fixed stall in savanna groups when rapidly shutting down many nodes in sequence (RHI-3989)

  • SBB part security permissions are now correctly applied to generated service code. (RHI-3994)

  • Fix NPE on node start when -d option is used alone with (RHI-4000)

  • The object pool for a profile table defined by a SLEE 1.1 profile specification will now correctly initialise on profile table creation if the initial pooled size is greater than zero. (RHI-4001)

  • Fix a NullPointerException if linked/shadowed services are deployed when setting a security policy. (RHI-4021)

  • The ResourceAdaptor.serviceActive() callback will now be made after an activating service has also been started, if the SLEE is in the RUNNING state, rather than before. This removes a race condition that previously existed if the resource adaptor fired an event intended for the activating service in the callback method - depending on timing the event may or may not have been delivered to the service. (RHI-4029)

  • Database flush now properly flushes on all nodes. Database flush now respects timeout. (RHI-4030)

  • Fixed an NPE that occurred when running rhino-export if a component with an install level of INSTALLED depended on another component that was not yet installed. (RHI-4190)

  • The Rhino SDK start-rhino scripts now support command-line options to force the SLEE into the Running or Stopped state after the Rhino SDK has completed initialisation. (RHI-3189)

  • When running the Rhino SDK on Windows, fixed the generation of *.class.$ files that polluted the RhinoSDK directory whenever a deployable unit was installed. (RHI-4187)



  • Fixed a NameNotFoundException that could occur when updating the environment entries of an SBB when a service that this SBB participated in was not active. (RHI-3012)

  • The SLEE will no longer get stuck in the STOPPING state if a start operation is attempted while STOPPING. (RHI-3792)

  • Added support for SBB Parts to the getsecuritypolicy and setsecuritypolicy Rhino Console commands. (RHI-3908)

  • Fixed snapshot decode of exported profile tables containing CMP fields that define serialisability only by way of a DatatypeCodec. (RHI-3986)

  • SBB part security permissions are now correctly applied to generated service code. (RHI-3994)

  • Fixed a NullPointerException on node start when -d option is used alone with (RHI-4000)

  • The object pool for a profile table defined by a SLEE 1.1 profile specification will now correctly initialise on profile table creation if the initial pooled size is greater than zero. (RHI-4001)

  • Fixed a NullPointerException if linked/shadowed services are deployed when setting a security policy. (RHI-4021)


  • The deactivate-and-activate-services operation is now a lot more atomic. Dropped call issues that previously could have occurred if a service took a long time to activate should no longer occur. (RHI-3783)

  • Added new Threshold Rule management API call to retrieve all configured rules at once. (RHI-4049)



  • Fixed a problem that caused the values for some statistics parameter sets to be returned in the wrong order when queried using SNMP. (RHI-3879)

  • Fixed an issue where the encodable context object retrieved during an SBB CMP field encode or decode could come from a different SBB object than the one the SBB entity in the current thread is associated with.

    A side effect of this fix is that an encodable context is no longer available
    to replicated CMP fields that use permanent pass-by-reference.  The requirement
    for such cases is, however, expected to be extremely rare. (RHI-3860)



  • Fixed a problem with the exporter that caused it to generate an export that could not be imported into any other Rhino instance because it contained commands that tried to to deploy and verify the SLEE standard types. (RHI-3840)

    This issue will affect exports from Rhino  The exports can be
    fixed by editing the "build.xml" script and removing the lines to deploy
    and verify the javax-slee-standard-types.jar deployable unit.
    This can either be done by hand or using the following "sed" command:
    sed -i.bak '/lib\/javax-slee-standard-types.jar/d' ./build.xml
  • Fixed an issue where a conflicted OID alarm was not cleared when the OID was unregistered. (RHI-3825)

  • When a OID mapping is removed and then recreated it will now return to the active state if possible rather than being marked as inactive. (RHI-3835)

  • The state of cleared SNMP counter mappings is now displayed in Rhino Console and the cleared state of these counter mappings is now persisted and will remain cleared after Rhino is restarted. (RHI-3836)


  • If a deployed component registers a shutdown hook, and that hook does not return when Rhino tries to shutdown using System.exit(), Rhino will forcibly halt the VM using Runtime.halt() after a timeout. The timeout has a default value of 60000ms and can be overridden by setting the "rhino.halttimeout" system property. (RHI-3772)

  • All SNMP OIDs used by Rhino are now statically defined. (RHI-3779)

    They are documented on this page:
  • SNMP OIDs for service metrics parameter sets now start at 500 and dynamically assigned OIDs for other stats parameter sets start at 700. (RHI-3824)

  • Enable tab completion of profile name arguments for removeprofile management command. (RHI-3766)

  • Add more detail to the descriptions in the SNMP notification MIB files. (RHI-3838)



  • An export of a profile table with a name containing illegal filename characters will no longer produce (or attempt to produce) an exported data file containing illegal characters. (RHI-3129)

  • Fixed XML Parsing error in META-INF/oc-service-license.xml due to illegal DTD attribute definition in oc-service-license-xml_1_1.dtd (RHI-3515)

  • Fixed negative item count deltas seen in StagingThreads statistics when a staging configuration change is made. Peak thread count is now bounded by the maximum thread pool size. (RHI-3622)

  • A copied component’s parent-child relationship with components copied from it will now be preserved if the former component is affected by a binding operation. (RHI-3711)

  • Fixed exporter issue with links, shadows, and component copies involving SLEE-defined component types. (RHI-3713)

  • The install level of linked and shadowed components will now be preserved by rhino-export. (RHI-3714)

  • Fixed corruption of active service resource adaptor entity link bindings when copying and deleting per-node activation state. (RHI-3721)

  • Fixed issue importing SNMP config exports that could subsequently lead to duplicate SNMP OID mappings being created. (RHI-3722)

  • SNMP OID mappings for usage parameter set types are now backwards compatible with versions of Rhino prior to 2.4.0. Rhino will now preserve existing OID mappings when importing a Rhino 2.3.1 export, rather than generating new mappings for usage parameter set types. Note that while Rhino can now cleanly import from Rhino 2.3.1 and earlier, exports created from previous 2.4.0.x releases need to be modified if OID compatibility needs to be retained: delete the ".default" extension from all the usage parameter set type mappings in the SNMP config export before importing it. (RHI-3741)

  • Fixed an issue which could disrupt message delivery after the 2,147,483,647th message on a Savanna group, leading to a group heartbeat failure and node restart. (RHI-3758)

  • Disable MemDB striping by default by setting stripe count to 1. (RHI-3761)

  • SNMP configuration updates that fail to be applied internally due to a lock acquisition timeout will now automatically be retried up to ten times before Rhino will give up on that update. (RHI-3764)

  • Fixed an ordering issue that could cause a node to associate resource adaptor entity bindings with the wrong SBBs during service activation. (RHI-3775)

  • Activating services were not being correctly initialised when the ServiceManagementMBean deactivateAndActivate operations were called - amongst other things the SBBs were missing their entity link JNDI bindings. This has now been fixed. (RHI-3784)


New Features

  • Added support for component linking and shadowing. A linked component is a virtual component that redirects any incoming reference to an alternative component. A shadow hides an already installed component, again redirecting any incoming references to an alternative component. (RHI-3527)


  • Fixed compilation error in generated service code when using sbb part event handlers. (RHI-3695)

  • The default usage parameter set no longer counts towards the maximum limit for a service, profile table, or resource adaptor entity, so will therefore always be available regardless of the number of named usage parameter sets created. (RHI-3699)

  • Fixed a timing issue in copying per-node activation state at node boot time that could lead to missing a state update if an activation state change occurred before the node was fully initialised. (RHI-3701)

  • The -c and -d options will now be disabled in for subsequent node restarts initiated by the -k option. (RHI-3703)

  • Fixed generation of javac command line parameters when deploying a service with SBBs that reference many SBB parts. (RHI-3704)



  • A Rhino node that is shut down in a controlled manner will now also wait for all outstanding SNMP configuration changes to be persisted before terminating. (RHI-3630)

  • The exporter now generates an import script that imports SNMP configuration information before installing deployable units, etc. This ensures that any new dynamically-mapped stats parameter set types created by Rhino will not conflict with any existing OID and counter mappings from the export. (RHI-3636)

  • Fixed management access to individual usage parameters via SLEE Usage MBeans. (RHI-3654)

  • Fixed a bug in the service bindings validator that failed to correctly identify the reuse of copied components that were in use by other services, thus leading to corruption in the dependency tree of these other services when an offending binding was applied. (RHI-3675)

  • A deployable unit jar file missing a manifest will now deploy correctly. (RHI-3643)



  • Added ability to specify a start and stop priority order for services and resource adaptor entities, used when the SLEE transitions from STOPPED to RUNNING or RUNNING to STOPPING. (RHI-3307)

  • SNMP parameter set type configuration data has been split up from a single monolithic configuration item to one configuration item per parameter set type. This significantly reduces the CPU usage of the SNMP statistics manager on node restart when a large number of parameter set type configurations are installed. SNMP configuration exports from previous Rhino versions are still installable in the current version but will be refactored into the new format during the configuration install process. (RHI-3567)

  • Some SNMP-related rhino-console commands have changed:

    • The setsnmpoidmapping and setsnmpcountermapping commands have been changed to support the auto-assignment and clearing of mappings

    • A new command removeinactivesnmpmappingconfigs has been added (RHI-3633)

  • Added a new system property for transaction timeout of service activation operations. (RHI-3582)


  • Fixed a ConcurrencyFailure where startActivitySuspended and SBB attaching does not acquire isolation lock. (RHI-3579)

  • Fixed a memdb state cleanup issue that could prevent other nodes joining the cluster from being able to obtain a copy of replicated memdb state. The issue manifested as a "java.lang.IllegalStateException: stream already closed" error logged by the existing cluster node serving the replicated state. (RHI-3584)

  • Fixed NPE that could occur during the installation of a deployable unit if a deployment descriptor in a component jar could not be successfully parsed. (RHI-3598)

  • When used in the same SBB, two SBB parts that declare the same usage parameters interface type extending the same parent type will now successfully pass deployment verification rather than be rejected with a false error indicating that they have been declared with different extends types. (RHI-3615)

  • If an SBB and its SBB parts together declare more than one event handler method for the same event type, this error will now be reported at SBB verification time, rather than generating invalid code that cannot be compiled at SBB deployment time. (RHI-3616)

  • Fixed double counting of events fired by an SBB as accepted in event statistics. (RHI-3620)

  • Fixed an ArrayIndexOutOfBoundsException that could sometimes occur when a stats client polled a sample statistic for an update. (RHI-3624)

  • Stats parameter sets for SBB metrics will now all be visible to stats clients immediately after a service is deployed, rather than on first service use or Rhino restart. (RHI-3625)

  • Fixed a potential deadlock in the resource adaptor Cluster State Change Facility when multiple cluster nodes are restarted at the same time. (RHI-3629)



  • Treat profile-spec-ref as dependency when exporting profile tables. (RHI-3507)

  • Fixed an NPE that could occur attempting to subscribe to or unsubscribe from monitoring of a stats parameter set that only exists on a subset of Rhino nodes. In the unsubscribe case the NPE could cause nodes to shutdown and restart. (RHI-3518)

  • Fixed a memory leak which could occur in certain failure scenarios involving transaction time outs. (RHI-3557)


  • Rhino now requires Java version 1.7 or later. (RHI-3552)

Rhino 2.4.0 introduces the following major enhancements;

  • A new extended Container Managed Persistence (CMP) API for support of Arrays, fast serialization, pass by reference and much more.

  • A new component type "SBB Part", a sub-component of a JAIN SLEE SBB. The SBB Part can define dependency links that enable components to re-define their dependencies (dynamic binding) during runtime.

  • Fully compatible and compliant with all existing applications.


  • Improved multi-nodes startup time by allowing nodes to boot up and initialise concurrently. (RHI-3217)

  • Added a new SBB local home interface as a Rhino-specific extension that allows a service to receive callbacks when it is about to be activated or deactivated. (RHI-3330)

  • SNMP counter ID mapping implemented. This permits the user to override the default mapping values given to usage parameter counters and gauges. This can be used to ensure that adding new counters to a parameter set doesn’t change the ID used by existing counters. (RHI-3330)


  • Rhino’s stats subsystem will now report sample distribution values for any sample population rather than just a certain range of samples. (RHI-1114)

  • The rhino-console command "removeactivitybinding" will now print an error message if the specified activity binding does not exist (RHI-1643)

  • Profiles can now be used from within the raVerifyConfiguration resource adaptor lifecycle method. (RHI-1999)

  • A node previously in the Running state no longer has the opportunity to forget this and restart in the Stopped state if the node fails to bootup and initialise properly during a restart. An alarm will now be raised if an exception occurs while attempting to transition the node to the Running state during bootup (ie. as a result of the -s argument or previous Running state). (RHI-2115)

  • Event router will no longer stall processing an event if an SBB increases its event delivery priority. (RHI-3350)

  • Rhino export now determines if the component is using standard or extension usage parameter sets and only generates the create-usage-parameter-set elements if its the standard case. (RHI-3355)

  • Fixed a classloader NoClassDefFoundError issue when deploying an SBB with an Activity Context Interface containing an attribute whose type implements FastSerializable and contains constructors referencing previously unresolved classes. (RHI-3366)


  • Provide earlier feedback of state exchange failures, for example if no address is available for listening. (RHI-3141)

  • Fixed an issue where serialization errors during database writes would raise an exception and an alarm and reset the connection instead of simply retrying the commit. (RHI-3346)

  • Fixed a classpath issue with the bundled Ant start script which caused RMI classloading issues with dynamically defined tasks using custom classes over a Rhino remote connection. (RHI-3455)

  • Fixed a race condition in the rate limiter in which work could be unnecessarily rejected. (RHI-3465)


  • In MemDB, exit the JVM as soon as an underlying Savanna group leaves the primary component. This fixes an edge case affecting clusters in which a subset of Savanna groups go non-primary, leaving a node only partially stopped and unable to release database resources and locks. (RHI-3268)


  • Fixed a NullPointerException that could occur in exceptional circumstances when initialising a replicated activity handler with cluster state during node startup, ultimately causing the node startup to fail. (RHI-3339)

  • Fixed a race condition which could cause failures in getting a JDBC connection to an external database in some connection pool configurations (RHI-3353)

  • Fixed a problem rolling back transactions when more than one JDBC datasource is enlisted. (RHI-3356)

  • Fixed an infinite event router loop that occurred if an SBB failure occurred during the activity cleanup phase of activity end processing. (RHI-3183)

  • Fixed an exception that could occur detaching an SBB from an activity during activity end processing if the SBB state for some reason did not agree with the activity state. (RHI-3183)

  • Added watchdog.oom_gc_enabled option that runs an explicit GC when the over memory use limit condition is reached. Default is to try to detect if this behaviour is required (-XX:DisableExplicitGC absent and a G1 collector present = System.GC() at over limit, otherwise don’t System.GC). (RHI-3374)

  • Increased default heap size for quorum nodes, current size could cause continuous CMS collections on Java 7. (RHI-3257)

  • Rhino will no longer perform an activityUnreferenced() callback to a resource adaptor that requested it for an activity that is unreferenced but is already ending. (RHI-3247)

  • Rhino’s periodic activity liveness scanner now checks if an idle activity is unreferenced and performs the appropriate callback to the owning resource adaptor if requested. One result of this is that unreferenced null activities, orphaned due to conditions such as overload, will now be noticed by the scanner and cleaned up appropriately. (RHI-3248)



  • Exporter fix:, SBB dependencies on resource adaptor entity link name bindings are now correctly associated with service activation (a’la SLEE 1.1) rather than SBB deployable unit installation (a’la SLEE 1.0). (RHI-3325)

  • An SBB may now successfully invoke suspendDelivery() and resumeDelivery() on a given event context in a single transaction as much as they like. Furthermore, isSuspended() will now return the correct transactional state. (RHI-2374)

  • Removing per-node activation state containing active services will no longer leave dangling references to resource adaptor entity link name bindings. (RHI-3328)

  • A profile may now successfully invoke ProfileContext.getProfileName() to obtain its identity during profileActivate(). (RHI-2793)

  • Fixed export of certain profile attribute types. This change is backwards compatible with exports produced by previous Rhino versions except for the special treatment of the "\u" character sequence now introduced. When using an export produced by a previous version of Rhino, any "\u" character sequence encased in a CDATA block should be changed to "\\u" otherwise Rhino will attempt to parse the characters following it as a unicode value. (RHI-3179)

  • The event router will no longer stall processing events for an activity if an exception such as lock timeout occurs while trying to obtain the transactional state for the activity. (RHI-3236)

  • Root SBBs that detach and remove themselves will no longer cause the event router to fail and roll back the transaction after event delivery. (RHI-3287)

  • Fixed incorrect SNMP OIDs for tables representing Rhino statistics. Updated associated MIB export logic to reflect the corrected table format. The old OID structure for statistics was:<parameter_set>.table(2).<column>.<index> The corrected OID structure for statistics is:<parameter_set>.table(2).entry(1).<column>.<index> The entry OID was previously missing. Any tooling which relied upon the old OIDs will need to be updated to include the extra '.1' for the entry object. (RHI-3303)

  • Fixed a slow memory leak which could occur when repeatedly connecting from a stats client at a high rate over a long period of time. (RHI-3313)

  • Fixed alarm entries incorrectly logging to all appenders on log file rollover instead of just the "AlarmsLog" appender. (RHI-3314)

  • Sample statistics will now be correctly reported to existing stats sessions if a monitored stats parameter set is removed and later recreated. (RHI-3320)

  • Profile queries no longer require a db lock on the default profile, removing a potential point of resource contention when using a pessimistically locked profile table in an application. (RHI-3273)

  • Added a new profile specification option, via the extension deployment descriptor, that allows the SLEE-defined copy of profile CMP field values from the default profile when a new profile is created to be disabled. Disabling this copy can remove a point of lock contention in applications that use pessimistically locked profiles to store or share session state. (RHI-3274)

  • Added "getdescriptor" command to rhino-console, which displays the SLEE descriptor for a component including the outgoing and incoming references. (RHI-3306)

  • Ensure that the committed view of attached SBB entities is ordered. This fixes a deadlock scenario involving: a) more than one replicated SBB attached to a replicated activity b) multiple cluster nodes simultaneously delivering an event on the replicated activity. (RHI-3280)

  • Rhino startup options can now be overridden by putting them in a file named "options" in the config directory. (RHI-3084)

  • Fixed a bug that meant the audit statistics for a node joining an existing cluster were incorrectly calculated during the first monitoring period. This could result in an OverLicensedCapacity alarm being incorrectly raised for the duration of the next monitoring period. (RHI-3336)



  • Follow-up to fix for RHI-3198, to prevent a spurious "over licensed capacity" alarm being raised and audit log record being written when a new node joins a running cluster. (RHI-3264)

  • Fixed a bug in which competing transactions could fail to initialise a set of statistics (a parameter set), resulting in an exception when the parameter set was used. (RHI-3263)

  • If the JMX Remote Adaptor m-let cannot bind to its configured ports at startup, it will now retry indefinitely until it succeeds. This prevents the situation where no cluster nodes are listening for management connections. (RHI-3260)

  • Fixed a number of bugs that could leave a database connection error alarm raised after the connection to the backing store for the in-memory database was re-established. (RHI-3255, RHI-3258, RHI-3262)

  • The timeout specified for the shutdown command will now be used correctly when handling backing database persistence during Rhino node shutdown. (RHI-3256)

  • Fixed a bug related to RHI-3226, that also caused Rhino to repeatedly resynchronise the backing store for the in-memory database. The problem occurred if multiple persistent databases were configured and one of the databases failed and recovered at the same time as the Rhino node assigned to handling the database connections failed and recovered. (RHI-3253)



  • Added support for administrative console command getsbbdiagnostics, for use when debugging SBBs in an unrecoverable state. (RHI-3170)


  • Fixed a bug that caused Rhino to repeatedly resynchronise the backing store for the in-memory database. This could occur while importing large numbers of profiles or restoring management state after a node rejoined the cluster. (RHI-3226)

  • Fixed a bug that caused service counter statistics to be under-reported if a large amount of incoming traffic was being received during Rhino start-up. (RHI-3198)

  • Management clients, such as REM, which probe Rhino for the activation state of services, resource adaptor entities, and the SLEE itself, will no longer risk deadlocking in memdb during node restarts (or any other time). (RHI-3221)

  • Rhino will now log a warning message at startup if it detects that any memory pool is configured with different initial and maximum capacities. This is to warn the administrator of the risk of a full GC when the JVM resizes the permanent generation memory pool. (RHI-3203)

  • If the Rhino start script is in "keep-alive" mode (-k switch) then the delay before restarting Rhino is now a random value between 30 and 75 seconds. (RHI-3172).



  • The system property acnaming.no_replicated_lookup can be set to true to stop the AC naming facility from performing a lookup in replicated state when no local binding is found for a name. (RHI-3192)


  • A cluster-wide management operation that in turn performs another cluster-wide management operation will no longer deadlock. (RHI-3190)

  • MBean write operations are now blocked for a shorter duration during Rhino startup. This allows Resource Adaptors to safely perform more management operations from within the raActive() method. Note that management operations requiring the cluster wide management lock (e.g. start/stop operations) will still block if invoked directly from the raActive() callback of a Resource Adaptor during Rhino boot. (RHI-3195)



  • Added support for a new staging queue type, "transfer", that performs better under high load on systems with many processors. (RHI-3076)

  • Rhino’s Activity Handler garbage collector is now multi-threaded to increase scalability and performance at high session rates. This update adds two tuning parameters:

    • The system property rhino.ah.gcthreads sets the level of parallelism for AH GC (default=2 threads).

    • The system property rhino.ah.gcchurn sets the GC initiation threshold (default=5000 activity generations created). (RHI-3094)

  • Rhino now does runtime compilation in-process, greatly improving deployment times for large projects. If required, the old behaviour where Rhino would fork an external javac instance can be restored by uncommenting the line containing "-Dcom.opencloud.javac.external" in read-config-variables (Rhino) or jvm_args (Rhino SDK). (RHI-3103)

  • Added 'CascadeUninstall' ant task which behaves in a similar manner to the cascade-uninstall script. This task can be used to uninstall a DU and all DUs, resource adaptors, profiles and services that depend on it. (RHI-1615)


  • Fixed an issue which could cause a NullPointerException after removing a profile table which had been using the pessimistic lock strategy. (RHI-3001)

  • Fixed the Java VM check at Rhino start so that certain supported JVMs are no longer reported as unsupported. (RHI-3023)

  • Fixed a problem that could cause slow responses from the management database to trigger a Savanna heartbeat failure and node shutdown. (RHI-3028)

  • Fixed an issue where a node could exit unexpectedly when rejoining a cluster after encountering an IllegalArgumentException related to an out-of-order message append. (RHI-3029)

  • Fixed an issue in which a node could exit unexpectedly with an AssertionError when starting multiple nodes concurrently (RHI-3031)

  • Configurations where the Address Pool Start is lexically higher than the Address Pool End when using a custom Savanna configuration are now handled correctly (RHI-3032)

  • Fixed a ClassCastException that prohibited a deactivating service from reaching the Inactive state if debug logging was enabled for the rhino.state.service.deactivation log key. (RHI-3033)

  • The SNMP agent will now rebind on restart in the case where it was not released correctly on shutdown. (RHI-3070)

  • Defined missing operation codes for audit logging of SNMP management operations (RHI-3078)

  • Fixed a race condition that could cause the object ready pool to get stuck at maximum size with 100% misses. (RHI-3086)

  • Reduced default timer resolution from 250ms to 10ms, so timers fire much closer to their scheduled time. (RHI-3132)

  • Fixed issue preventing replicated activities from ending, when attached to a non-replicated SBB from a failed node. (RHI-3147)

  • Fixed an issue affecting Rhino 2.3.1, where node failure could cause other nodes in the cluster to quit unexpectedly. (RHI-3163)



  • Rhino will now automatically provide profile import/export codecs for profile CMP fields of enum types (or arrays of enum types). (RHI-3015)

  • Added a rhino-console command and Ant task to unset, all at once, the trace level assigned to any non-root tracers of a notification source. (RHI-3079)

  • Added a 'pruned' counter to object pool stats that counts objects that were dropped from the LRU queue. (RHI-3089)


  • Fixed a problem where if a threshold rule referred to a non-existent statistic, rule processing would no longer run and connections from rhino-stats would fail. (RHI-2925)

  • Fixed compilation errors in generated code if the type of a profile CMP field was an array of an inner class. (RHI-3016)

  • Fixed Object Pools parameter set names to remove an extraneous trailing 'O'. (RHI-3088)

  • Fix a problem that occurred when timer events were re-fired (under overload conditions). They are now more reliable and avoid certain scenarios which caused an exception to be thrown. (RHI-3108)

  • Fixed an issue affecting Rhino 2.3.1, where restarting a node could cause other nodes in the cluster to quit unexpectedly. (RHI-3019)


New features and improvements

  • Rhino’s in memory database (MemDB) now supports data striping, helping to increase scalability for configurations using replication.

    See the Rhino Configuration section of the Rhino Administration and
    Deployment Guide for details on how to configure MemDB data striping.
    Statistics related to MemDB, including lock manager statistics, can now
    be viewed per-stripe, or aggregated across all stripes. New statistics
    related to MemDB timestamp management have also been added under the
    "MemDB-Timestamp" parameter set. (RHI-2607)
  • The Activity Handler now uses a Migrating Lock Manager instead of a Biased Distributed Lock Manager.

    Lock Manager statistics are now aligned between MemDB and the
    Activity Handler, within the "LockManagers" parameter set. (RHI-2936)
  • Rhino is now certified to run on Red Hat Enterprise Linux Server release 6.2 (Santiago) virtualised machines. (RHI-2941)

  • The SLEE Timer Facility has been reimplemented to use a hierarchical timing wheel rather than a binary heap. Cancelled timers now become immediately eligible for garbage collection, rather than waiting until they expire as they previously did. A new Rhino stats parameter set has been added which records Timer Facility stats. Configuration options have been added to rhino-config.xml which allow the Timer Facility to be tuned based on application needs. (RHI-2259)


  • Profile imports will now complete successfully if a client decides to use a Rhino client jar from an early 2.3.0.x or 2.3.1.x release. (RHI-3454)

  • Fixed javac task error when using Ant bundled with Rhino. (RHI-3479)

  • Fixed an infinite event router loop that occurred during the activity cleanup phase of activity end processing if an SBB that claimed to be attached to the activity didn’t actually exist. (RHI-3508)

  • A state cleanup of local memdb instances will now be initiated when services are uninstalled or profile tables are removed. This frees up any heap consumed by these artifacts immediately, rather than waiting until the next cleanup triggered by database state churn. (RHI-3526)

  • Fixed a slow memory leak which could occur in the case of frequent partial commits, e.g. where one of multiple database connections was consistently failing. (RHI-3543)

  • Fixed a race condition that could cause ActivityContextNamingFacility lookups to return uncommitted activity state. (RHI-2058)

  • Fixed a problem that meant timers and activities would never be cleaned up when timer events were dropped during overload conditions. (RHI-2919)

  • Fixed a deployment time compilation error for SBBs with a CMP field type that is a subclass of ProfileLocalObject. (RHI-2468)

  • Fixed an issued where the New TimerLoop code could calculate an incorrect 'timerError', which in turn caused TimeqrFacilityImpl.getResolution() to return an incorrect value. (RHI-2921)

  • Fixed an issue with rhino-export that caused an null pointer exception when the security-permissions element was missing from the deployment descriptor (RHI-2935)

  • An unexpected runtime exception thrown by an initial event selector method will no longer permanently halt event delivery on the affected activity. (RHI-2590)

  • Fixed a bug which prevented some debug logging from MemDB from being written to logs. (RHI-2970)

  • Fixed a slow memory leak which could occur when repeatedly connecting from a stats client at a high rate over a long period of time. (RHI-3313)


New features and improvements

  • Rhino 2.3 now provides horizontal scalability through replicated static domain configuration. (RHI-2615)

  • Added SNMP v3 support to SNMP subsystem. Note that SNMP v3 is disabled by default, and that authentication details are shared between stats collection and notification delivery for v3.

  • Added support for modification of the community string for use with v1/v2c. See the 'setsnmpcommunity' command in the console.

  • Added support for enabling/disabling of SNMP versions individually. See the 'enablesnmpversion' and 'disablesnmpversion' commands in the console.

  • Added support for multiple SNMP notification targets. See the 'addsnmptarget' and 'removesnmptarget' console commands. (RHI-2580)

  • SNMP notifications can now be filtered by notification type. See the 'setsnmpnotificationenabled' console command. (RHI-2657)

  • The Rhino 2.3 Licensing of RA and SBB components been extended to be more flexible with customer service accounting practices and unique implementations. Licenses may now include one or more Certificates linked with specific functions. (RHI-2571)

  • The security policies associated with deployed components (e.g. Resource Adaptors) can now be configured at runtime. See the 'getsecuritypolicy' and 'setsecuritypolicy' console commands. The security policy in use by Rhino JVM can now also be queried at runtime. See the 'getrhinopolicy' console command. This command is intended for diagnostic purposes only. (RHI-2593)

  • SBB and Profile Specification env entries can now be configured at runtime. See the 'setenventries' and 'getenventries' console commands. (RHI-2592)

  • Allow processing of ActivityEndEvent to "bounce" between SLEE nodes as many times as necessary, in the case of a mix of replicated and non-replicated SBB Entities attached to a replicated Activity Context. (RHI-2514)

  • Added a lock facility, which resource adaptors can use to obtain transaction-based distributed locks. (RHI-2669)

  • Added a new console command "alarmcatalog" that displays the alarms that can potentially be raised by Rhino and the deployed components that have registered their alarms. (RHI-2680)

  • Replicated pessimistic memdb storage now uses a new lock manager that improves latency when locks tend to be acquired on one node only (e.g. when traffic is "sticky" to a single node). Mutual exclusion is still provided between nodes, but acquiring a lock that was previously held by a different node will have higher latency than in earlier versions. The pre-2.3 lock manager is still available for cases where locks are usually acquired on many nodes. Services, SBBs, and RAs can configure the type of locking used via <lock-strategy> elements in extension deployment descriptors, in addition to other storage/locking options. (RHI-2595)

  • Savanna configuration file format changed to be simpler, less error-prone, and easier to share between nodes. (RHI-44)

  • Extended the resource adaptor message passing facility with functionality that allows resource adaptors to make request-response type invocations to the same resource adaptor entity on other nodes. (RHI-2670)


  • rhino-console commands that require or accept a notification source parameter as an argument now allow an abbreviated form of input if the notification source only has one attribute, ie. this change only affects the input of notification sources for resource adaptor entities, profile tables, and subsytems. As an example, whereby previously a command such as "listactivealarms resourceadaptorentity entity=cgin" was used, it is now also possible to invoke the same command as "listactivealarms resourceadaptorentity cgin", ie. the "entity=" part of the notification source value is no longer necessary. Note that the old form still remains valid input. (RHI-1719)

  • Amend rhino.policy so JMX clients can remove notification listeners. (RHI-1837)

  • Changes to staging queue type or maximum size are now applied immediately, rather than on the next restart. (RHI-1872)

  • Fixed the order in which profile specifications are uninstalled in the case where there are dependencies within a deployable jar. (RHI-2077)

  • Fixed bug in cascade-uninstaller tool where it would sometimes omit some component dependencies resulting in an incorrect uninstall order. (RHI-2144)

  • Implementations of profileStore() that modify indexed profile attributes no longer cause a ConcurrentModificationException on transaction commit. (RHI-2201)

  • Fixed an infrequent ArrayIndexOutOfBoundsException in internal timing code. (RHI-2395)

  • Increased default maximum permanent generation size to 192mb. (RHI-2407)

  • Improved exceptions thrown to a management client (including Ant) when an internal exception is thrown. (RHI-2534)

  • Spurious glibc version warnings no longer occur on recent Linux versions. (RHI-2581)

  • Rhino now includes an updated PostgreSQL JDBC driver (version 9.1-901). (RHI-2619)

  • Fixed SNMP 'exportmibs' console command not handling parameter set type names which contained path separator characters. (RHI-2622)

  • Fixed a bug that caused the last property specified in the config/jvm_args configuration file to be ignored. (RHI-2623)

  • Fixed bug preventing concurrent deployment of components using the same root parameter set name (e.g. CGIN 1.3.5 + 1.4.1). (RHI-2629)

  • Deployable units larger than 16MB are now supported when using Derby. (RHI-2632)

  • Restored missing rate limiter API classes in rhino-ra.jar. (RHI-2640)

  • Several fixes for SNMP address binding during node start. Additional debugging also added at debug level. (RHI-2649)

  • Strings of longer than 64k characters are now correctly handled in CMP fields and other contexts where they are persisted. (RHI-2661)

  • Manages JMX notification listeners more carefully: warn about slow listeners or listeners that throw exceptions. (RHI-2686)

  • Fixed tab completion in rhino-console in the case where tab completion results are based on a previous argument and that previous argument was quoted or contained escape characters. (RHI-2691)

  • Resuming a SleeTransaction from a resource adaptor using the SleeTransactionManager now works correctly rather than throwing an InvalidTransactionException. (RHI-2696)

  • Fix a lock manager statistics error where lock acquire/release/wait counts would be double-counted for each node in a cluster. (RHI-2698)

  • Fixed a lock manager statistics error that would incorrectly skew the lock acquire and lock wait time distributions. (RHI-2699)

  • Fixed a potential memory leak during lock acquisition if interrupted by an administrative transaction rollback. (RHI-2701)

  • Rhino now starts successfully if a SBB constructor throws an unchecked exception while filling service object pools. (RHI-2705)

  • Errors while accessing a Derby database for memdb persistence will now correctly rollback the transaction before closing the connection, avoiding subsequent database lock timeouts due to Derby not releasing locks on connection close. (RHI-2706)

  • Fixed a Savanna flow-control issue that could cause very slow deployments in a clustered environment if non-default group heartbeat settings were used. (RHI-2711)

  • Fixed a race condition whereby attempting to access the Profile MBean for the default profile immediately after creating a profile table might sometimes fail. (RHI-2712)

  • Handle logging misconfigurations more gracefully. (RHI-2713)

  • Fixed an issue where a component jar containing 2 or more components would fail to deploy if the component jar used the manifest Class-Path attribute. (RHI-2762)

  • Fixed bug in resource adaptor entity creation that, for relevant services, caused one serviceActive()/serviceStopping() callback to be made per resource adaptor type implemented by the resource adaptor, rather than once only. (RHI-2766)

  • Linux kernels in the 3.x series are no longer considered "unsupported" by the script. (RHI-2767)

  • Console command line completion will no longer return profile attribute names as suggested attribute values when creating or updating a profile. (RHI-2770)

  • Fixed a "zip file closed" warning error that occurred sometimes when uninstalling a deployable unit. (RHI-2792)

  • The default management auditing level is now "writes", which records only write operations (operations that modify Rhino state). To also audit read operations, set the auditing level to "all" via rhino-console. (RHI-2798)

  • Fixed exception handling in the createCommittedProfile method in RemoteProfiles (part of the Rhino Remote API) so that an uncommitted profile won’t be left dangling if certain exceptions are thrown during the profile create. (RHI-2810)

  • Management clients performing 'write' operations via Rhino’s MBean interface will now block until the end of the Rhino boot process. (RHI-2824)

  • Fixed JNDI Context implementation of list() and listBindings(). Names bound into subcontexts, and the name of the context being listed, are no longer included in the return result. (RHI-2833)

  • The <importconfiguration> Ant task (used in generated exports) now reports any errors encountered as fatal build exceptions, not as non-fatal build exceptions. (RHI-2843)

  • Fixed mishandling of the NEW_SIZE and MAX_NEW_SIZE variables when saving installation options with -d <properties-file>. (RHI-2846)

  • When using the rhino-remote helper classes:

    • mbean proxies now throw the underlying, unwrapped, exception whereever possible; when an exception is thrown that can’t be directly thrown by the proxy (e.g. an I/O exception not declared by the mbean method) it is wrapped in either ManagementException (where possible) or RuntimeException. This avoids unexpected UndeclaredThrowableExceptions.

    • Exceptions thrown by Rhino-specific mbeans (i.e. those Rhino mbeans that are not in the standard SLEE domain) are now made remote-safe and should not produce unexpected ClassNotFoundExceptions if they contain a nested exception that is internal to Rhino. (RHI-2864)

  • A more useful error is reported by init-management-db if deletion of the existing Derby database fails. (RHI-2865)

  • Fixed a container bug that could cause index corruption if an OCBB object instance was modified in a transaction that rolled back then later reused in a transaction where the associated entity was removed from the database. (RHI-2893)

  • Alarms raised by a component will now be cleared during component removal for profile tables, RA entities, and services. (RHI-2066)

  • Clusters will now refuse to form when individual nodes are running different versions of Rhino. (RHI-2169)

  • Added command-line completors for resource adaptor config properties when creating or updating resource adaptor entities. (RHI-2521)

  • The "SystemInfo" stats parameter set has been removed; all data it provided is available in a more detailed form via the "JVM" parameter set. (RHI-2533)

  • The legacy web console has been removed from Rhino - to manage Rhino via a web interface, use REM instead. (RHI-2651)

  • Fixed a concurrency issue in the distributed lock manager algorithm which could cause a node to fail if a lock was changing state while lock state was being extracted for propagation to another booting node. (RHI-2742)

  • Improved error handling when the creating of a custom logging appenders throws an error. This prevents a potential issue where a faulty appender could prevent a Rhino node from starting. (RHI-2559)

  • Isolated some third party libraries (including Google Collections) from the class loader exposed to resource adaptors and services. (RHI-2501)


  • Added 'setAlarmLogPeriod' and 'getAlarmLogPeriod' console commands (for changing the periodic active alarm log message interval). Setting the period to '0' will disable periodic active alarm notifications. (RHI-2621)

  • Removed erroneous semicolon from ProfileImportExportBuilder.template when generating CodecFactory interface. (RHI-2620)

  • Fixed an issue with default profiles of non-replicated profile tables not being created on all nodes. (RHI-2606)

  • Fixed clustered node restart issue, whereby the cluster could crash if restart occurred too quickly during cluster reformation. (RHI-2605)

  • Object pools 'initialPooledPoolSize' may now be configured in rhino-console with size 0. Previously the minimum allowed size was 1. (RHI-2602)

  • Fixed verifier of tracer names in various TraceMBean methods that was allowing some invalid names to be passed as valid. (RHI-2600)

  • Added an option to specify a timeout to the shutdown command. Outstanding in-memory database state that needs to be flushed to persistent storage must be flushed within this timeout period otherwise the shutdown will be aborted. If a timeout is not specified, a default timeout is used, which can be configured in rhino-config.xml. The initial default timeout is 60s. (RHI-2585)

  • Fixed data loss bug in console logging tool. All output lines should now be logged. (RHI-2584)

  • Changes to the rhino-stats tool: When rhino-stats is connected to a node and that node is restarted, then rhino-stats now reconnects to that node automatically after it has been rebooted. rhino-stats now has a failover mechanism similar to the one for the console (for example, if the tool can’t connect to the default node, it now tries to automatically connect to the other nodes in the rhino.remote.serverlist property) (RHI-2510)

  • Fixed a synchronisation issue in Rhino’s custom classloader implementation which could cause a LinkageError if multiple threads simultaneously attempted to load the same class. (RHI-2192)

  • Fixed a deadlock that could occur during cluster state change when using resource adaptors that make use of Rhino’s Cluster State Change Facility. (RHI-2151)

  • Fixed export of SLEE 1.1 profile tables so that profile attributes that export to a string containing '<', '>', or '&' characters are wrapped in a CDATA section, allowing the exported profile data to be reimported again without issue. (RHI-1966)


  • Fixed management tools not allowing creation of Address profiles with an 'undefined' AddressPlan.

  • Fixed an issue with DynamicPolicy should treat jar:URL!/ as equivalent to just URL when canonicalizing cod[e]bases

  • Fixes for non-display of values in the stats client for parameter sets which contained no sample values when talking to a multi-node cluster.

  • Changed default min bytes per node to 2k to fix a stats distribution config problem.

  • Added new OC RA DTD to support 'oid' attribute in <stats-parameter-set-type>.

  • Made hostname checking more lenient. The domain portion of a hostname should now be ignored.

  • Increase FC_min_bytes_per_node so that it’s at least packet_length.

  • Added warning logged on Rhino startup if a file with a filename of 255 characters cannot be created in the deployments directory.

  • Make sure cleanup tasks run without holding the cleanup lock.


  • Fixes for argument handling. When running on the same host, the script will now also wait for to be removed before returning.

  • Fixed handling of multiple stats subscriptions for the same parameter-set and statistic-id within the same stats session. Caveat: with respect to live upgrades, this change is backwards compatible, but not forwards compatible. In the context of a cluster which has 'old' nodes (preceding this version) and 'new' nodes (this version or greater), a 'new' node can be introduced to a cluster, but an 'old' node cannot. Upgrading a live cluster one node at a time is supported, provided that no stats sessions are changed during the upgrade.

  • Fixed issues with alarms.csv logging:

    • rollover behavior improved to log a list of active alarms so that each alarms file is internally consistent after file rollover

    • logging only alarm raised and alarm cleared information

    • fix for incorrect alarm level for logging of cleared alarms New columns added 'logtime' and 'status' (which can be 'raised', 'cleared', or 'active')

  • DataStorage class for postgres DB configuration in rhino-config.xml is now org.postgresql.ds.PGSimpleDataSource

  • AuditingManagementMBean.setAuditLevel api (javadoc) altered to adhere to implementation:

    • Setter Sets whether read operations are logged to the management audit log. The correct values are "none", "writes", or "all" (case insensitive).

  • AuditingManagementMBean.getAuditLevel

    • Getter returns whether read operations are logged to the management audit log. The returned value will be "none", "writes", or "all" (case insensitive).

  • Improved value validation when creating Threshold rules.

  • Fixed handling of alarm raised when exceeding the SDK license limit.

  • Introduced a stats parameter set "EndpointLimiting", which shows how activities and events are being limited.

  • Fixed GC related file descriptor leak under Java 1.6 and when performing frequent deploy/un-deploy of several Deployable Units


  • Rhino now requires Java version 1.6 or later.

  • Support for Java 6 running in 64-bit mode, on Solaris 10 and RH AS 5.5

  • Support for RedHat Linux AS 5.5

  • Changed how root user checks are performed on startup to make them more reliable.

  • Better GC default settings for production rhino.

  • Increased default maximum permanent generation size to 96mb (-XX:MaxPermSize=96m). Also added -XX:PermSize=96m to be consistent with other heap options.

  • Removed incremental CMS as default GC strategy.

  • Log JVM arguments on startup. Arguments are logged to a unique log key

  • Improved console commands to match with Rhino Element Manager

  • Added methods to LoggingManagementMBean: getAppenderType, getAppenderProperties, getThreshold, getCustomAppenderClassName, getCustomAppenderInfo, getFileAppenderInfo, getSocketAppenderInfo, and getSyslogAppenderInfo

  • Added "getappenderinfo" and "getappenderthreshold" rhino-console commands

  • Deprecated the process name property for log appender configuration, both in LoggingManagementMBean, and for rhino-import and rhino-export

  • Added methods to StatsManagementMBean: getParameterSetTypeMappings and getParameterSetTypeDescriptions

  • Disabled the old Web Console. The new Rhino Element Manager can be downloaded separately.

  • Added a logging appender 'PolledMemoryAppender' to the default configuration, which is used by the Rhino Element Manager to show recent log messages.

  • Add a management command called "getRhinoVersion" which shows what types of licenses the currently running version of Rhino will accept.

  • A log of management commands is now written to management.csv in the logs directory.

  • Improve efficiency of Activity Handler Garbage Collection at high activity count

  • Increase the default rhino savanna settings max limit groups to 52MB/sec send traffic per node

  • Alarms are now raised/cleared automatically for DB connection state changes. JDBC connection failures now result in an alarm being raised. The alarm will be automatically cleared if the connection is re-established.

  • Added optional support for using Oracle Database as the backing management/profile database.

  • Removed PSQL_CLIENT from the config_variables file. No longer need a copy of psql client to run production Rhino.

  • Added SNMP statistics and notification support to Rhino, including Management interfaces.

  • Added Native support for SNMP Performance and Fault management, using SNMP v2c.

  • Activity Handler bugfixes: Activities now correctly prevent RAs from shutting down if there are remaining activities.

  • Overhaul of Savanna statistics: There are now two parameter set types, one for the membership ring and one for message groups.

  • Improvements to Cluster MembershipAlgorithm.

  • Removed experimental out-of-process cluster membership

  • Updated derby.jar to version (19-May-2010).

  • Enforce the max-connections limit to prevent calling threads blocking indefinitely if the DB server is overloaded

  • Added AuditingManagementMBean for auditing related management operations.

  • Added management auditing capability to Rhino: Added AuditingManagementMBean for auditing related management operations.

  • All management operations are logged to "management.log" and "".

  • Miscellaneous JMX Remote Adaptor m-let enhancements

  • All Rhino MBean names have been updated to use a more standard form so they will work with ObjectName pattern based queries.

  • Added a useDefaultConfig method to LimiterMBean and a "usedefaultlimiterconfig" rhino-console command, for removal of node specific limiter configuration settings.

  • LimiterMBean methods getConfigSummary and getInfoSummary now fail fast rather returning incomplete data, and use null in the "parent" column when not set.

  • Added '-l, --noconsole' option to to disable console logging.

  • Added '' script for conveniently logging Rhino console output. This script will perform logfile rollover and timestamping for all input piped to it. Output will be written to work/log/console.log. Example usage: ./ -s -k -l 2>&1 | ./

  • Improved management of primary component through addition of '' script. This script can be used to transition a waiting non-primary cluster into the primary component. It has the same usage semantics as the '-p' option to

  • Added init.d scripts for use with Rhino.

  • Redirected more startup logging to config.log. Reordered startup logs to prevent spam when running with --noconsole.

  • Added -XX:-OmitStackTraceInFastThrow to default Rhino JVM args to prevent stack traces from being optimised out of existence.

  • Enable VERBOSEGC logging by default

  • Make NEWSIZE and MAXNEWSIZE GC parameters configurable in the config_variables

  • Added system property which can be enabled to require authentication for local JMX connections (rhino.jmx.requireauth=true). Authentication is not required by default.

  • The console appender will now respect the appender target field correctly.

  • Increased default size of management DB to 150MB.

  • Improvements to the stats client console mode to distinguish between statistics which do not yet have a value and statistics which cannot be aggregated.

  • Fixed that rhino and view users can login to the web-console and list management operations without throwing a AccessControlException

  • Renaming get/setAuditLevel commands to get/setManagementAuditLevel.

  • Fixed a rate limiter bug involving silent floating point division by zero

  • Remove the version from rhino-remote.jar and rhino-client-apps.jar.

  • Added missing notification source to SNMP alarm notifications

  • Added output to the CreateLimiterCommand to make it more obvious to users that new limiters don’t automatically have an alarm associated with them.

  • Removed some potential race conditions in the TokenBucketRateLimiter class by locking on small section of code.

  • Move the polled-memory-appender into a separate JAR loaded by the logging classloader

  • Fix to resolve issues where a parameter set reference continued to be held by the SNMP subsystem after parameter set removal

  • Change arguments to be the same for rhino-console and rhino-export.

  • Modify the rhino-install script to export a certficate during installation which can be used by REM.

  • Start Element Manager much later, after the MBeans have been initialised.

  • Increase Memory use settings to be in line with current server technology: Heap size = 1024MB, Young Gen & Perm Gen = 128MB

Version 2.1-03

  • Sped up classloading when using complex component hierarchies.

  • The ConfigProperties object passed to an resource adaptor entity in the updateConfigurationProperties callback did not include the Rhino extension properties which are present in the equivalent ConfigProperties object used in raConfigure. Now they are included.

  • Fix profile specification uninstaller so that you can uninstall a profile specification that has other components referring to it, if those components are in the same deployable unit.

  • Fix updateConfigProperties method so that it doesn’t try to update resource adaptor entities in the STOPPING state if active reconfiguration is not supported.

  • Fixed an issue with rhino-export running in the default 'snapshot' mode that prevented a successful export if a profile serialisation codec required a non-class resource from the component jar.

  • Fixed glibc version detection logic in rhino-common script so it supports multi-digit minor versions.

  • Enhanced licensing support for resource adaptors.

  • Add a message passing facility, which resource adaptors can use to asynchronously pass messages to the same RA entity on other nodes in the cluster.

  • Fix an issue where ActivityIsEndingException is thrown when Timer is fired during service deactivation, and SLEE primary component exit.

  • The Rhino-defined rhino_max_activities resource adaptor entity configuration property can now be updated at any time. Previously this update was not allowed if the resource adaptor entity was active and did not support active reconfiguration. Changing this property does not generate a callback to the resource adaptor entity, thus the semantics defined by the SLEE specification for active reconfiguration are preserved.

  • The names of stats parameter set types defined by resource adaptor components are now scoped only to that resource adaptor, so that different resource adaptors that define stats parameter set types with the same name will no longer interfere with each other. A resource adaptor component can no longer be deployed if it specifies a root parameter set name equal to a root parameter set name already present in Rhino. The name must be changed to something unique before Rhino will allow it to be deployed.

  • Resource adaptor stats parameter set interfaces can now define counters using either incrementXXX or setXXX method declarations (previously only incrementXXX was supported).

Version 2.1-02

  • Fix a potential locking issue in stats replication.

  • Fix a problem where if Savanna message delivery stalls on one node and that node doesn’t stop quickly, then the other cluster members shutdown as well.

  • Fixed a deadlock problem in TimerFacility.

  • Fixed log message when reporting unexpected exception from ResourceAdaptor.eventProcessingFailed().

  • Fixed a race condition that could cause a long running transaction that could not be removed and cause a worker thread to get stuck.

  • Fixed bug where some nodes would report "Not in STARTING state: Running" during startup. The node would work correctly after this.

  • Fixed a race condition during startup where RAs could fire events before any services were ready to process them.

  • Further fixes on startup ordering to ensure that service activities are always available to services before any events are processed.

  • Fixed an issue where SBBs using Rhino’s log4j classloader would fail to deploy if log4j classes appeared in the signatures of SBB abstract class public methods or SBB local interface methods.

  • Fixed an issue where the getResourceOption method should return null if the SBB did not specify a resource option.

  • Fixed an issue in DynamicGrant if either set has greater than two items.

  • Fixed incorrect escaping of newlines and other non-alphanumeric characters for RA entity config properties in Rhino export.

  • Fixed implementation of DeploymentMBean.getReferringComponents to include dependencies between profile specifications.

Version 2.1-01

  • The cluster-membership logic can now optionally be run in a separate process (see the savanna.oopcm=true property in read-config-variables).

  • Fixed problem where some events stats counters were always zero.

  • Improved handling of failure scenarios during node start-up. Now handles the scenario where a booting node loses visibility of the node it is extracting application state from, by extracting state from another node.

  • Fixed an issue where JDBC pooled connections would be leaked if a non-fatal SQLException occurred during commit.

  • Fixed problematic GC behaviour under low load.

  • Fixed a problem where a node trying to rejoin after being booted (for example, by long GC) could cause Savanna delivery to stall.

  • Fixed a stats-related deadlock when the session has been removed.

  • An oversight in oc-profile-spec-jar_1_1.dtd meant that <lock-strategy> wasn’t allowed in <profile-spec>. We’ve released a new version of the dtd that does allow this, oc-profile-spec-jar_1_1_1.dtd.

  • The SLEE 1.1 tracer names for a particular notification source are now available on rhino console and the web console for 'get' and 'set' tracer level commands - by tab completion on rhino console, and by a linked drop-down list in the web console.

  • Fixed NullPointerException that sometimes happened when double-clicking values in stats GUI tree view.

  • Rhino 2.1 uses oc-resource-adaptor-jar_2_1.xml as its vendor extension DD if available. Otherwise it uses oc-resource-adaptor-jar.xml. A similar thing happens for SBB DDs. The 2.1 DD/DTD allows declarations for the new limiting features.

  • Fixed problem where the "exportall" console command would sometimes hang.

  • Added LIFO work queuing back into Rhino (it was in 1.4.5 but missing from 2.0). Use of LIFO or FIFO is selected by the queueType staging parameter. The node must be restarted for a change in this parameter to take effect. Changed the default queue type to LIFO. Changed behavior when the work queue is full. Previously a new item was rejected when the queue is full, now the oldest item in the queue is discarded and the new item added to the queue.

  • Added a maximum activities config property for all RA entities.

  • Added custom and RA input limiting and output servicing limiting, with a management command interface.

  • The security policy parser now supports system properties containing comma-separated lists. The format of these entries is ${{list:system_property_name}}. This will be expanded at runtime into one permission per entry in the list.

  • Rhino and Mlet configuration files now support system property substitutions, in the form of ${}.

  • Introduced a new optional clustering strategy which provides fault tolerance for 2-node clusters. See the "Component Selectors" section in the Rhino Administration and Deployment Guide.

  • Used RSA key algorithm for keytool -genkey to fix a problem with Error code: sec_error_bad_signature persisting (even after adding an exception for FireFox 3).

  • The version of JLine used for the command-line console has been upgraded to version 0.9.94.

  • Each ResourceAdaptorContext instance will now use a new Timer thread instead of a single shared instance. This will prevent exceptions occurring in the Timer for one RA entity from affecting other RA entities.

  • Fixed Stats Client handling of very large parameter sets.

  • Updated version of Rhino remote API from 2.0 to 2.1 (rhino-remote-2.1.jar) to reflect changes in management classes related to rate limiting.

  • Added a command line utility 'dependency-graph', in the ${RHINO_HOME}/client/bin directory, which show the dependencies between SLEE components installed in Rhino.

  • Updated version of Rhino client apps API from 2.0 to 2.1 (rhino-client-apps-2.1.jar) because of the addition of 'dependency-graph' above.

Version 2.0-02

  • findLongRunningTransactions console command now returns the set of all transactions not yet completed, rather than just transactions that are either Active or Marked for Rollback.

  • Alarm clearing log messages are now logged with log level "Clear" instead of the alarm level the alarm was raised with.

  • Fixed bug where cause throwables were being discarded by the Alarm Facility when an alarm was raised.

  • Updated the user rate limiter so that it is a per-node maximum limit.

  • Enum types now stored more efficiently in CMP fields.

  • The User Rate Limiter can be specified with a smaller rate initially, and a larger maximum rate. The Rate Limiter will gradually increase the allowed rate until it reaches the maximum rate. This allows administrators to cater for artifacts such as Just In Time Compilation.

  • The eventrouter.transaction_timeout system property can now be used to set transaction timeout in milliseconds for eventrouter transactions. Its default value is 30 seconds and is configurable in the read-config-variables file.

  • The transaction.default_timeout system property can now be used to set the default transaction age in milliseconds before a long-running transaction is aborted. Its default is 2 minutes and is configurable in the read-config-variables file.

  • The transaction.timeout_check_interval system property can now be used to set the interval in milliseconds between checks for transactions that need timing out. Its default is 10 seconds and is configurable in the read-config-variables file.

  • The JDBC connection pool is now configurable in the rhino-config.xml instead of hardcoded at 5 seconds.

  • Additions of stats parameter sets for monitoring JDBC connection pool.

Version 2.0-01

  • Further changes to support SLEE 1.1 compliance.

  • Per-node activation state. Each node now has its own activation state for the SLEE and for deployed components. Numerous management commands and scripts have been modified to support this.

  • Improvements to cluster membership logic in exceptional failure/restart cases.

  • Fixed a bug causing scaling problems in larger clusters.

  • Improvements to the Activity Handler and Event Router. The Activity Handler now supports pessimistic locking for activity contexts.

  • Individual RA entities can now create both replicated and non-replicated activities.

  • J2EE examples updated to SLEE 1.1 and included with this release.

  • Improvements to threshold rule calculations.

  • Additional statistics for monitoring performance and behaviour of activity handler.

  • Row per node option (-r) for stats client in console mode. This causes a row to be printed with results from individual cluster nodes, and totals for the cluster.

  • SLEE, Rhino, and Mlet DTDs are now included in doc/dtd

  • Old administration manuals have been deprecated in favor of the Developer Portal documentation found at

  • Improved handling of relative paths in the Rhino install script.

  • Added additional options to to manage per node activation state.

  • Fixed several configuration related startup messages.

  • Platform information is now output during startup.

  • Specific log keys renamed for consistency.

  • New 'AnnotateLog' console command. This command allows output of arbitrary log messages into the Rhino logs, primarily for debugging purposes.

  • Added option to exporter to create exports with no container configuration data (i.e. exports containing only deployed components, not SLEE configuration).

  • Additional commands added for object pool configuration.

  • Improved command line tab completion for several commands in the command line management client.

  • Fixed deadlock issue with querying bound activities.

  • Changes to the arguments of many commands to support per node activation state.

  • exportAll command line management client command renabled.

  • listEventRouterThreadState command added to command line management client.

  • Added new remote API, updated all existing clients to use it.

  • Performance improvements to ant management tasks.

  • Added missing RemoveUsageParameterSet ant task.

  • Added ant tasks for managing log appenders.

  • Notification Recorder Mlet now disabled by default.

  • Replication of activity state has been added.

  • Performance improvements to transacted operations on timers.

  • Performance improvements to collection of platform statistics.

  • Updates to support Java 1.6.

  • Fixed an issue with distributed locks not being released for some profiles when editing a large number of profiles within a single user transaction.

  • The notification recorder m-let is no longer included in the Rhino package.

  • The embedded web-console is now disabled by default. It can be reenabled in the $RHINO_HOME/etc/defaults/config/permachine-mlet.conf file.

  • Removed CPU stats collection from Rhino as the results were unreliable.

Version 2.0-DP * SLEE 1.1 compliance updates. This release implements the majority of the functionality specified in the proposed final draft of the SLEE 1.1 specification. * Internal components of Rhino have been redesigned to support SLEE 1.1 and improve performance. * The appearance of the web console has been improved. * Usage MBeans now have a Rhino-specific extension, tabulateAll(…​) which returns usage parameter data in a TabularData object. * Tab completion for more console commands has been implemented in the command console. * Various fixes to the statistics gathering system and statistics client have been applied. * Usage parameter names are now stable across node restarts * Fixed some scenarios where the stats client would return negative figures when a service is redeployed. * The statistics client now makes a single TCP connection to the SDK or a single server node. * The version of Jetty used for the web console has been upgraded to version 6.1.4. * The watchdog’s default threshold for stuck threads has been increased to 75%. * Fixed a TransactionRolledbackLocalException error that occurred if a profile was modified then removed in the same user transaction.