Package org.hibernate.search.test.serialization

Source Code of org.hibernate.search.test.serialization.ConcurrentServiceTest$DeserializingThread

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.serialization;

import static org.junit.Assert.assertTrue;

import java.util.List;

import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.indexes.serialization.avro.impl.AvroSerializationProvider;
import org.hibernate.search.indexes.serialization.spi.LuceneWorkSerializer;
import org.hibernate.search.indexes.serialization.spi.SerializationProvider;
import org.hibernate.search.testsupport.TestForIssue;
import org.hibernate.search.testsupport.concurrency.ConcurrentRunner;
import org.hibernate.search.testsupport.concurrency.ConcurrentRunner.TaskFactory;
import org.hibernate.search.testsupport.junit.SearchFactoryHolder;
import org.junit.Rule;
import org.junit.Test;

/**
* Verify behaviour of the AvroSerializationProvider when used concurrently
*
* @author Sanne Grinovero <sanne@hibernate.org> (C) 2014 Red Hat Inc.
*/
@TestForIssue(jiraKey = "HSEARCH-1637")
public class ConcurrentServiceTest {

  @Rule
  public SearchFactoryHolder searchFactoryHolder = new SearchFactoryHolder( RemoteEntity.class );

  @Test
  public void verifyAvroSerializerInUse() {
    SerializationProvider serializationProvider = searchFactoryHolder.getSearchFactory().getServiceManager().requestService( SerializationProvider.class );
    assertTrue( "Wrong serialization provider", serializationProvider instanceof AvroSerializationProvider );
  }

  @Test
  public void concurrentSerialization() throws Exception {
    final LuceneWorkSerializer serializer = extractSerializer();
    final ConcurrentRunner runner = new ConcurrentRunner( new TaskFactory() {
      @Override
      public Runnable createRunnable(int i) throws Exception {
        return new SerializingThread( serializer, SerializationTest.buildWorks() );
      }
    });
    runner.execute();
  }

  @Test
  public void concurrentDeserialization() throws Exception {
    final LuceneWorkSerializer serializer = extractSerializer();
    final byte[] serializedModel = serializer.toSerializedModel( SerializationTest.buildWorks() );
    final ConcurrentRunner runner = new ConcurrentRunner( new TaskFactory() {
      @Override
      public Runnable createRunnable(int i) throws Exception {
        return new DeserializingThread( serializer, serializedModel );
      }
    });
    runner.execute();
  }

  private LuceneWorkSerializer extractSerializer() {
    return searchFactoryHolder.getSearchFactory()
        .getIndexManagerHolder()
        .getIndexManager( RemoteEntity.class.getName() )
        .getSerializer();
  }

  private static class SerializingThread implements Runnable {

    private final LuceneWorkSerializer serializer;
    private final List<LuceneWork> workList;

    public SerializingThread(LuceneWorkSerializer serializer, List<LuceneWork> workList) {
      this.serializer = serializer;
      this.workList = workList;
    }

    @Override
    public void run() {
      serializer.toSerializedModel( workList );
    }

  }

  private static class DeserializingThread implements Runnable {

    private final LuceneWorkSerializer serializer;
    private final byte[] serializedModel;

    public DeserializingThread(LuceneWorkSerializer serializer, byte[] serializedModel) {
      this.serializer = serializer;
      this.serializedModel = serializedModel;
    }

    @Override
    public void run() {
      serializer.toLuceneWorks( serializedModel );
    }

  }

}
TOP

Related Classes of org.hibernate.search.test.serialization.ConcurrentServiceTest$DeserializingThread

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.