/* * 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.jgroups.slave; import java.util.List; import org.hibernate.search.backend.LuceneWork; import org.hibernate.search.backend.jgroups.impl.MessageSerializationHelper; import org.hibernate.search.engine.service.spi.ServiceManager; import org.hibernate.search.exception.SearchException; import org.hibernate.search.indexes.serialization.spi.LuceneWorkSerializer; import org.hibernate.search.spi.SearchIntegrator; import org.jgroups.Message; import org.jgroups.ReceiverAdapter; /** * @author Lukasz Moren */ public class JGroupsReceiver extends ReceiverAdapter { public static volatile int queues; public static volatile int works; private final SearchIntegrator integrator; public JGroupsReceiver(SearchIntegrator integrator) { this.integrator = integrator; } public static void reset() { queues = 0; works = 0; } @Override public void receive(Message message) { try { final byte[] rawBuffer = message.getRawBuffer(); final int messageOffset = message.getOffset(); final int bufferLength = message.getLength(); byte[] serializedQueue = MessageSerializationHelper.extractSerializedQueue( messageOffset, bufferLength, rawBuffer ); ServiceManager serviceManager = integrator.getServiceManager(); LuceneWorkSerializer luceneWorkSerializer = serviceManager.requestService( LuceneWorkSerializer.class ); List<LuceneWork> queue = luceneWorkSerializer.toLuceneWorks( serializedQueue ); queues++; works += queue.size(); serviceManager.releaseService( LuceneWorkSerializer.class ); } catch (ClassCastException e) { throw new SearchException( e ); } } }