[hibernate-commits] Hibernate SVN: r15691 - in search/trunk: src/java/org/hibernate/search/backend/impl/jms and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Dec 12 10:44:56 EST 2008


Author: hardy.ferentschik
Date: 2008-12-12 10:44:56 -0500 (Fri, 12 Dec 2008)
New Revision: 15691

Removed:
   search/trunk/src/test-resources/conf/
   search/trunk/src/test-resources/deploy/
   search/trunk/src/test-resources/deployers/
   search/trunk/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java
Modified:
   search/trunk/build.xml
   search/trunk/ivy.xml
   search/trunk/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
   search/trunk/src/test-resources/jndi.properties
   search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
   search/trunk/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java
   search/trunk/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java
   search/trunk/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java
Log:
HSEARCH-301
Refactored the tests to use embedded activemq as jms broker. This makes the test run faster and they are easier to understand. There is also no need anymore for all these external configuration files. Only jndi.properties is needed. 
Since the activemq dependency is managed by ivy/maven it is also a step towards HSEARCH-82.

Modified: search/trunk/build.xml
===================================================================
--- search/trunk/build.xml	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/build.xml	2008-12-12 15:44:56 UTC (rev 15691)
@@ -68,7 +68,6 @@
     </path>
 
     <path id="junit.moduleclasspath.required" description="Test classes. Optional jars excluded.">
-        <!-- order matters for JBoss XB proper bootstrap -->
         <fileset dir="${lib.dir}/test">
             <include name="*.jar"/>
         </fileset>
@@ -180,17 +179,6 @@
                 <exclude name="hibernate.properties"/>
             </fileset>
         </copy>
-        <mkdir dir="${build.testresources.dir}/jars"/>
-        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-slave.jar">
-            <fileset dir="${testclasses.dir}">
-                <include name="org/hibernate/search/test/jms/slave/**.*"/>
-            </fileset>
-        </jar>
-        <jar filesetmanifest="merge" jarfile="${build.testresources.dir}/jars/jms-master.jar">
-            <fileset dir="${testclasses.dir}">
-                <include name="org/hibernate/search/test/jms/master/**.*"/>
-            </fileset>
-        </jar>
     </target>
 
     <target name="junit" depends="compiletest, prepare-test-resources">
@@ -216,14 +204,9 @@
                     <batchtest fork="yes" todir="${testreports.dir}/@{db}" haltonfailure="no">
                         <fileset dir="${testclasses.dir}">
                             <include name="**/*Test.class"/>
-                            <exclude name="**/JMSSlaveTest.class"/>
                             <exclude name="**/classloading/**"/>
                         </fileset>
                     </batchtest>
-                    <test fork="yes"
-                          todir="${testreports.dir}/@{db}"
-                          haltonfailure="no"
-                          name="org.hibernate.search.test.jms.slave.JMSSlaveTest"/>
                 </junit>
                 <junit forkmode="perBatch" printsummary="yes" haltonfailure="yes">
                     <classpath>

Modified: search/trunk/ivy.xml
===================================================================
--- search/trunk/ivy.xml	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/ivy.xml	2008-12-12 15:44:56 UTC (rev 15691)
@@ -37,7 +37,7 @@
         <dependency org="org.apache.lucene" name="lucene-analyzers" rev="2.4.0" conf="test->default"/>
         <dependency org="org.apache.commons" name="commons-codec" rev="1.3" conf="test->default"/>
         <dependency org="org.apache.commons" name="commons-io" rev="1.3.2" conf="test->default"/> 
-        <dependency org="cglib" name="cglib" rev="2.1_3" conf="test->default"/>
+        <dependency org="javassist" name="javassist" rev="3.4.GA" conf="test->default"/>
         <dependency org="asm" name="asm" rev="1.5.3" conf="test->default"/>
         <dependency org="asm" name="asm-attrs" rev="1.5.3" conf="test->default"/>
         <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.4.2" conf="test->default"/>
@@ -47,6 +47,7 @@
         <dependency org="postgresql" name="postgresql" rev="8.3-603.jdbc3" conf="test->default"/>
         <dependency org="mysql" name="mysql-connector-java" rev="5.1.6" conf="test->default"/>
         <dependency org="org.apache.derby" name="derby" rev="10.2.1.6" conf="test->default"/>
+        <dependency org="org.apache.activemq" name="activemq-all" rev="5.2.0" conf="test->default"/>
 
     </dependencies>
 </ivy-module>

Modified: search/trunk/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java
===================================================================
--- search/trunk/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/java/org/hibernate/search/backend/impl/jms/AbstractJMSHibernateSearchController.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -21,9 +21,6 @@
  * Implement the Hibernate Search controller responsible for processing the
  * work send through JMS by the slave nodes.
  *
- * Note the subclass implementation has to implement javax.jms.MessageListener
- * //TODO Ask Bill why it is required
- *
  * @author Emmanuel Bernard
  */
 public abstract class AbstractJMSHibernateSearchController implements MessageListener {

Modified: search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test/org/hibernate/search/test/jms/master/JMSMasterTest.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -2,92 +2,73 @@
 package org.hibernate.search.test.jms.master;
 
 import java.io.Serializable;
+import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;
+import javax.jms.MessageConsumer;
 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 javax.naming.Context;
 
+import org.apache.activemq.broker.BrokerService;
 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.engine.DocumentBuilder;
 import org.hibernate.search.test.SearchTestCase;
-import org.jboss.deployers.spi.DeploymentException;
-import org.jboss.embedded.Bootstrap;
 
 /**
+ * Tests  that the Master node in a JMS cluster can propertly process messages placed onto the queue.
+ *
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
 public class JMSMasterTest extends SearchTestCase {
 
-	private Bootstrap bootstrap;
+	/**
+	 * Name of the test queue as found in JNDI  (see jndi.properties).
+	 */
+	private static final String QUEUE_NAME = "queue/searchtest";
 
-	public void testMessageSending() throws Exception {
-		MyHibernateUtil.sessionFactory = getSessions();
+	/**
+	 * Name of the connection factort as found in JNDI (see jndi.properties).
+	 */
+	private static final String CONNECTION_FACTORY_NAME = "java:/ConnectionFactory";
 
-		//create an object wo trigggering indexing
-		Session s = openSession( );
-		s.getTransaction().begin();
-		Statement statement = s.connection().createStatement();
-		statement.executeUpdate(
-				"insert into TShirt_Master(id, logo, size) values( '1', 'JBoss balls', 'large')"
-		);
-		statement.close();
-		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.NOT_ANALYZED );
-		doc.add( field );
-		field = new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED );
-		doc.add( field );
-		field = new Field("logo", ts.getLogo(), Field.Store.NO, Field.Index.ANALYZED );
-		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 );
+	/**
+	 * ActiveMQ message broker.
+	 */
+	private BrokerService brokerService;
 
-		//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 );
+	private QueueSession queueSession;
 
-		ObjectMessage message = session.createObjectMessage();
-		message.setObject( (Serializable) queue );
+	public void testMessageSending() throws Exception {
 
-		sender = session.createSender( jmsQueue );
-		sender.send( message );
+		TShirt shirt = createObjectWithSQL();
+		List<LuceneWork> queue = createDocumentAndWorkQueue( shirt );
 
-		session.close();
-		cnn.close();
+		registerMessageListener();
+		sendMessage( queue );
 
-		//wait for the message to be processed
+		// need to sleep to give JMS processing and indexing time
 		Thread.sleep( 1000 );
 
-		FullTextSession ftSess = Search.getFullTextSession( openSession( ) );
+		FullTextSession ftSess = Search.getFullTextSession( openSession() );
 		ftSess.getTransaction().begin();
 		QueryParser parser = new QueryParser( "id", new StopAnalyzer() );
 		Query luceneQuery = parser.parse( "logo:jboss" );
@@ -99,52 +80,101 @@
 		ftSess.close();
 	}
 
-	protected void setUp() throws Exception {
-		bootstrap = startupEmbeddedJBoss();
-		try {
-			super.setUp();
-		}
-		catch( RuntimeException e ) {
-			try {
-				shutdownEmbeddedJBoss(bootstrap);
-			}
-			catch( Exception ee ) {
-				//swallow
-			}
-			throw e;
-		}
+	private void registerMessageListener() throws Exception {
+		MessageConsumer consumer = getQueueSession().createConsumer( getMessageQueue() );
+		consumer.setMessageListener( new MDBSearchController( getSessions() ) );
 	}
 
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		shutdownEmbeddedJBoss(bootstrap);
+	private void sendMessage(List<LuceneWork> queue) throws Exception {
+		ObjectMessage message = getQueueSession().createObjectMessage();
+		message.setObject( ( Serializable ) queue );
+		QueueSender sender = getQueueSession().createSender( getMessageQueue() );
+		sender.send( message );
 	}
 
-	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;
+	private Queue getMessageQueue() throws Exception {
+		Context ctx = new javax.naming.InitialContext();
+		return ( Queue ) ctx.lookup( QUEUE_NAME );
+	}
+
+	private QueueSession getQueueSession() throws Exception {
+		if ( queueSession == null ) {
+			Context ctx = new javax.naming.InitialContext();
+			QueueConnectionFactory factory = ( QueueConnectionFactory ) ctx.lookup( CONNECTION_FACTORY_NAME );
+			QueueConnection conn = factory.createQueueConnection();
+			conn.start();
+			queueSession = conn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
+
 		}
-		catch (DeploymentException e) {
-			throw new RuntimeException( "Failed to bootstrap", e );
-		}
+		return queueSession;
 	}
 
-	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
-		bootstrap.shutdown();
+	/**
+	 * Manually create the work queue. This lists gets send by the Slaves to the Master for indexing.
+	 *
+	 * @param shirt The shirt to index
+	 *
+	 * @return A manually create <code>LuceneWork</code> list.
+	 */
+	private List<LuceneWork> createDocumentAndWorkQueue(TShirt shirt) {
+		Document doc = new Document();
+		Field field = new Field(
+				DocumentBuilder.CLASS_FIELDNAME, shirt.getClass().getName(), Field.Store.YES, Field.Index.NOT_ANALYZED
+		);
+		doc.add( field );
+		field = new Field( "id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED );
+		doc.add( field );
+		field = new Field( "logo", shirt.getLogo(), Field.Store.NO, Field.Index.ANALYZED );
+		doc.add( field );
+		LuceneWork luceneWork = new AddLuceneWork(
+				shirt.getId(), String.valueOf( shirt.getId() ), shirt.getClass(), doc
+		);
+		List<LuceneWork> queue = new ArrayList<LuceneWork>();
+		queue.add( luceneWork );
+		return queue;
 	}
 
+	/**
+	 * Create a test object without trigggering indexing. Use SQL directly.
+	 *
+	 * @return a <code>TShirt</code> test object.
+	 *
+	 * @throws SQLException in case the inset fails.
+	 */
+	private TShirt createObjectWithSQL() throws SQLException {
+		Session s = openSession();
+		s.getTransaction().begin();
+		Statement statement = s.connection().createStatement();
+		statement.executeUpdate(
+				"insert into TShirt_Master(id, logo, size) values( '1', 'JBoss balls', 'large')"
+		);
+		statement.close();
+		TShirt ts = ( TShirt ) s.get( TShirt.class, 1 );
+		s.getTransaction().commit();
+		s.close();
+		return ts;
+	}
 
+	protected void setUp() throws Exception {
+		// create and start the brokerService
+		brokerService = new BrokerService();
+		brokerService.setPersistent( false );
+		brokerService.start();
+
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		if ( brokerService != null ) {
+			brokerService.stop();
+		}
+	}
+
 	protected void configure(Configuration cfg) {
 		super.configure( cfg );
+		// explcitily set the backend even though lucene is default.
 		cfg.setProperty( Environment.WORKER_BACKEND, "lucene" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
-
 	}
 
 	protected Class[] getMappings() {

Modified: search/trunk/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test/org/hibernate/search/test/jms/master/MDBSearchController.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -1,24 +1,25 @@
 //$Id$
 package org.hibernate.search.test.jms.master;
 
-import javax.ejb.MessageDriven;
-import javax.ejb.ActivationConfigProperty;
 import javax.jms.MessageListener;
 
 import org.hibernate.search.backend.impl.jms.AbstractJMSHibernateSearchController;
 import org.hibernate.Session;
+import org.hibernate.SessionFactory;
 
 /**
  * @author Emmanuel Bernard
  */
- at MessageDriven(activationConfig = {
-      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
-      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
-      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
-   } )
-public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
+public class MDBSearchController extends AbstractJMSHibernateSearchController {
+
+	SessionFactory sessionFactory;
+
+	MDBSearchController( SessionFactory sessionFactory ) {
+		this.sessionFactory = sessionFactory;
+	}
+
 	protected Session getSession() {
-		return MyHibernateUtil.sessionFactory.openSession( );
+		return sessionFactory.openSession( );
 	}
 
 	protected void cleanSessionIfNeeded(Session session) {

Deleted: search/trunk/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test/org/hibernate/search/test/jms/master/MyHibernateUtil.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -1,12 +0,0 @@
-//$Id$
-package org.hibernate.search.test.jms.master;
-
-import org.hibernate.SessionFactory;
-
-/**
- * Don't do it at home ;-)
- * @author Emmanuel Bernard
- */
-public class MyHibernateUtil {
-	public static SessionFactory sessionFactory;
-}

Modified: search/trunk/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test/org/hibernate/search/test/jms/slave/JMSSlaveTest.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -1,46 +1,51 @@
 //$Id$
 package org.hibernate.search.test.jms.slave;
 
-import org.jboss.embedded.Bootstrap;
-import org.jboss.deployers.spi.DeploymentException;
-import org.hibernate.search.test.SearchTestCase;
+import javax.jms.MessageConsumer;
+import javax.jms.Queue;
+import javax.jms.QueueConnection;
+import javax.jms.QueueConnectionFactory;
+import javax.jms.QueueSession;
+import javax.naming.Context;
+
+import org.apache.activemq.broker.BrokerService;
+
+import org.hibernate.cfg.Configuration;
 import org.hibernate.search.Environment;
 import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessorFactory;
+import org.hibernate.search.test.SearchTestCase;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
-import org.hibernate.cfg.Configuration;
 
 /**
+ * Checks that the Slave in a JMS configuration proplerly places index jobs onto the queue.
+ *
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
 public class JMSSlaveTest extends SearchTestCase {
 
-	private Bootstrap bootstrap;
+	/**
+	 * Name of the test queue as found in JNDI  (see jndi.properties).
+	 */
+	private static final String QUEUE_NAME = "queue/searchtest";
 
+	/**
+	 * Name of the connection factort as found in JNDI (see jndi.properties).
+	 */
+	private static final String CONNECTION_FACTORY_NAME = "java:/ConnectionFactory";
 
-	protected void setUp() throws Exception {
-		bootstrap = startupEmbeddedJBoss();
-		try {
-			super.setUp();
-		}
-		catch( RuntimeException e ) {
-			try {
-				shutdownEmbeddedJBoss(bootstrap);
-			}
-			catch( Exception ee ) {
-				//swallow
-			}
-			throw e;
-		}
-	}
+	/**
+	 * ActiveMQ message broker.
+	 */
+	private BrokerService brokerService;
 
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		shutdownEmbeddedJBoss(bootstrap);
-	}
+	private QueueSession queueSession;
 
 	public void testMessageSend() throws Exception {
+		registerMessageListener();
 		SearchQueueChecker.reset();
+		
 		Session s = openSession();
 		Transaction tx = s.beginTransaction();
 		TShirt ts = new TShirt();
@@ -52,8 +57,10 @@
 		s.persist( ts );
 		s.persist( ts2 );
 		tx.commit();
+
 		//need to sleep for the message consumption
 		Thread.sleep(500);
+
 		assertEquals( 1, SearchQueueChecker.queues );
 		assertEquals( 2, SearchQueueChecker.works );
 
@@ -63,8 +70,10 @@
 		ts = (TShirt) s.get( TShirt.class, ts.getId() );
 		ts.setLogo( "Peter pan" );
 		tx.commit();
+
 		//need to sleep for the message consumption
 		Thread.sleep(500);
+
 		assertEquals( 1, SearchQueueChecker.queues );
 		assertEquals( 2, SearchQueueChecker.works ); //one update = 2 works
 
@@ -74,42 +83,62 @@
 		s.delete( s.get( TShirt.class, ts.getId() ) );
 		s.delete( s.get( TShirt.class, ts2.getId() ) );
 		tx.commit();
+
 		//Need to sleep for the message consumption
 		Thread.sleep(500);
+		
 		assertEquals( 1, SearchQueueChecker.queues );
 		assertEquals( 2, SearchQueueChecker.works );
 		s.close();
 	}
 
-	public static Bootstrap startupEmbeddedJBoss() {
-		try {
-			long start = System.currentTimeMillis();
-			Bootstrap bootstrap = new Bootstrap();
-			bootstrap.bootstrap();
-			bootstrap.deployResource( "jars/jms-slave.jar" );
-			System.out.println("JBoss Embedded boot time: " + (System.currentTimeMillis() - start) + " ms");
-			return bootstrap;
+	protected void setUp() throws Exception {
+		// create and start the brokerService
+		brokerService = new BrokerService();
+		brokerService.setPersistent( false );
+		brokerService.start();
+
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		if ( brokerService != null ) {
+			brokerService.stop();
 		}
-		catch (DeploymentException e) {
-			throw new RuntimeException( "Failed to bootstrap", e );
-		}
 	}
 
-	public static void shutdownEmbeddedJBoss(Bootstrap bootstrap) {
-		bootstrap.shutdown();
+	private void registerMessageListener() throws Exception {
+		MessageConsumer consumer = getQueueSession().createConsumer( getMessageQueue() );
+		consumer.setMessageListener( new SearchQueueChecker() );
 	}
 
+	private Queue getMessageQueue() throws Exception {
+		Context ctx = new javax.naming.InitialContext();
+		return ( Queue ) ctx.lookup( QUEUE_NAME );
+	}
 
+	private QueueSession getQueueSession() throws Exception {
+		if ( queueSession == null ) {
+			Context ctx = new javax.naming.InitialContext();
+			QueueConnectionFactory factory = ( QueueConnectionFactory ) ctx.lookup( CONNECTION_FACTORY_NAME );
+			QueueConnection conn = factory.createQueueConnection();
+			conn.start();
+			queueSession = conn.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE );
+
+		}
+		return queueSession;
+	}
+
 	protected void configure(Configuration cfg) {
 		super.configure( cfg );
 		cfg.setProperty( Environment.WORKER_BACKEND, "jms" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, "java:/ConnectionFactory" );
-		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, "queue/searchtest" );
-
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_CONNECTION_FACTORY, CONNECTION_FACTORY_NAME );
+		cfg.setProperty( JMSBackendQueueProcessorFactory.JMS_QUEUE, QUEUE_NAME );
 	}
 
 	protected Class[] getMappings() {
-		return new Class[]{
+		return new Class[] {
 				TShirt.class
 		};
 	}

Modified: search/trunk/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test/org/hibernate/search/test/jms/slave/SearchQueueChecker.java	2008-12-12 15:44:56 UTC (rev 15691)
@@ -6,19 +6,16 @@
 import javax.jms.Message;
 import javax.jms.ObjectMessage;
 import javax.jms.JMSException;
-import javax.ejb.MessageDriven;
-import javax.ejb.ActivationConfigProperty;
 
+
 import org.hibernate.search.backend.LuceneWork;
 
 /**
+ * Helper class to verify that the Slave places messages onto the queue.
+ *
  * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
  */
- at MessageDriven(activationConfig = {
-      @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
-      @ActivationConfigProperty(propertyName="destination", propertyValue="queue/searchtest"),
-      @ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
-   } )
 public class SearchQueueChecker implements MessageListener {
 	public static int queues;
 	public static int works;
@@ -28,22 +25,24 @@
 		works = 0;
 	}
 
+	@SuppressWarnings("unchecked")
 	public void onMessage(Message message) {
-		if (! (message instanceof ObjectMessage ) ) {
+		if ( !( message instanceof ObjectMessage ) ) {
 			return;
 		}
-		ObjectMessage objectMessage = (ObjectMessage) message;
+		ObjectMessage objectMessage = ( ObjectMessage ) message;
+
 		List<LuceneWork> queue;
 		try {
-			queue = (List<LuceneWork>) objectMessage.getObject();
+			queue = ( List<LuceneWork> ) objectMessage.getObject();
 		}
-		catch (JMSException e) {
+		catch ( JMSException e ) {
 			return;
 		}
-		catch( ClassCastException e ) {
+		catch ( ClassCastException e ) {
 			return;
 		}
 		queues++;
-		works+=queue.size();
+		works += queue.size();
 	}
 }

Modified: search/trunk/src/test-resources/jndi.properties
===================================================================
--- search/trunk/src/test-resources/jndi.properties	2008-12-12 15:37:44 UTC (rev 15690)
+++ search/trunk/src/test-resources/jndi.properties	2008-12-12 15:44:56 UTC (rev 15691)
@@ -1,4 +1,12 @@
-# DO NOT EDIT THIS FILE UNLESS YOU KNOW WHAT YOU ARE DOING
-#
-java.naming.factory.initial=org.jboss.naming.JBossRemotingContextFactory
-java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
+java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
+java.naming.provider.url=vm://localhost
+
+# use the following property to specify the JNDI name the connection factory
+# should appear as. 
+connectionFactoryNames = ConnectionFactory, java:/ConnectionFactory
+
+# register some queues in JNDI using the form
+# queue.[jndiName] = [physicalName]
+queue.queue/searchtest = searchQueue
+
+




More information about the hibernate-commits mailing list