package org.rzo.netty.ahessian.application.jmx.remote.server; import java.util.ArrayList; import java.util.concurrent.Executor; import javax.management.MBeanServer; import javax.management.MBeanServerConnection; import javax.management.MBeanServerFactory; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; 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.HessianRPCServiceHandler; import org.rzo.netty.ahessian.rpc.server.ImmediateInvokeService; import org.rzo.netty.ahessian.session.MixinPipeline; import com.caucho.hessian4.io.SerializerFactory; public class RPCServerMixinPipelineFactory implements ChannelPipelineFactory { Executor _executor; SerializerFactory _serializerFactory = new JmxSerializerFactory(); RPCServerMixinPipelineFactory(Executor executor) { _executor = executor; } public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = new MixinPipeline(); pipeline.addLast("inputStream", new InputStreamDecoder()); //pipeline.addLast("logger2",new OutLogger("2")); pipeline.addLast("outputStream", new OutputStreamEncoder()); pipeline.addLast("callDecoder", new PullInputStreamConsumer(new HessianRPCCallDecoder(_serializerFactory), _executor )); pipeline.addLast("replyEncoder", new HessianRPCReplyEncoder(_serializerFactory)); pipeline.addLast("outputProducer", new OutputProducer(_executor)); //pipeline.addLast("logger3",new OutLogger("3")); HessianRPCServiceHandler factory = new HessianRPCServiceHandler(_executor); ArrayList servers = MBeanServerFactory.findMBeanServer(null); MBeanServer server = null; if (servers != null && servers.size() > 0) server = (MBeanServer) servers.get(0); if (server == null) server = MBeanServerFactory.createMBeanServer(); //factory.addService("default", new ContinuationService(new ContinuationHalloWorldService(), HelloWorldServiceInterface.class, factory, _executor)); factory.addService("default", new ImmediateInvokeService(server, MBeanServerConnection.class, factory)); pipeline.addLast("hessianRPCServer", factory); //bootstrap.getPipeline().addLast("logger4",new OutLogger("4")); return pipeline; } }