source: trunk/src/main/java/omq/common/util/Serializer.java @ 83

Last change on this file since 83 was 83, checked in by stoda, 11 years ago

J

File size: 4.1 KB
RevLine 
[44]1package omq.common.util;
2
3import java.io.IOException;
4import java.util.Properties;
5
6import omq.common.message.Request;
7import omq.common.message.Response;
8import omq.common.util.Serializers.GsonImp;
9import omq.common.util.Serializers.ISerializer;
10import omq.common.util.Serializers.JavaImp;
11import omq.common.util.Serializers.KryoImp;
12import omq.exception.SerializerException;
13import omq.server.RemoteObject;
14
15/**
16 *
[83]17 * Serializer enables to serialize the requests and the responses of the
18 * remoteObjects. This class is used to have the same serializer object a not to
19 * create new instances every time they are needed.
20 *
[44]21 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
22 *
23 */
24public class Serializer {
[62]25        public static final String KRYO = "kryo";
26        public static final String JAVA = "java";
27        public static final String GSON = "gson";
[44]28
[47]29        // Client serializer
[53]30        public ISerializer serializer;
[44]31
[47]32        // Server serializers
[53]33        private ISerializer kryoSerializer;
34        private ISerializer javaSerializer;
35        private ISerializer gsonSerializer;
[47]36
[53]37        private Properties env;
38
39        public Serializer(Properties env) {
40                this.env = env;
41        }
42
43        private Boolean getEnableCompression() {
[77]44                return Boolean.valueOf(env.getProperty(ParameterQueue.ENABLE_COMPRESSION, "false"));
[44]45        }
46
[53]47        public ISerializer getInstance() throws SerializerException {
[44]48                if (serializer == null) {
49                        try {
[77]50                                String className = env.getProperty(ParameterQueue.PROXY_SERIALIZER, Serializer.JAVA);
[72]51
[44]52                                if (className == null || className.isEmpty()) {
53                                        throw new ClassNotFoundException("Class name is null or empty.");
54                                }
[72]55
[47]56                                serializer = getInstance(className);
[44]57                        } catch (Exception ex) {
58                                throw new SerializerException(ex.getMessage(), ex);
59                        }
60                }
61
62                return serializer;
63        }
64
[72]65        public ISerializer getInstance(String type) throws SerializerException {
[62]66                if (KRYO.equals(type)) {
[47]67                        if (kryoSerializer == null) {
68                                kryoSerializer = new KryoImp();
69                        }
70                        return kryoSerializer;
[62]71                } else if (GSON.equals(type)) {
[47]72                        if (gsonSerializer == null) {
73                                gsonSerializer = new GsonImp();
74                        }
75                        return gsonSerializer;
[62]76                } else if (JAVA.equals(type)) {
[47]77                        if (javaSerializer == null) {
78                                javaSerializer = new JavaImp();
79                        }
80                        return javaSerializer;
81                }
[72]82
[62]83                throw new SerializerException("Serializer not found.");
[47]84        }
85
[53]86        public byte[] serialize(String type, Object obj) throws SerializerException {
[47]87                ISerializer instance = getInstance(type);
88
89                Boolean enableCompression = getEnableCompression();
90                if (enableCompression) {
91                        byte[] objSerialized = instance.serialize(obj);
92                        try {
93                                return Zipper.zip(objSerialized);
94                        } catch (IOException e) {
95                                throw new SerializerException(e.getMessage(), e);
96                        }
97                } else {
98                        return instance.serialize(obj);
99                }
100        }
101
[53]102        public byte[] serialize(Object obj) throws SerializerException {
[44]103                ISerializer instance = getInstance();
104
105                Boolean enableCompression = getEnableCompression();
106                if (enableCompression) {
107                        byte[] objSerialized = instance.serialize(obj);
108                        try {
109                                return Zipper.zip(objSerialized);
110                        } catch (IOException e) {
111                                throw new SerializerException(e.getMessage(), e);
112                        }
113                } else {
114                        return instance.serialize(obj);
115                }
116        }
117
[53]118        public Request deserializeRequest(String type, byte[] bytes, RemoteObject obj) throws SerializerException {
[47]119                ISerializer instance = getInstance(type);
[44]120
121                Boolean enableCompression = getEnableCompression();
122                if (enableCompression) {
123                        try {
124                                byte[] unZippedBytes = Zipper.unzip(bytes);
125                                return instance.deserializeRequest(unZippedBytes, obj);
126                        } catch (IOException e) {
127                                throw new SerializerException(e.getMessage(), e);
128                        }
129                } else {
130                        return instance.deserializeRequest(bytes, obj);
131                }
132        }
133
[53]134        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
[44]135                ISerializer instance = getInstance();
136
137                Boolean enableCompression = getEnableCompression();
138                if (enableCompression) {
139                        try {
140                                byte[] unZippedBytes = Zipper.unzip(bytes);
141                                return instance.deserializeResponse(unZippedBytes, type);
142                        } catch (IOException e) {
143                                throw new SerializerException(e.getMessage(), e);
144                        }
145                } else {
146                        return instance.deserializeResponse(bytes, type);
147                }
148        }
149
150}
Note: See TracBrowser for help on using the repository browser.