001
014
015 package com.liferay.portal.kernel.nio.intraband.rpc;
016
017 import com.liferay.portal.kernel.io.Deserializer;
018 import com.liferay.portal.kernel.io.Serializer;
019 import com.liferay.portal.kernel.nio.intraband.Datagram;
020 import com.liferay.portal.kernel.nio.intraband.DatagramReceiveHandler;
021 import com.liferay.portal.kernel.nio.intraband.Intraband;
022 import com.liferay.portal.kernel.nio.intraband.RegistrationReference;
023 import com.liferay.portal.kernel.process.ProcessCallable;
024
025 import java.io.Serializable;
026
027
030 public class BootstrapRPCDatagramReceiveHandler
031 implements DatagramReceiveHandler {
032
033 @Override
034 public void receive(
035 RegistrationReference registrationReference, Datagram datagram) {
036
037 Deserializer deserializer = new Deserializer(
038 datagram.getDataByteBuffer());
039
040 Serializer serializer = new Serializer();
041
042 try {
043 ProcessCallable<? extends Serializable> processCallable =
044 deserializer.readObject();
045
046 serializer.writeObject(new RPCResponse(processCallable.call()));
047 }
048 catch (Exception e) {
049 serializer.writeObject(new RPCResponse(e));
050 }
051
052 Intraband intraband = registrationReference.getIntraband();
053
054 intraband.sendDatagram(
055 registrationReference,
056 Datagram.createResponseDatagram(
057 datagram, serializer.toByteBuffer()));
058 }
059
060 }