package org.rzo.yajsw.tray.ahessian.server;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
import javax.management.MBeanServer;
import javax.management.MBeanServerConnection;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.handler.ipfilter.IpFilteringHandler;
import org.rzo.netty.ahessian.application.jmx.remote.service.JmxSerializerFactory;
import org.rzo.netty.ahessian.io.InputStreamDecoder;
import org.rzo.netty.ahessian.io.OutputStreamEncoder;
import org.rzo.netty.ahessian.io.PullInputStreamConsumer;
import org.rzo.netty.ahessian.rpc.message.HessianRPCCallDecoder;
import org.rzo.netty.ahessian.rpc.message.HessianRPCReplyEncoder;
import org.rzo.netty.ahessian.rpc.message.OutputProducer;
import org.rzo.netty.ahessian.rpc.server.ExecutorInvokeService;
import org.rzo.netty.ahessian.rpc.server.HessianRPCServiceHandler;
import org.rzo.netty.ahessian.stopable.StopHandler;
import org.rzo.netty.ahessian.stopable.StopablePipeline;
public class AHessianServerPipelineFactory implements ChannelPipelineFactory
{
Executor _executor;
IpFilteringHandler _ipFilter;
MBeanServer _mbeanServer;
HessianRPCServiceHandler _factory;
Logger _log;
AHessianServerPipelineFactory(Executor executor, IpFilteringHandler ipFilter, MBeanServer mbeanServer, Logger log)
{
AhessianLogging.setAhessianLogger(log);
_executor = executor;
_ipFilter = ipFilter;
_mbeanServer = mbeanServer;
_log = log;
_factory = new HessianRPCServiceHandler(_executor);
// factory.addService("default", new ContinuationService(new
// ContinuationHalloWorldService(), HelloWorldServiceInterface.class,
// factory, _executor));
_factory.addService("default", new ExecutorInvokeService(_mbeanServer, MBeanServerConnection.class, _factory, _executor));
}
public ChannelPipeline getPipeline() throws Exception
{
ChannelPipeline pipeline = StopablePipeline.pipeline();
// pipeline.addLast("logger1",new OutLogger("1"));
pipeline.addLast("ipfilter", _ipFilter);
pipeline.addLast("inputStream", new InputStreamDecoder());
// pipeline.addLast("logger2",new OutLogger("2"));
pipeline.addLast("outputStream", new OutputStreamEncoder());
pipeline.addLast("callDecoder", new PullInputStreamConsumer(new HessianRPCCallDecoder(new JmxSerializerFactory()), _executor));
pipeline.addLast("replyEncoder", new HessianRPCReplyEncoder(new JmxSerializerFactory()));
// pipeline.addLast("logger3",new OutLogger("3"));
pipeline.addLast("outputProducer", new OutputProducer(_executor));
pipeline.addLast("hessianRPCServer", _factory);
pipeline.addLast("stopHandler", new StopHandler());
return pipeline;
}
}