package org.neo4j.smack.pipeline.core; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.Channel; import org.neo4j.smack.pipeline.CombinedHandler; import org.neo4j.smack.pipeline.RingBufferWorkPipeline; import org.neo4j.smack.pipeline.core.event.CorePipelineEvent; import org.neo4j.smack.routing.InvocationVerb; import com.lmax.disruptor.ExceptionHandler; public class CoreWorkPipeline extends RingBufferWorkPipeline<CorePipelineEvent> implements WorkPublisher { @SuppressWarnings("unchecked") public CoreWorkPipeline(ExceptionHandler exceptionHandler, RoutingHandler routingHandler, DeserializationHandler deserializationHandler, TransactionPreparationHandler tranasctionPreparationHandler, WorkDivisionHandler workDivisionHandler) { super("CoreWorkEventHandler", CorePipelineEvent.FACTORY, exceptionHandler, 1024 * 4); addHandler(new CombinedHandler<CorePipelineEvent>( routingHandler, deserializationHandler)); addHandler(new CombinedHandler<CorePipelineEvent>( tranasctionPreparationHandler, workDivisionHandler)); } @Override public void addWork(Long connectionId, InvocationVerb verb, String path, ChannelBuffer content, Channel channel, boolean keepAlive) { long sequenceNo = ringBuffer.next(); CorePipelineEvent event = ringBuffer.get(sequenceNo); event.reset(connectionId, verb, path, content, channel, keepAlive); ringBuffer.publish(sequenceNo); } @Override public void addFailure(Long connectionId, Channel channel, Throwable cause) { long sequenceNo = ringBuffer.next(); CorePipelineEvent event = ringBuffer.get(sequenceNo); event.reset(connectionId, channel, cause); ringBuffer.publish(sequenceNo); } }