Pipeline Netty diferente por datagrama UDP

Temos um servidor que já está implementado no TCP / IP, mas agora temos um requisito para o protocolo suportar também o UDP.

Cada datagrama UDP enviado contém tudo o que preciso para decodificar, por isso é um sistema de resposta e resposta muito simples, com dados no datagrama separados por quebras de linha.

O código para o bootstrap quando o servidor é iniciado é mostrado abaixo:

<code>    //SETUP UDP SERVER
    DatagramChannelFactory udpFactory = new NioDatagramChannelFactory(Executors.newCachedThreadPool());

    ConnectionlessBootstrap udpBootstrap = new ConnectionlessBootstrap(udpFactory);

    udpBootstrap.setOption("sendBufferSize", 65536);
    udpBootstrap.setOption("receiveBufferSize", 65536);
    udpBootstrap.setOption("receiveBufferSizePredictorFactory", new AdaptiveReceiveBufferSizePredictorFactory());

    udpBootstrap.setOption("broadcast", "true");
    udpBootstrap.setPipelineFactory(new ServerPipeLineFactoryUDP());
    udpBootstrap.bind(new InetSocketAddress(hostIp, 4000)); 
</code>

O código do pipeline é:

<code>class ServerPipeLineFactoryUDP implements ChannelPipelineFactory
{

    private final static ExecutionHandler EXECUTION_HANDLER = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(ScorpionFMS.THREAD_POOL_COUNT, 0, 0));

    public ServerPipeLineFactoryUDP()
    {

    }

    @Override
    public ChannelPipeline getPipeline() throws Exception
    {

    ChannelPipeline pipeline = pipeline();
    pipeline.addLast("debugup", new DebugUpstreamHandler("UDP"));
    pipeline.addLast("debugdown", new DebugDownstreamHandler("UDP"));

    pipeline.addLast("framer", new DelimiterBasedFrameDecoder(256, Delimiters.lineDelimiter()));

    pipeline.addLast("decoder", new UDPRequestDecoder(true));
    pipeline.addLast("encoder", new StringEncoder());
    pipeline.addLast("executor", EXECUTION_HANDLER);
    pipeline.addLast("handler", new UDPRequestHandler(

    return pipeline;
    }
}
</code>

O problema que estou tendo é cada datagrama está usando a mesma instância deste pipeline (eu esperava que cada datagrama usaria uma nova instância do pipeline), então todo o estado que eu armazeno enquanto processo o conteúdo de um datagrama é salvo e o próximo datagrama usa também, (enquanto que para TCP cada conexão teria seu próprio canal e, portanto, sua própria instância do pipeline e seu próprio estado)

Eu sei que este é o comportamento esperado de ler a documentação, mas existe de qualquer maneira para forçar netty para recriar o pipeline para cada datagrama? Ou eu estou indo sobre isso completamente errado?

De forma sucinta, quero que cada datagrama tenha uma nova instância do pipeline (o mesmo que tcp)

questionAnswers(2)

yourAnswerToTheQuestion