4

We want to avoid SPOF (Single Point of Failure) for Tridion Cache Channel Service so we are replacing it with JMS based solution for caching.

Based on the blog on ActiveMQ: http://blog.trivident.com/category/jms-2/, I have done the implementation for Tibco Queue configuration in cd_storage_conf.xml however I am getting following exception:

Can you please suggest what am I missing?

2014-01-13 14:31:09,560 ERROR StorageManagerFactory - Fatal error, unable to load the StorageManagerFactory
java.lang.NoClassDefFoundError: javax/jms/JMSException
    at java.lang.Class.forName0(Native Method) ~[na:]
    at java.lang.Class.forName(Unknown Source) ~[na:]
    at com.tridion.cache.CacheChannel.configure(CacheChannel.java:249) ~[cd_cache.jar:na]
    at com.tridion.cache.CacheChannel.createCacheChannel(CacheChannel.java:228) ~[cd_cache.jar:na]
    at com.tridion.cache.CacheFactory.configure(CacheFactory.java:222) ~[cd_cache.jar:na]
    at com.tridion.storage.configuration.CacheConfigurationLoader.configure(CacheConfigurationLoader.java:17) ~[cd_datalayer.jar:na]
    at com.tridion.configuration.step.ConfigurationStepLoader.configure(ConfigurationStepLoader.java:47) ~[cd_core.jar:na]
    at com.tridion.storage.StorageManagerFactory.configure(StorageManagerFactory.java:139) [cd_datalayer.jar:na]
    at com.tridion.services.BaseService.<init>(BaseService.java:107) ~[cd_core.jar:na]
    at com.tridion.storage.StorageManagerFactory.<init>(StorageManagerFactory.java:106) [cd_datalayer.jar:na]
    at com.tridion.storage.StorageManagerFactory.reloadInstance(StorageManagerFactory.java:86) [cd_datalayer.jar:na]
    at com.tridion.storage.StorageManagerFactory.<clinit>(StorageManagerFactory.java:58) [cd_datalayer.jar:na]
    at com.tridion.webservices.claimprocessor.WritableODataClaimProcessor.checkSessionWrapperAvailability(WritableODataClaimProcessor.java:152) [cd_preview_ambient.jar:na]
    at com.tridion.webservices.claimprocessor.WritableODataClaimProcessor.guaranteeInitialized(WritableODataClaimProcessor.java:138) [cd_preview_ambient.jar:na]
    at com.tridion.webservices.claimprocessor.WritableODataClaimProcessor.onRequestStart(WritableODataClaimProcessor.java:51) [cd_preview_ambient.jar:na]
    at com.tridion.ambientdata.Engine.onRequestStart(Engine.java:147) [cd_ambient.jar:na]
Caused by: java.lang.ClassNotFoundException: javax.jms.JMSException
    at java.net.URLClassLoader$1.run(Unknown Source) ~[na:]
    at java.security.AccessController.doPrivileged(Native Method) ~[na:]
    at java.net.URLClassLoader.findClass(Unknown Source) ~[na:]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:]
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:]
    at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:]
    ... 16 common frames omitted
2
  • 1
    From the exception it looks like the javax.jms.JMSException class is missing, so you may be missing a jar. Please share specifics about your config, I.e. The cd_storage_conf.xml and the ObjectCache/RemoteSynchronization elements you've configured. Jan 14, 2014 at 2:23
  • <RemoteSynchronization Queuesize="512"><Connector Class="com.tridion.cache.JMSCacheChannelConnector" Topic="Tridion" Strategy="AsyncJMS11MDB"><JndiContext> <Property Name="java.naming.factory.initial" Value="com.tibco.tibjms.naming.TibjmsInitialContextFactory"/><Property Name="java.naming.factory.url.pkgs" Value="com.tibco.tibjms.naming"/><Property Name="java.naming.provider.url" Value="tcp"/><Property Name="topic.Tridion" Value="Odata"/><Property Name="java.naming.security.principal" Value=""/><Property Name="java.naming.security.credentials" Value=""/> </JndiContext></Connector></RemoteSy..>
    – Hiren Kaku
    Jan 17, 2014 at 0:51

3 Answers 3

4

You are missing the client library jars for JMS. Since you are using Tibco as a JMS server, I would check their documentation for a list of client jars.

3
  • Found that there are firewall restriction for connecting to Tibco EMS. Not sure if that could be the reason for above error.
    – Hiren Kaku
    Jan 15, 2014 at 4:33
  • After fixing firewall rules and other config values, the error has changed little bit. the error now is "java.lang.NoClassDefFoundError: Could not initialize class com.tridion.storage.StorageManagerFactory"
    – Hiren Kaku
    Jan 17, 2014 at 0:43
  • This error could be due to licensing or a misconfiguration. See Mihai's answer here: stackoverflow.com/questions/10388863/… Jan 17, 2014 at 7:03
2

You are using AsyncJMS11MDB strategy. You may need to provide an EJB module with an EJB spec pointing to the MDB class (if your build is java).

Also make sure that the strategy you specify is supported by Tibco.

Have a look at the article here that explains how to accomplish this for WebSphere JMS. There may be similarities.

http://www.tridiondeveloper.com/configuring-the-tridion-cache-channel-service-with-websphere-application-server-jms

2
  • We are using Tibco queues for caching and not the JMS server as described in the above link. I have two questions: 1.What should be the value of Topic and topic.Tridion in the RemoteSynchronization element? 2. Does it have to Topic created in tibco or can we use queues instead?
    – Hiren Kaku
    Jan 21, 2014 at 1:08
  • 1
    You need to create a topic on your messaging server and point to it in your RemoteSynchronization config. What exactly do you mean, "using Tibco queues for caching and not the JMS"? Jan 21, 2014 at 14:21
0

The JMS connection done by Tridion by default picks up the user under which service is running (windows account).

In our case, Tibco was not setup for windows authentication and it was setup for custom authentication through user name and password which is not supported by Tridion. So the

authentication to Tibco from Tridion deployer/odata was happening as anonymous and connection was failing.

So we dropped the idea of connecting to Tibco for cache channel connector.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.