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.Intraband;
021 import com.liferay.portal.kernel.nio.intraband.RegistrationReference;
022 import com.liferay.portal.kernel.nio.intraband.SystemDataType;
023 import com.liferay.portal.kernel.process.ProcessCallable;
024
025 import java.io.Serializable;
026
027 import java.util.concurrent.TimeUnit;
028
029
032 public class IntrabandRPCUtil {
033
034 public static <V extends Serializable> V execute(
035 RegistrationReference registrationReference,
036 ProcessCallable<V> processCallable)
037 throws IntrabandRPCException {
038
039 Intraband intraband = registrationReference.getIntraband();
040
041 SystemDataType systemDataType = SystemDataType.RPC;
042
043 Serializer serializer = new Serializer();
044
045 serializer.writeObject(processCallable);
046
047 try {
048 Datagram responseDatagram = intraband.sendSyncDatagram(
049 registrationReference,
050 Datagram.createRequestDatagram(
051 systemDataType.getValue(), serializer.toByteBuffer()));
052
053 Deserializer deserializer = new Deserializer(
054 responseDatagram.getDataByteBuffer());
055
056 return deserializer.readObject();
057 }
058 catch (Exception e) {
059 throw new IntrabandRPCException(e);
060 }
061 }
062
063 public static <V extends Serializable> V execute(
064 RegistrationReference registrationReference,
065 ProcessCallable<V> processCallable, long timeout, TimeUnit timeUnit)
066 throws IntrabandRPCException {
067
068 Intraband intraband = registrationReference.getIntraband();
069
070 SystemDataType systemDataType = SystemDataType.RPC;
071
072 Serializer serializer = new Serializer();
073
074 serializer.writeObject(processCallable);
075
076 try {
077 Datagram responseDatagram = intraband.sendSyncDatagram(
078 registrationReference,
079 Datagram.createRequestDatagram(
080 systemDataType.getValue(), serializer.toByteBuffer()),
081 timeout, timeUnit);
082
083 Deserializer deserializer = new Deserializer(
084 responseDatagram.getDataByteBuffer());
085
086 return deserializer.readObject();
087 }
088 catch (Exception e) {
089 throw new IntrabandRPCException(e);
090 }
091 }
092
093 }