4 Replies Latest reply on Nov 13, 2007 4:50 AM by burakbayramli

    JBossCache on JBoss 4.2.1.GA - Two Nodes not replicating

      Hi all,

      I wrote a simple Hibernate example and deployed this on two nodes in a cluster. I start the cluster using run.sh -c all method. I wrote a stress test that would randomly choose an object ID and a node, and do persist() on one node and then find() on another.

      I see no SELECT statements on Hibernate log, which is good, however after test ends, the same ID on two nodes returns different values which tells me replication did not take place. Any thoughts?

      My settings are

      persistence.xml:

      <persistence>
       <persistence-unit name="GGLocal">
       <provider>org.hibernate.ejb.HibernatePersistence</provider>
       <jta-data-source>java:/GGLocalDataSource</jta-data-source>
       <properties>
       <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
       <property name="hibernate.show_sql" value="true"/>
       <property name="hibernate.use_sql_comments" value="true"/>
       <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      
       <property name="hibernate.cache.use_second_level_cache" value="true"/>
       <property name="hibernate.transaction.manager_lookup_class"
       value="org.hibernate.transaction.JBossTransactionManagerLookup"/>
       <property name="hibernate.cache.use_query_cache" value="true"/>
       <property name="hibernate.cache.provider_class"
       value="org.jboss.ejb3.entity.TreeCacheProviderHook"/>
       <property name="hibernate.treecache.mbean.object_name"
       value="jboss.cache:service=EJB3EntityTreeCache"/>
      
       </properties>
       </persistence-unit>
      
      </persistence>
      


      POJO:



      @Entity
      @Table(name="car")
      @Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
      public class Car implements Serializable {
      
       @Id
       @Column(name="license_plate")
       String licensePlate;
      
       public String getLicensePlate() {
       return licensePlate;
       }
      
       public void setLicensePlate(String newLicensePlate) {
       this.licensePlate = newLicensePlate;
       }
      
       String description;
      
       public String getDescription() {
       return description;
       }
      
       public void setDescription(String newDescription) {
       this.description = newDescription;
       }
      
       @ManyToOne()
       @JoinColumn(name="garage_id")
       Garage garage;
      
       public Garage getGarage() {
       return garage;
       }
      
       public void setGarage(Garage newGarage) {
       this.garage = newGarage;
       }
      
      }
      


      Session Bean:

      @Stateful
      public class CarService implements CarInterface, Serializable
      {
      
       private Logger log = Logger.getLogger("appLogger");
      
       @PersistenceContext(unitName="GGLocal")
       EntityManager entityManager;
      
       @TransactionAttribute(TransactionAttributeType.REQUIRED)
       public void updateCar(String id) {
       UUID uuid = java.util.UUID.randomUUID();
       Car car = entityManager.find(Car.class, id);
       car.setDescription(uuid.toString());
       entityManager.persist(car);
       }
      
       @TransactionAttribute(TransactionAttributeType.REQUIRED)
       public String readCarDescription(String id) {
       Car car = entityManager.find(Car.class, id);
       return car.getDescription();
       }
      
       @TransactionAttribute(TransactionAttributeType.REQUIRED)
       public void makeQuery() {
       Query q = entityManager.createQuery("from Car");
       q.setHint("org.hibernate.cacheable", true);
       System.out.println("size=" + q.getResultList().size());
       }
      
      
      }
      


      Test:

      public class TerraTest {
      
       /**
       * Describe <code>main</code> method here.
       *
       * @param args a <code>String[]</code> value
       */
       public static void main(String[] args) {
       multiUpdateTest();
       }
      
       // ============================================================
      
       /**
       * Describe <code>multiUpdateTest</code> method here.
       *
       */
       public static void multiUpdateTest() {
      
       System.out.println("-------- started ----------");
      
       CarInterface refs[] = new CarInterface[2];
       refs[0] = getServiceRef("p1","1099");
       refs[1] = getServiceRef("p2","1099");
      
       System.out.println("------------ Refs received -----------");
      
       String plates[] =
       {"34 TTD 2202",
       "32 TF 22",
       "33 TD 202",
       "31 TGG 102",
       "30 TD 212"};
      
       Random nr = new Random();
       Random np = new Random();
      
       for (int i=0;i<400;i++) {
       // pick a random host and car for udpate
       int h = nr.nextInt(2);
       System.out.println("Updating car on node " + h);
       refs[h].updateCar(plates[np.nextInt(plates.length)]);
      
       // pick a random host and car for read
       h = nr.nextInt(2);
       String s = refs[h].readCarDescription(plates[np.nextInt(plates.length)]);
      
       }
      
       String s1 = refs[0].readCarDescription(plates[0]);
       String s2 = refs[1].readCarDescription(plates[0]);
      
       System.out.println("s1=" + s1);
       System.out.println("s2=" + s2);
      
       if (s1.equals(s2)) {
       System.out.println("------------ GOOD -----------");
       }
       }
      


      Sample data:

      insert into car(license_plate, garage_id, description) values('34 TTD 2202',1, 'ornek description 1')
      insert into car(license_plate, garage_id, description) values('32 TF 22',1,'ornek description 2')
      insert into car(license_plate, garage_id, description) values('33 TD 202',1,'ornek description 3')
      insert into car(license_plate, garage_id, description) values('31 TGG 102',2,'ornek description 4')
      insert into car(license_plate, garage_id, description) values('30 TD 212',2,'ornek description 5')
      



      The logs are attached below:

      http://www.bilgidata.com/downloads/jc-logs.zip

      Thanks in advance,