//$Id: IndexerAction.java 13977 2011-01-07 17:14:55Z sannegrinovero $ package com.jboss.dvd.seam; import java.util.Date; import java.util.List; import javax.ejb.Remove; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.hibernate.FetchMode; import org.hibernate.search.FullTextSession; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Destroy; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Startup; /** * Re index the needed entities. * (Old version: see IndexerAction implementation in the * jboss6 additional source folder to see usage of new Search API) * * @author Emmanuel Bernard */ @Name("indexer") @Stateful @Scope(ScopeType.APPLICATION) @Startup @Deprecated public class IndexerAction implements Indexer { private Date lastIndexingTime; @PersistenceContext private EntityManager em; public Date getLastIndexingTime() { return lastIndexingTime; } @Create public void index() { indexAllClasses(Actor.class, Category.class); indexProducts(); lastIndexingTime = new Date(); } @SuppressWarnings("unchecked") private void indexProducts() { FullTextSession fullTextSession = getFullTextSession(); List results = fullTextSession.createCriteria(Product.class) .setFetchMode("actors", FetchMode.JOIN) .setFetchMode("categories", FetchMode.JOIN) .list(); for (Object obj : results) { fullTextSession.index(obj); } } private FullTextSession getFullTextSession() { return (FullTextSession) em.getDelegate(); } @SuppressWarnings("unchecked") private void indexAllClasses(Class... entityTypes) { FullTextSession fullTextSession = getFullTextSession(); for (Class entityType : entityTypes) { for (Object obj : fullTextSession.createCriteria(entityType).list()) { fullTextSession.index(obj); } } } @Remove @Destroy public void stop() {} }