Configurable timeout for JMS cluster synchronization
[Cluster] [configurable] [JM] [JMS] [jms_provider] [synchronization] [timeout]
Symptom
When tring to start an application in the following exception is thrown:
Caused by: java.rmi.NoSuchObjectException: Object redirect failed.
The factory com.sap.jms.server.JMSServerContainer@50cbb0ea failed to
create object instance
with logging severities of com.sap.jms increased to DEBUG in the log files is dumped the following exception – the root cause of the problem:
1.5#com.sap.jms##com.sap.jms.server.JMSServerContainer#Guest#1#####Application [4]##0#0#Debug##Java###The connection factory has been disconnected from the JMS lock owner: JNDI path: {0}, creation time: {1}. The createConnection() call will be redirected to the connection factory instantiated on the new lock owner.#2#jmsfactory/default/CIMTopicConnectionFactory#00000120991F4E9B#
Other terms
JMS, jms_provider, JMS failover, jmsfactory
Reason and Prerequisites
The jms_provider service is one of the very few heterogeneous AS Java
components. This means that instances of the jms_provider service
running on different cluster nodes are not identical.
When there is a failover the factory to be looked up should be redirected to other server node and then looked up.
There exists a timeout, whithin the JMS ressource should be redirected. For high loaded systems the default timeout is often not enough. This timeout depends on the cluster startup time, so it can vary from
system to system. It is thus configurable and its default value is
600000 (10 minutes). It can be configured by a jms_provider service
property called syncSleepInterval.
Solution
The fix affects J2EE ENGINE FRAMEWORK and is available from 7.10 SP05
from SAP Service Market place. The value of the JMS property syncSleepInterval could be set via the J2EE Config tool. The sufficient value can be determined only empirically. Note that this is upper limit and larger values do not affect the cluster startup time.