5 Replies Latest reply on Feb 5, 2008 12:28 PM by mircea.markus

    JBossCache + Hibernate + Spring

    narendrakg

      Hi,

      I am building demo application to validate JBoss Cache with Hibernate and WebLogic cluster.
      I have choosen JBoss Cache to hold table data in form of OBJECT CACHE and QUERY CACHE. I am new to JBoss Cache and facing few problems in configuring same.

      I have already done the setup and everything seems working fine except some unexpected error as mentioned below.

      org.jboss.cache.ReplicationException: rsp=sender=192.168.102.71:1793, retval=null, received=false, suspected=false
      at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:3268)
      at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:3215)
      at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:3291)
      ....

      I made few changes in xml as per below (Made it REPL_ASYNC, mcast_addr is not same in other deployements with JBoss cache on same network), and have taken following approach to test JBoss Cache.

      a) Object Cache:-

      Using Statistics: Cache entries return the number of entries loaded into cache.

      SecondLevelCacheStatistics slcs = session.getSessionFactory().getStatistics().getSecondLevelCacheStatistics( SystemParameter.class.getName() );
      Map cacheEntries = slcs.getEntries();
      cacheEntries.length()

      Manual Assumption: Database changes are not reflecting into the system till the timeout configured in xml file.

      b) Query Cache: Hibernate is not reflecting the query into command prompt when show_sql is true.

      Could you please let me know if there could be any expected problem?

      Code - jboss-cache.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <server>
       <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar" />
      
       <!-- ==================================================================== -->
       <!-- Defines TreeCache configuration -->
       <!-- ==================================================================== -->
       <mbean code="org.jboss.cache.TreeCache" name="jboss.cache:service=TreeCache">
       <depends>jboss:service=Naming</depends>
       <depends>jboss:service=TransactionManager</depends>
      
      
       <!-- Configure the TransactionManager -->
       <attribute name="TransactionManagerLookupClass">org.jboss.cache.GenericTransactionManagerLookup</attribute>
      
       <!--
       Node locking scheme :
       PESSIMISTIC (default)
       OPTIMISTIC
       -->
       <attribute name="NodeLockingScheme">PESSIMISTIC</attribute>
      
       <!--
       Node locking isolation level :
       SERIALIZABLE
       REPEATABLE_READ (default)
       READ_COMMITTED
       READ_UNCOMMITTED
       NONE
      
       (ignored if NodeLockingScheme is OPTIMISTIC)
       -->
       <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
      
       <!-- Valid modes are LOCAL
       REPL_ASYNC
       REPL_SYNC
       INVALIDATION_ASYNC
       INVALIDATION_SYNC
       -->
       <attribute name="CacheMode">REPL_ASYNC</attribute>
      
       <!-- Whether each interceptor should have an mbean
       registered to capture and display its statistics. -->
       <attribute name="UseInterceptorMbeans">true</attribute>
      
       <!-- Name of cluster. Needs to be the same for all clusters, in order
       to find each other -->
       <attribute name="ClusterName">hacluster</attribute>
      
       <attribute name="ClusterConfig">
       <config>
       <!-- UDP: if you have a multihomed machine,
       set the bind_addr attribute to the appropriate NIC IP address
       -->
       <!-- UDP: On Windows machines, because of the media sense feature
       being broken with multicast (even after disabling media sense)
       set the loopback attribute to true
       -->
       <UDP mcast_addr="228.2.2.2" mcast_port="45566" ip_ttl="64" ip_mcast="true"
       mcast_send_buf_size="150000" mcast_recv_buf_size="80000" ucast_send_buf_size="150000"
       ucast_recv_buf_size="80000" loopback="false" />
       <PING timeout="2000" num_initial_members="3" up_thread="false" down_thread="false" />
       <MERGE2 min_interval="10000" max_interval="20000" />
       <FD shun="true" up_thread="true" down_thread="true" />
       <VERIFY_SUSPECT timeout="1500" up_thread="false" down_thread="false" />
       <pbcast.NAKACK gc_lag="50" max_xmit_size="8192" retransmit_timeout="600,1200,2400,4800" up_thread="false"
       down_thread="false" />
       <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10" down_thread="false" />
       <pbcast.STABLE desired_avg_gossip="20000" up_thread="false" down_thread="false" />
       <FRAG frag_size="8192" down_thread="false" up_thread="false" />
       <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="true" print_local_addr="true" />
       <pbcast.STATE_TRANSFER up_thread="false" down_thread="false" />
       </config>
       </attribute>
      
       <!-- The max amount of time (in milliseconds) we wait until the
       initial state (ie. the contents of the cache) are retrieved from
       existing members in a clustered environment
       -->
       <attribute name="InitialStateRetrievalTimeout">5000</attribute>
      
       <!-- Number of milliseconds to wait until all responses for a
       synchronous call have been received.
       -->
       <attribute name="SyncReplTimeout">10000</attribute>
      
       <!-- Max number of milliseconds to wait for a lock acquisition -->
       <attribute name="LockAcquisitionTimeout">15000</attribute>
      
       <!-- Name of the eviction policy class. -->
       <attribute name="EvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
      
       <!-- Specific eviction policy configurations. This is LRU -->
       <attribute name="EvictionPolicyConfig">
       <config>
       <attribute name="wakeUpIntervalSeconds">43200</attribute>
       <!-- Cache wide default -->
       <region name="/_default_">
       <attribute name="maxNodes">50000</attribute>
       <attribute name="timeToLiveSeconds">43200</attribute>
       <attribute name="maxAgeSeconds">43200</attribute>
       </region>
       </config>
       </attribute>
       </mbean>
      </server>
      
      


      Hibernate Configuration
      <prop key="hibernate.cache.use_second_level_cache">true</prop>
      <prop key="hibernate.cache.use_query_cache">true</prop>
      <prop key="hibernate.cache.provider_class">org.hibernate.cache.TreeCacheProvider</prop>
      


      Datamodel hbm file
      <cache usage="read-only"/>


      Code for Query Cache
      query = session.createQuery("FROM SystemParameter AS SP WHERE SP.PARAMETER_NAME=:PARAMETER_NAME");
      query.setString("PARAMETER_NAME", parameterName);
      query.setCacheable(true);
      lstResults = query.list();



      Code for Object Cache
      SystemParameter systemParameter = (SystemParameter)session.get(SystemParameter.class, parameterName);


        • 1. Re: JBossCache + Hibernate + Spring
          manik

          Just briefly glancing at the stack trace fragment you have, I'd say your network may need testing. Have you tried the JGroups Draw demo app on your network, uing the same cluster settings as JBoss Cache? Step 1 would be to get JGroups working across your cluster.

          • 2. Re: JBossCache + Hibernate + Spring
            narendrakg

            Hi Manik,

            Previously there were 3 to 4 deployments os same application were there on different machines but with same JBoss xml configurations.

            But after getting these problems, I changed multicast address & cluster name in all deployments.

            I have also tried JGroups Demo Program and it is working fine.

            Do you think I am missing anything now anything in configuration and steps to use with hibernate?

            Thanks & Regards,
            Narendra Gupta

            • 3. Re: JBossCache + Hibernate + Spring
              manik

              Did you try the JGroups demo program using the same cluster configs?

              Also do you have a more detailed stack trace?

              • 4. Re: JBossCache + Hibernate + Spring
                narendrakg

                Thanks Manik for quick reply.

                Hi,

                I have solved most of the problems but now getting following in logs:-

                <Jan 18, 2008 4:56:33 PM HKT> <BEA-001131> <Received an exception when closing a cached statement for the pool "JDBC-NWTE2": java.sql.SQLException: [BEA][Oracle JDBC Driver]Broken pipe.>

                Do you have any idea of its cause?

                Thanks & Regards,
                Narendra Gupta

                • 5. Re: JBossCache + Hibernate + Spring
                  mircea.markus

                  That looks like a JDBC exception, not a JBossCache one.
                  BrokenPipe might suggest that the DBMS closed the connection from the other end, though
                  A bit out of scope for this forum I am afraid :-)