Package org.hibernate.search.test.jms.master

Source Code of org.hibernate.search.test.jms.master.JMSMasterTest

//$Id: JMSMasterTest.java 12844 2007-07-29 14:56:47Z epbernard $
package org.hibernate.search.test.jms.master;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.jms.ObjectMessage;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.naming.InitialContext;

import org.apache.lucene.analysis.StopAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Query;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.search.Environment;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.engine.DocumentBuilder;
import org.hibernate.search.backend.AddLuceneWork;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
import org.hibernate.search.test.SearchTestCase;
import org.jboss.deployers.spi.DeploymentException;
import org.jboss.embedded.Bootstrap;

/**
* @author Emmanuel Bernard
*/
public class JMSMasterTest extends SearchTestCase {

  private Bootstrap bootstrap;

  public void testMessageSending() throws Exception {
    MyHibernateUtil.sessionFactory = getSessions();

    //create an object wo trigggering indexing
    Session s = openSession( );
    s.getTransaction().begin();
    s.connection().createStatement().executeUpdate(
        "insert into TShirt_Master(id, logo, size) values( '1', 'JBoss balls', 'large')"
    );
    TShirt ts = (TShirt) s.get(TShirt.class, 1);
    s.getTransaction().commit();
    s.close();
    //create the work queue to send
    Document doc = new Document();
    Field field = new Field( DocumentBuilder.CLASS_FIELDNAME, ts.getClass().getName(), Field.Store.YES, Field.Index.UN_TOKENIZED );
    doc.add( field );
    field = new Field("id", "1", Field.Store.YES, Field.Index.UN_TOKENIZED );
    doc.add( field );
    field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.TOKENIZED );
    doc.add( field );
    LuceneWork luceneWork = new AddLuceneWork(ts.getId(), String.valueOf( ts.getId() ), ts.getClass(), doc );
    List<LuceneWork> queue = new ArrayList<LuceneWork>();
    queue.add( luceneWork );

    //send the queue
    InitialContext context = new InitialContext();
    QueueConnectionFactory factory = (QueueConnectionFactory) context.lookup( "java:/ConnectionFactory" );
    Queue jmsQueue = (Queue) context.lookup( "queue/searchtest" );
    QueueConnection cnn;
    QueueSender sender;
    QueueSession session;
    cnn = factory.createQueueConnection();
    //TODO make transacted parameterized
    session = cnn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );

    ObjectMessage message = session.createObjectMessage();
    message.setObject( (Serializable) queue );

    sender = session.createSender( jmsQueue );
    sender.send( message );

    session.close();
    cnn.close();

    //wait for the message to be processed
    Thread.sleep( 1000 );

    FullTextSession ftSess = Search.createFullTextSession( openSession( ) );
    ftSess.getTransaction().begin();
    QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
    Query luceneQuery = parser.parse( "logo:jboss" );
    org.hibernate.Query query = ftSess.createFullTextQuery( luceneQuery );
    List result = query.list();
    assertEquals( 1, result.size() );
    ftSess.delete( result.get( 0 ) );
    ftSess.getTransaction().commit();
    ftSess.close();
  }

  protected void setUp() throws Exception {
    bootstrap = startupEmbeddedJBoss();
    try {
      super.setUp();
    }
    catch( RuntimeException e ) {
      try {
        shutdownEmbeddedJBoss(bootstrap);
      }
      catch( Exception ee ) {
        //swallow
      }
      throw e;
    }
  }

  protected void tearDown() throws Exception {
    super.tearDown();
    shutdownEmbeddedJBoss(bootstrap);
  }

  public static Bootstrap startupEmbeddedJBoss() {
    try {
      long start = System.currentTimeMillis();
      Bootstrap bootstrap = new Bootstrap();
      bootstrap.bootstrap();
      bootstrap.deployResource( "jars/jms-master.jar" );
      System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
      return bootstrap;
    }
    catch (DeploymentException e) {
      throw new RuntimeException( "Failed to bootstrap", e );
    }
  }

  public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
    bootstrap.shutdown();
  }


  protected void configure(Configuration cfg) {
    super.configure( cfg );
    cfg.setProperty( Environment.WORKER_BACKEND, "lucene" );
    cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
    cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );

  }

  protected Class[] getMappings() {
    return new Class[] {
        TShirt.class
    };
  }
}
TOP

Related Classes of org.hibernate.search.test.jms.master.JMSMasterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.