5 Replies Latest reply on Apr 14, 2005 2:24 PM by ryanjoe

    Help !! Simple JDBCCacheloader code not working

    rskhanuja

      Hi,
      I am trying to test JDBCCacheLoader.But my simple program also is not working.
      Here is the code

      import java.util.Set;
      import org.jboss.cache.Fqn;
      import org.jboss.cache.PropertyConfigurator;
      import org.jboss.cache.aop.TreeCacheAop;
      import org.jboss.cache.loader.JDBCCacheLoader;



      public class LargeObjectCacheManager {
      TreeCacheAop tree = null;
      public LargeObjectCacheManager()throws Exception {
      tree = new TreeCacheAop();
      PropertyConfigurator config = new PropertyConfigurator();
      config.configure(tree,"test-service.xml");
      tree.startService();
      }
      public void putLargeMessage(String id,String obj) throws Exception{
      tree.putObject(id,obj);
      }

      public static void main(String args[]){
      try{
      LargeObjectCacheManager locm = new LargeObjectCacheManager();
      JDBCCacheLoader cl = (JDBCCacheLoader)locm.tree.getCacheLoader();
      cl.start();
      boolean exists = cl.exists(new Fqn(new String("/poc/1")));
      System.out.println("exists " + exists);
      Set s =cl.getChildrenNames(new Fqn(new String("/poc/1")));
      System.out.println("S is " + s);//###S coming Null ???
      System.out.println("Size is " + s.size());
      }catch(Exception e){
      e.printStackTrace();
      }
      }
      }

      here is the config file
      <?xml version="1.0" encoding="UTF-8"?>

      <!-- ===================================================================== -->
      <!-- -->
      <!-- Sample TreeCache Service Configuration -->
      <!-- -->
      <!-- ===================================================================== -->






      <!-- ==================================================================== -->
      <!-- Defines TreeCache configuration -->
      <!-- ==================================================================== -->



      jboss:service=Naming
      jboss:service=TransactionManager

      <!--
      Configure the TransactionManager
      -->
      org.jboss.cache.DummyTransactionManagerLookup

      <!--
      Isolation level : SERIALIZABLE
      REPEATABLE_READ (default)
      READ_COMMITTED
      READ_UNCOMMITTED
      NONE
      -->
      REPEATABLE_READ

      <!--
      Valid modes are LOCAL, REPL_ASYNC and REPL_SYNC
      -->
      REPL_ASYNC

      <!--
      Just used for async repl: use a replication queue
      -->
      false

      <!--
      Replication interval for replication queue (in ms)
      -->
      0

      <!--
      Max number of elements which trigger replication
      -->
      0

      <!-- Name of cluster. Needs to be the same for all clusters, in order
      to find each other
      -->
      TreeCache-Cluster

      <!-- JGroups protocol stack properties. Can also be a URL,
      e.g. file:/home/bela/default.xml

      -->



      <!-- 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.1.2.3" mcast_port="48866"
      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" />-->
      <FD_SOCK/>
      <VERIFY_SUSPECT timeout="1500"
      up_thread="false" down_thread="false"/>
      <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
      max_xmit_size="8192" 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="true" down_thread="true"/>



      <!--
      Whether or not to fetch state on joining a cluster
      -->
      true

      <!--
      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
      -->
      5000

      <!--
      Number of milliseconds to wait until all responses for a
      synchronous call have been received.
      -->
      10000

      <!-- Max number of milliseconds to wait for a lock acquisition -->
      15000


      <!-- Name of the eviction policy class. Not supported now. -->

      org.jboss.cache.loader.JDBCCacheLoader
      true
      /poc
      false
      false

      cache.jdbc.table.name=POC_LargeMessages
      cache.jdbc.table.create=false
      cache.jdbc.table.drop=false
      cache.jdbc.fqn.column=MessageID
      cache.jdbc.fqn.type=varchar(255)
      cache.jdbc.node.column=Message
      cache.jdbc.node.type=blob
      cache.jdbc.parent.column=parent
      cache.jdbc.driver=oracle.jdbc.OracleDriver
      cache.jdbc.url=jdbc:oracle:oci:@poc
      cache.jdbc.user=pocuser
      cache.jdbc.password=pocuser





      <!-- Uncomment to get a graphical view of the TreeCache MBean above -->
      <!-- -->
      <!-- jboss.cache:service=TreeCache-->
      <!-- jboss.cache:service=TreeCache-->
      <!-- -->


      #####
      Output
      ####
      log4j:WARN No appenders could be found for logger (org.jboss.cache.PropertyConfigurator).
      log4j:WARN Please initialize the log4j system properly.

      -------------------------------------------------------
      GMS: address is rkhanuja:1440
      -------------------------------------------------------
      exists false
      S is null
      java.lang.NullPointerException
      at LargeObjectCacheManager.main(LargeObjectCacheManager.java:37)

      Your help is appreciated.
      Thanks,
      Ravi Singh Khanuja

        • 1. Re: Help !! Simple JDBCCacheloader code not working
          belaban

          getChildrenNames() returns null (see javadoc), as expected.
          Why do you access the cache loader directly ?


          * @return Set A list of child names (as Objects). Must not be modified because this would
          * modify the underlying node directly (will throw an exception if modification is attempted). Returns null
          * of the parent node was not found, or if there are no children
          * @jmx.managed-operation
          */
          public Set getChildrenNames(Fqn fqn) throws CacheException {

          • 2. Re: Help !! Simple JDBCCacheloader code not working
            rskhanuja

            Thanks Bela. As per docs getChildrenNames(Fqn fqn)should return a set of child node names if it finds children or null if there are not children found for the fqn.I have /poc/1,/poc/2,/poc/3 as a Fqns in my database.So it should return these three if i try to search for getChildrenNames(new Fqn("/poc")).
            I want to make sure that the cache is accessing the db.I haven't found any example of JDBCCacheLoader.
            Please advice.Your prompt reponse is appreciated.

            Regards,
            Ravi Singh Khanuja

            • 3. Re: Help !! Simple JDBCCacheloader code not working
              belaban

              There are examples: get the source and search for FileCacheLoaderTest, or JDBCCacheLoaderTest.
              Source is at cvs.sf.net:/cvsroot/jboss co JBossCache

              • 4. Re: Help !! Simple JDBCCacheloader code not working
                ryanjoe

                Plug the cacheloader into the config - example:
                org.jboss.cache.loader.JDBCCacheLoader
                false
                false
                false

                cache.jdbc.table.name=jbosscache
                cache.jdbc.fqn.column=fqn
                cache.jdbc.fqn.type=varchar(50)
                cache.jdbc.node.column=node
                cache.jdbc.node.type=blob
                cache.jdbc.parent.column=parentfqn
                cache.jdbc.parent.type=varchar(50)
                cache.jdbc.datasource=MYDATASOURCE

                You can also create a CacheListener(implements TreeCacheListener) and let it Log the callbacks - you can quickly see what the cache is doing.

                I am new at this too - Joe

                • 5. Re: Help !! Simple JDBCCacheloader code not working
                  ryanjoe

                  My previous entry had all the xml tags stripped - !!