[jbosscache-issues] [JBoss JIRA] Created: (JBCACHE-1495) the searchable cache indexes are not updated if there were data manipulation in transaction or batch

Yan Falken (JIRA) jira-events at lists.jboss.org
Wed Mar 18 10:18:50 EDT 2009


the searchable cache indexes are not updated if there were data manipulation in transaction or batch 
-----------------------------------------------------------------------------------------------------

                 Key: JBCACHE-1495
                 URL: https://jira.jboss.org/jira/browse/JBCACHE-1495
             Project: JBoss Cache
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: SearchableCache
         Environment: searchable cache version 1.0.0 GA
            Reporter: Yan Falken
            Assignee: Manik Surtani
            Priority: Blocker


// runnable unit test: 

package problems;

import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.ProvidedId;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;
import org.jboss.cache.*;
import org.jboss.cache.loader.jdbm.JdbmCacheLoaderConfig;
import org.jboss.cache.config.Configuration;
import org.jboss.cache.config.CacheLoaderConfig;
import org.jboss.cache.search.SearchableCacheFactory;
import org.jboss.cache.search.SearchableCache;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.index.Term;

import static org.testng.AssertJUnit.*;
import java.util.Properties;
import java.io.Serializable;

@Test(groups = {"unit"}, sequential = true)
public class IndexingInTransaction {

    private static final Fqn fname = Fqn.fromString("blah");

    private Cache coreCache;

    private SearchableCache searchableCache;

    Node node;

    public IndexingInTransaction() {
        init();
    }

    @BeforeMethod
    public void init() {
        CacheFactory factory = new DefaultCacheFactory();
        Configuration c = new Configuration();
        c.setInvocationBatchingEnabled(true);

        CacheLoaderConfig clc = new CacheLoaderConfig();

        JdbmCacheLoaderConfig jclc = new JdbmCacheLoaderConfig();
        jclc.setAsync(false);
        jclc.setFetchPersistentState(false);
        jclc.setIgnoreModifications(false);
        jclc.setPurgeOnStartup(true);
        jclc.setLocation("/tmp/c1");

        clc.addIndividualCacheLoaderConfig(jclc);
        c.setCacheLoaderConfig(clc);

        coreCache = factory.createCache(c, false);

        SearchableCacheFactory f = new SearchableCacheFactory();
        Properties p = new Properties();
        p.put("hibernate.search.default.indexBase", "/tmp/c1idx");
        searchableCache = f.createSearchableCache(coreCache, p, Entity.class);
        searchableCache.create();
        searchableCache.start();
        node = searchableCache.getRoot().addChild(fname);
    }

    @Test
    public void testPutEntitiesWithoutTransaction() {
        for (int i = 1; i <= 10; i++) {
            Entity e = getEntity(i);
            System.out.println("caching: " + e);
            Node c = node.addChild(Fqn.fromString(e.getName()));
            c.put(""+ e.getId(), e);
        }
        assertFalse(searchableCache.createQuery(
                Entity.searchByName("Name5")).list().isEmpty());
    }

    @Test
    public void testPutEntitiesWithTransaction() throws Exception {
        ((CacheSPI)(coreCache)).getTransactionManager().begin();
        for (int i = 11; i <= 20; i++) {
            Entity e = getEntity(i);
            System.out.println("caching: " + e);
            Node c = node.addChild(Fqn.fromString(e.getName()));
            c.put(""+ e.getId(), e);
        }
        ((CacheSPI)(coreCache)).getTransactionManager().commit();
        assertFalse(searchableCache.createQuery(
                Entity.searchByName("Name15")).list().isEmpty());
    }

    Entity getEntity(long id) {
        return new Entity(id, "Name" + id, "Surname" + id, true);
    }

//    public static void main(String[] args) {
//        IndexingInTransaction stb = new IndexingInTransaction();
//        stb.init();
//    }

}

@ProvidedId
@Indexed
class Entity implements Serializable {

    public static final String IDX_NAME = "name";
    public static final String IDX_SURNAME = "surname";

    private long id;

    @Field(store = Store.YES)
    private String name;

    @Field (store = Store.YES)
    private String surname;

    private boolean dead;

    Entity(long id, String name, String surname, boolean dead) {
        this.id = id;
        this.name = name;
        this.surname = surname;
        this.dead = dead;
    }

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getSurname() {
        return surname;
    }

    public boolean isDead() {
        return dead;
    }

    public static Query searchByName(String name) {
        BooleanQuery query = new BooleanQuery();
        query.add(new TermQuery(
                new Term(Entity.IDX_NAME,
                        name.toLowerCase())),
                BooleanClause.Occur.MUST);
        return query;
    }

    @Override
    public String toString() {
        return "Entity{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", dead=" + dead +
                '}';
    }

}


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jbosscache-issues mailing list