JMS Cache Synchronization Manager

Hi all,
I am trying to implement distributed cache synchronization in TopLink using JMS.
On http://download-west.oracle.com/docs/cd/A97688_12/toplink.903/b10064/enterpri.htm#1022254 , there is an example given which has a snippet of the sessions.xml file.
The example snippet shows a tag <naming-service-initial-context-factory> under the <cache-synchronization-manager> tag. But on the DTD given on http://download-west.oracle.com/docs/cd/A97688_12/toplink.903/b10064/a-sessio.htm#634251 , I cant find an element <naming-service-initial-context-factory>. Please let me know which one is wrong - the DTD or the example?
Also, I tried to use JMS for distributed cache synchronization. My JMS Server is running on a seperate VM and I have configured info about it in the sessions.xml file. But TopLink is complaining that it cannot find the top and connection factory. Yet, I am able to look them up from a standalone program.
Does anyone have any experience setting this up? Any examples?
Thanks,
Binil

Hi Doug,
Thanks for the clarifications! :)
I am not able to get the JMS Cache Synchronization work still :( I am new to JMS & Toplink - so I will try to explain what I am doing and please let me know if there is something I am doing wrong.
I have an EJB application which is a Stateless Session bean which has two methods : one to fetch an entity and another to update an entity. Also, I have a weblogic domain in which I have three managed servers - appServerOne, appServerTwo and jmsServer. On appServerOne and appServerTwo I have deployed the above mentioined application. On jmsServer, I have configured my ConnectionFactory and Topic and the JNDI names of those are provided to the EJB application.
With this setup, I run two client programs. I will list the steps below:
1. Client1 fetches an entity whereby it is loaded to the TopLink cache. The DB logs show that a SELECT query is issued to the DB.
2. Client2 fetches the same entity whereby it is loaded to the cache; again a SELECT query is issued.
3. Client1 updates that entity using UOW; the logs dont show a DB UPDATE statement though. But the updates are indeed made to the DB when I check them.
4. Client1 fetches the entity again; the updates are visible and the JDBC logs show that a trip to the DB is not done.
5. After waiting for sometime Client1 fetches the same entity again and I get the stale data! :(
I have enabled logging, so I am hoping that TopLink will log a message when a JMS notification is posted. Also, I have made the cache synchronization synchronous, so that the transaction shouldnt commit before the notification being send.
I tried making the stateless session bean stateful and it still didnt work. Is there anything I need to do.
Cheerio,
Binil

Similar Messages

  • 10.1.3 JMS Cache Synchronization on OC4J

    Hi,
    We're using stand-alone OC4j 10.1.3.0 along with TopLink 10.1.3.0 (packaged with OC4j). In enabling JMS cache synchronization, I get the following error message:
    Exception [TOPLINK-12000] (Oracle TopLink - 10g Release 3 (10.1.3.0.0) (Build 060118)): oracle.toplink.exceptions.CommunicationException
    Exception Description: Error Sending connection service to jms/Topic/ToplinkCacheSync.
    Internal Exception: javax.jms.JMSException: TopicSubscriber[Oc4jJMS.Consumer.arkansas.6e2ec2b0:1117159d1ca:-7fff.65,Topic[ToplinkCacheSync],null,null,false]: cannot invoke method "setMessageListener" within the J2EE container.
    at oracle.toplink.exceptions.CommunicationException.errorSendingConnectionService(CommunicationException.java:40)
    at oracle.toplink.remote.CacheSynchronizationManager.addRemoteConnection(CacheSynchronizationManager.java:175)
    at oracle.toplink.remote.jms.JMSClusteringService.retreiveRemoteSessions(JMSClusteringService.java:198)
    at oracle.toplink.remote.jms.JMSClusteringService.run(JMSClusteringService.java:175)
    Caused by: javax.jms.JMSException: TopicSubscriber[Oc4jJMS.Consumer.arkansas.6e2ec2b0:1117159d1ca:-7fff.65,Topic[ToplinkCacheSync],null,null,false]: cannot invoke method "setMessageListener" within the J2EE container.
    at com.evermind.server.jms.JMSUtils.make(JMSUtils.java:1034)
    at com.evermind.server.jms.JMSUtils.toJMSException(JMSUtils.java:1114)
    at com.evermind.server.jms.JMSUtils.toJMSException(JMSUtils.java:1085)
    at com.evermind.server.jms.JMSUtils.assertNotContainer(JMSUtils.java:1500)
    at com.evermind.server.jms.EvermindMessageConsumer.setMessageListener(EvermindMessageConsumer.java:217)
    at oracle.toplink.remote.jms.JMSClusteringService.connectBackToRemote(JMSClusteringService.java:53)
    at oracle.toplink.remote.CacheSynchronizationManager.addRemoteConnection(CacheSynchronizationManager.java:168)
    ... 2 more
    It is, therefore, my assumption that Toplink is using JMS 1.0.2b while OC4J is using JMS 1.1. Who can:
    1) Verify or debunk my assumption?
    2) Point me to a work-around?
    Perhaps my config is incorrect? Here's a sessions.xml snippet, in case it helps:
    <cache-synchronization-manager>
    <clustering-service xsi:type="jms-clustering">
    <naming-service-url>ormi://localhost:23791/ems</naming-service-url>
    <jndi-user-name>oc4jadmin</jndi-user-name>
    <jndi-password>oc4j</jndi-password>
    <naming-service-initial-context-factory-name>com.evermind.server.rmi.RMIInitialContextFactory</naming-service-initial-context-factory-name>
    <jms-topic-connection-factory-name>jms/Topic/ToplinkCacheSyncConnectionFactory</jms-topic-connection-factory-name>
    <jms-topic-name>jms/Topic/ToplinkCacheSync</jms-topic-name>
    </clustering-service>
    <remove-connection-on-error>false</remove-connection-on-error>
    </cache-synchronization-manager>
    Many thanks in advance,
    --Todd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    Thank you very much for your contribution! Yes, indeed, that was my main issue. A sessions.xml section that looks like the following (instead of the <cache-synchronization-manager> section above) does fix the problem:
    <remote-command>
    <commands>
    <cache-sync>true</cache-sync>
    </commands>
    <transport xsi:type="jms-topic-transport">
    <topic-host-url>ormi://localhost:23791/ems</topic-host-url>
    <topic-connection-factory-name>jms/Topic/ToplinkCacheSyncConnectionFactory</topic-connection-factory-name>
    <topic-name>jms/Topic/ToplinkCacheSync</topic-name>
    <jndi-naming-service>
    <user-name>oc4jadmin</user-name>
    <password>oc4j</password>
    <initial-context-factory-name>com.evermind.server.rmi.RMIInitialContextFactory</initial-context-factory-name>
    </jndi-naming-service>
    </transport>
    </remote-command>
    Thanks again,
    --Todd                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • JMS Cache Synchronization - Merge or Database Read?

    When an object in one JVM is changed does TopLink' JMS cache synchronization mechanism merge the changes into the other JVMS in a cluster or does it just signal that the object is dirty and the object is re-read from the database?
    If the answer is 'merge' does a post merge event get called on the object being merged?
    thanks
    Steve

    In TopLink 10.1.3 both can happen, the changes can be merged or an object can be marked invalid and TopLink will refresh the object as needed. In 9.0.4.X the changes will be merged into the other caches (if an object of correct version exists in that cache).
    In the case of a merge postMerge() event will be called.
    --Gordon

  • JMS & Cache synchronization

    We have setup Toplink to do cache synchronization using Tibco JMS. We are using Tomcat Servlet environment. We are using the pre-login event in Toplink to specify the necessary information required for cache synchronization using JMS. For some reason Toplink connects to JMS using the name "anonymous" in addition to connecting with the user name we specify in the code. Toplink also seems to connect to some queue in addition to the Topic that is mentioned in the code. Does anyone know why Toplink would behave like this?

    Hello,
    TopLink uses JNDI to get the TopicConnectionFactory, and will login using the username/password you have specified. It then calls createTopicConnection() that will use the default userid to get a connection to a Topic, so this could be what you are referring to. The login specified in the cache synch setup is only to access JNDI.
    That said, TopLink does not use a queue that I have ever seen. The source code for the JMSClusteringService is shipped with TopLink and can be used to fill in parts left out of the documentation, as well as allow for customizations. In this case, it would be good to review it to get an understanding of the calls TopLink does to connect. If this does not help, I'd need to see the configuration used to set up cache synchronization.
    Best Regards,
    Chris Delahunt

  • Cache Synchronization with JMS and a Message Driven Bean (MDB)

    If I understand correctly, Toplink ueses the following configuration info to find the target to publish its session messages to a JMS server (having its URL as below) which provides the JNDI service that Toplink needs to look up the topic:
    <cache-synchronization-manager>
    <clustering-service> oracle.toplink.remote.jms.mdb.JMSPublishingOnlyClusteringService
    </clustering-service>
    <should-remove-connection-on-error>false</should-remove-connection-on-error>
    <!-- both of the following tags are user specified and must correspond to -->
    <!-- the settings that the user has made, manually, to the JMS Service -->
    <jms-topic-connection-factory-name> jms/TopLinkTopicConectionFactory
    </jms-topic-connection-factory-name>
    <jms-topic-name>jms/TopLinkCacheSynchTopic</jms-topic-name>
    <!-- both of the following tags will be required if OracleAS TopLink -->
    <!-- is not running in the same JVM as the JNDI service that is hosting the JMS Topic -->
    <naming-service-url>ormi://localhost:23791</naming-service-url>
    <naming-service-initial-context-factory> com.evermind.server.rmi.RMIInitialContextFactory </naming-service-initial-context-factory></cache-synchronization-manager>
    The MDB also uses the same JNDI service provided by the JMS server to listen to the topic which is named in the ejb-jar.xml file:
    <enterprise-beans>
    <message-driven>
    <display-name>TopLink clustering MDB</display-name>
    <ejb-name>TopLinkClusteringMDB</ejb-name>
    <ejb-class>com.mycompany.mdb.ClusteringMDB</ejb-class>
    <transaction-type>Container</transaction-type>
    <message-driven-destination> <destination-type>javax.jms.Topic</destination-type>
    </message-driven-destination>
    <env-entry>
    <description>TopLink session name</description>
    <env-entry-name>tl_session_name_for_mdb</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>Employee_Session</env-entry-value>
    </env-entry>
    <resource-ref> <description>description</description>
    <res-ref-name>jms/TopLinkTopicConectionFactory</res-ref-name>
    <res-type>javax.jms.TopicConnectionFactory</res-type>
    <res-auth>Application</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    <resource-env-ref>
    <resource-env-ref-name> jms/TopLinkCacheSynchTopic</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.Topic</resource-env-ref-type> </resource-env-ref>
    </message-driven></enterprise-beans>
    To do this, the EJB container that hosts the above MDB needs to be configured to know where the JMS server is by using the above URL same as in the Toplink sessions.xml file.
    I am not clear that who provides the JNDI service for the Toplink session name lookup used by the MDB:
    // Obtain the Session name configured in the environment variable
    String sessionName = (String) myEnv.lookup(TOPLINK_SESSION_NAME);
    session = SessionManager.getManager().getSession(sessionName);
    so that the MDB can find the currently running Toplink session and communicate with it.
    Can anybody help answer my above question and correct my understandings?
    Many thanks!

    Although TopLink is running in the application server’s VM, the only notable integration points with the server are for JTA and user-defined data sources. All of the work performed to get a session via SessionManager occurs solely within TopLink. When the call is made to retrieve a session, you aren’t getting the ‘active’ session identified by “Employee_Session” that is registered with the application server, rather a new session is created using the definition that exists for “Employee_Session” in sessions.xml.
    When the call ‘session = SessionManager.getManager().getSession(“Employee_Session”)’ is made, the SessionManager simply looks for sessions.xml at the root level of its deployed jars or classpath, then looks for the “Employee_Session” tag within sessions.xml. If a session exists in the file with that name then a TopLink session object is created and returned.
    Note that setting an environment entry as mentioned above simply allows for the session name to be declared dynamically. The call to ‘myEnv.lookup(“tl_session_name_for_mdb”)’ simply asks the bean’s environment for the <env-entry-value> that matches the <env-entry-name>. That string is then used in SessionManager (no different than a hard coded value would be) to identify the session in sessions.xml that is to be loaded.
    I hope this makes sense.

  • JMS Exception during cache synchronization

    Hi,
    I am using JMS cache synchronization fro two applications . During cache synchronization I got this exception
    Local Exception Stack:
    Exception [TOPLINK-0] (OracleAS TopLink - 10g (9.0.4.5) (Build 040930)): oracle.toplink.exceptions.CommunicationException
    Exception Description: javax.jms.JMSException: enqMessage at oracle.toplink.remote.jms.JMSConnection.processCommand(JMSConnection.java:54) at oracle.toplink.internal.remote.ChangeSetPropagator$1.run(ChangeSetPropagator.java:64)
    Has this something to do with the message size ?
    Appreciate any help.
    Thanks
    Priya

    would not expect TopLink to connect twice at all. Is it possible that another service from within the ApplicationServer is connecting? I would recommend changing the JNDI location or the service port of the TIBCO JMS service and altering the TopLink JMS Clustering Service URL to reflect this change. Then verify that multiple connections are still being acquired.
    --Gordon

  • Error handling for distributed cache synchronization

    Hello,
    Can somebody explain to me how the error handling works for the distributed cache synchronization ?
    Say I have four nodes of a weblogic cluster and 4 different sessions on each one of those nodes.
    On Node A an update happens on object B. This update is going to be propogated to all the other nodes B, C, D. But for some reason the connection between node A and node B is lost.
    In the following xml
    <cache-synchronization-manager>
    <clustering-service>...</clustering-service>
    <should-remove-connection-on-error>true</should-remove-connection-on-error>
    If I set this to true does this mean that the Toplink will stop sending updates from node A to node B ? I presume all of this is transparent. In order to handle any errors I do not have to write any code to capture this kind of error .
    Is that correct ?
    Aswin.

    This "should-remove-connection-on-error" option mainly applies to RMI or RMI_IIOP cache synchronization. If you use JMS for cache synchronization, then connectivity and error handling is provided by the JMS service.
    For RMI, when this is set to true (which is the default) if a communication exception occurs in sending the cache synchronization to a server, that server will be removed and no longer synchronized with. The assumption is that the server has gone down, and when it comes back up it will rejoin the cluster and reconnect to this server and resume synchronization. Since it will have an empty cache when it starts back up, it will not have missed anything.
    You do not have to perform any error handling, however if you wish to handle cache synchronization errors you can use a TopLink Session ExceptionHandler. Any cache synchronization errors will be sent to the session's exception handler and allow it to handle the error or be notified of the error. Any errors will also be logged to the TopLink session's log.

  • More Control of Cache Synchronization in a Cluster?

    If I understand correctly, the cache synchronization manager, by default, sends out a changeSet message to the network for any UOW write commit. Since I have a control on certain objects not using Toplink’s cache, I actually do not need the cache synchronization manger to broadcast any update on these objects. In other words, I do not want the cache synchronization manger to send out the changeSet message to the network if I only update those objects that are configured to always read from the database. In this way, I may be able to avoid some unnecessary changeSet message propagations.
    My question is that whether I have a way, either in sessions.xml or in Java API, to tell the cache synchronization manger not to send out the changeSet message for a given specific UOW write commit (although I still need the data update to be committed to the database).

    Many thanks for the reply and glad to see something better is on the way again!
    If I choose to set the cache synchronization manager to null, do the UOW write for a given class which is always refreshed from the database, and then reset the cache synchronization manger back to the previous instance, do I need to do the following afterwards:
              // must login/re-login to initialize cache synchronization
              if (session.isConnected()) {
                   session.logout();
              session.login();
    to ensure the manager be reset properly?
    Since the propagation of the changeSet message is triggered by the UOW, can I have more control at the UOW level to turn on/off the cache synchronization manager?
    If I understand correctly, in Toplink 10.1.3, I can configure the cache synchronization manger globally at the session level, and also have the option in the same application to set a given number of classes not be cache synchronized in a cluster at the descriptor level to overrule the session global settings. I should not have to choose one over the other. Once these are done in configurations, what is the reason that I still have to choose either to send the changeSet or to invalidate the message?

  • 10.1.3 cache synchronization using custom RMI code

    I am trying to port our custom RMI synchronization code (overriding RMIClusteringService) from 9.0.4 to 10.1.3.
    It works by sending an update message to the remote cache whenever an object gets changed on the local cache as follows:
    2006.05.15 11:28:38.117--ServerSession(1102039280)--Thread(Thread[RMI TCP Connection(926)-19.39.48.136,5,RMI Runtime])--Received updates from Remote Server
    This message then results in a trip to the DB to get the object updates.
    Per 10g documentatation, the changed notification should contain the changed attributes (change set) and this should not result in a DB trip for the remote cache. I am not seeing this behavior.
    This is probably because I was using the old (9.0.4) sessions file with our custom cache synchronization manager, which overrides toplink cache sync settings, as shown below:
    <cache-synchronization-manager>
    <clustering-service>
    oracle.toplink.remote.rmi.polling.RMIPollingClusteringService
    </clustering-service>
    <naming-service-url>localhost:1099</naming-service-url>
    </cache-synchronization-manager>
    <event-listener-class>
    oracle.toplink.remote.rmi.polling.RMIPollingClusteringServiceSessionEventAdaptor</event-listener-class>
    With 10.1.3 RMIClusteringService is deprecated and replaced by RMITransportManager. A whole bunch of other classes has been added. Has anyone migrated or written RMI custom cache sync code to use RMITransportManager? If so, can they share their experiences and/or send their code samples? Any other thoughts will be appreciated too.
    thanks,
    Prabodh.

    I am trying to port our custom RMI synchronization code (overriding RMIClusteringService) from 9.0.4 to 10.1.3.
    It works by sending an update message to the remote cache whenever an object gets changed on the local cache as follows:
    2006.05.15 11:28:38.117--ServerSession(1102039280)--Thread(Thread[RMI TCP Connection(926)-19.39.48.136,5,RMI Runtime])--Received updates from Remote Server
    This message then results in a trip to the DB to get the object updates.
    Per 10g documentatation, the changed notification should contain the changed attributes (change set) and this should not result in a DB trip for the remote cache. I am not seeing this behavior.
    This is probably because I was using the old (9.0.4) sessions file with our custom cache synchronization manager, which overrides toplink cache sync settings, as shown below:
    <cache-synchronization-manager>
    <clustering-service>
    oracle.toplink.remote.rmi.polling.RMIPollingClusteringService
    </clustering-service>
    <naming-service-url>localhost:1099</naming-service-url>
    </cache-synchronization-manager>
    <event-listener-class>
    oracle.toplink.remote.rmi.polling.RMIPollingClusteringServiceSessionEventAdaptor</event-listener-class>
    With 10.1.3 RMIClusteringService is deprecated and replaced by RMITransportManager. A whole bunch of other classes has been added. Has anyone migrated or written RMI custom cache sync code to use RMITransportManager? If so, can they share their experiences and/or send their code samples? Any other thoughts will be appreciated too.
    thanks,
    Prabodh.

  • Cache Synchronization

    I am attempting to setup Toplink Cache synchronization using oracle.toplink.remote.rmi.RMIJNDIClusteringService in a clustered environment
    When I launch my server and perform operations I see messages as follows
    Announcement sent from 5ff7180-10598c5d31a--7fff192-168-0-4-381481356
    I configured my session file as follows
    <cache-synchronization-manager>
    <clustering-service>
    oracle.toplink.remote.rmi.RMIJNDIClusteringService
    </clustering-service>
    <naming-service-initial-context-factory-name>
    com.ibm.websphere.naming.WsnInitialContextFactory
    </naming-service-initial-context-factory-name>
    <naming-service-url>iiop://localhost:2809</naming-service-url>
    </cache-synchronization-manager>
    How does Toplink know about the existence of other servers in the cluster ? ( since I do not specify explictly about other members in the cluster in any toplink config file or otherwise)
    How can I ensure that all servers in the cluster are getting synchronized.
    Details
    Toplink version 9.0.4.5
    Application Server : WebSphere 5.0.2
    Thanks
    sk

    We have this setup with the following configuration:
    <cache-synchronization-manager>
    <clustering-service>oracle.toplink.remote.rmi.RMIJNDIClusteringService</clustering-service>
    <multicast-port>6018</multicast-port>
    <multicast-group-address>226.1.2.3</multicast-group-address>
    <is-asynchronous>false</is-asynchronous>
    <should-remove-connection-on-error>true</should-remove-connection-on-error>
    <naming-service-url>iiop://localhost:1900</naming-service-url>
    <naming-service-initial-context-factory>com.ibm.websphere.naming.WsnInitialContextFactory</naming-service-initial-context-factory>
    </cache-synchronization-manager>
    However, all attempts at locating any packets coming across that port have produced no results. Are we missing something?
    The problem we are seeing is that someone is modifying data in one session and another user in another session is not seeing the updates. The problem is intermittent.
    Thanks,
    Dan

  • UnitOfWork.refreshObject();    don't fire event for Cache Synchronization

    My WebApp use JMS for cache synchronization.
    and I need to refresh session Cache by using method unitOfWork.refreshObject() but it don't publish any message to JMSserver.
    sinse My JMS cache synchronization work well when I do UnitOfWok transaction(insert,update,delete)
    How to force cache synchronization ?
    thank you,
    Kowit Laison

    TopLink cache synchronization only synchronizes changes made through a unit of work, it does not synchronize reads or refreshes.
    You will need to perform the refresh on each server, or make your own JMS message to notify your other server's to refresh.
    You may also wish to investigate the TopLink 10.1.3 Preview release that adds support for Cache Invalidation and Cache Invalidation Synchronization. You may be able to broadcast an invalidation command for the refresh.

  • Cache Synchronization initialization failure

    Hello,
    I am trying to implement RMI cache synchronization from sessions.xml. Below is a portion of the XML.
    <cache-synchronization-manager>
    <clustering-service>oracle.toplink.remote.rmi.RMIClusteringService</clustering-service>
    <is-asynchronous>true</is-asynchronous>
    <should-remove-connection-on-error>false</should-remove-connection-on-error>
    <naming-service-url>localhost:1099</naming-service-url>
    </cache-synchronization-manager>
    I receive the following exception. I've verified that the RMIRemoteSessionControllerDispatcher class is in the class path....
    EXCEPTION [TOPLINK-8054] (TopLink - 9.0.3.4 (Build 432)): oracle.toplink.exceptions.SynchronizationException
    EXCEPTION DESCRIPTION: Could not bind controller under registry name: 6e3c-fae428088a--800010-10-4-101-18962
    INTERNAL EXCEPTION: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
         java.rmi.RemoteException: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
         java.lang.ClassNotFoundException: oracle.toplink.remote.rmi.RMIRemoteSessionControllerDispatcher_Stub
    java.lang.ClassNotFoundException: oracle.toplink.remote.rmi.RMIRemoteSessionControllerDispatcher_Stub
         java.lang.Throwable(java.lang.String)
         java.lang.Exception(java.lang.String)
         java.lang.ClassNotFoundException(java.lang.String)
         int java.io.ObjectInputStream.inputObject(boolean)
         java.lang.Object java.io.ObjectInputStream.readObject(boolean)
         java.lang.Object java.io.ObjectInputStream.readObject()
         java.lang.Object sun.rmi.server.UnicastRef.unmarshalValue(java.lang.Class, java.io.ObjectInput)
         void sun.rmi.server.UnicastServerRef.dispatch(java.rmi.Remote, java.rmi.server.RemoteCall)
         java.lang.Object sun.rmi.transport.Transport$1.run()
         java.lang.Object java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction, java.security.AccessControlContext)
         boolean sun.rmi.transport.Transport.serviceCall(java.rmi.server.RemoteCall)
         void sun.rmi.transport.tcp.TCPTransport.handleMessages(sun.rmi.transport.Connection, boolean)
         void sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()
         void java.lang.Thread.run()
    The TL documentation is pretty vague on this topic, if anyone has a suggestion, it would be most appreciated.

    If you are configuring cache synchronization within a sessions.xml file then there is no need to re-login the session. TopLink will initialize cache synchronization when the getSession() API is called for the first time.
    If you are seeing messages, such as 'Sending changeSet to network' that denote the sending of changesets, you can assume that cache synchronization is working.
    In order to verify that cache synchronization is working I would recommend issuing a find by primary key query on all servers. On one server register the object within a UnitOfWork, change the object and commit the UnitOfWork. Then on the other servers re-execute the find by primary key query and inspect the objects to ensure that the changes from the one server was propagated to the other servers. A find by primary key query will load the Object from the cache and should not hit the database. With you configuration of asynchronous transfer you will need to allow time between the update and the reads to ensure that the changes have been sent to all of the servers.
    --Gordon

  • Distributed Cache synchronization with JMS

    Hello,
    The documentation on Cache Synchronization using JMS lists steps to setting up JMS in the JMSClusteringService but does not list steps as to how to connect or setup connections to the various different servers inorder to synchronize between them. It lists steps for connecting to servers when using RMI but not JMS. Appreciate any additional documentation on doing this in JMS. Many thanks

    JMS, by its nature, provides the connections between the different 'servers'. If all servers connect to the same JMS service then there are no additional actions required to have the 'servers' synchronize.
    --Gordon                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • JMS and Data Cache Synchronization

    We have setup Toplink to do cache synchronization using Tibco JMS. For some reason Toplink connects to JMS using the name "anonymous" in addition to connecting with the user name we specify in the code. Toplink also seems to connect to some queue in addition to the Topic that is mentioned in the code. Does anyone know why Toplink would behave like this?

    would not expect TopLink to connect twice at all. Is it possible that another service from within the ApplicationServer is connecting? I would recommend changing the JNDI location or the service port of the TIBCO JMS service and altering the TopLink JMS Clustering Service URL to reflect this change. Then verify that multiple connections are still being acquired.
    --Gordon

  • Setting up cache synchronization using JMS on Tomcat

    I'm trying to enable cache synchronization using JMS on Tomcat 5.0; Does anyone have any tips on how to do this?

    Configure the TIBCO service to provide a Topic and a TopicConnectionFactory for TopLink to use.
    You will need to register for a pre-login event configured on the session that will configure the JMSClusteringService for the TIBCO service.
    ie.
    JMSClusteringService clusteringService = new JMSClusteringService(event.getSession());
    event.getSession().setClusteringService(clusteringService);
    Hashtable env = new Hashtable();
    env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY , "TIBCOFactoryClassName");
    env.put(javax.naming.Context.PROVIDER_URL, "url");
    env.put(javax.naming.Context.SECURITY_PRINCIPAL, "userName"));
    env.put(javax.naming.Context.SECURITY_CREDENTIALS,"password");
    clusteringService.setInitialContextProperties(env);
    --Gordon                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

Maybe you are looking for

  • I can no longer properly sync info from iPod to iTunes.  Did iTunes change?

    I have always been able to sync my iPod to iTunes.  It updated number of plays, date last played, ratings, etc. from the iPod to iTunes. I can no longer do this.  I was on the phone with Apple Support for over an hour...kept getting put on hold while

  • 100% cpu when scrolling in Adobe Reader 8.1.2

    I've installed Reader 8.1.2 on a 2003 Windows server STD Edition with SP1. Everytime I open a pdf document (regardless of what's contained in it)and I scroll using the mouse or the scroll bar the AcroRd32.exe process spikes near 100% utilization. The

  • Complex report (Urgent)

    Dear All, My requirement is Prompt should be like below 1 prompt: Date(Calender) 15 Min Interval 30 Min Inteval 2 prompt: DateBetween All dates data 3 prompt: DateBetween All month data I should create one report it contain all level information like

  • Clear page button- yes and cancel?

    Hi all, I'm just learning javascript and could use some help.  I have an Acrobat PDF form with a clear page button on the top.  When the user clicks the button, I would like an alert to popup that says "Are you sure you wish to clear the page?".  If

  • CompilerCache update on change in Non Java file

    I have a Java project which has .java files and a .mapping file. (.mapping file is needed for JDO implementation). When I change any .java file and rebuild the project, compilerCache (.workshop\.ide) gets updated. When I change only .mapping file and