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

Last change on this file since 66 was 62, checked in by gguerrero, 11 years ago
File size: 4.7 KB
Line 
1package omq.common.util;
2
3import java.io.IOException;
4import java.util.Properties;
5
6import omq.common.event.Event;
7import omq.common.message.Request;
8import omq.common.message.Response;
9import omq.common.util.Serializers.GsonImp;
10import omq.common.util.Serializers.ISerializer;
11import omq.common.util.Serializers.JavaImp;
12import omq.common.util.Serializers.KryoImp;
13import omq.exception.SerializerException;
14import omq.server.RemoteObject;
15
16/**
17 *
18 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
19 *
20 */
21public class Serializer {
22        // private static final Logger logger =
23        // Logger.getLogger(Serializer.class.getName());
24        public static final String KRYO = "kryo";
25        public static final String JAVA = "java";
26        public static final String GSON = "gson";
27
28        // Client serializer
29        public ISerializer serializer;
30
31        // Server serializers
32        private ISerializer kryoSerializer;
33        private ISerializer javaSerializer;
34        private ISerializer gsonSerializer;
35
36        private Properties env;
37
38        public Serializer(Properties env) {
39                this.env = env;
40        }
41
42        private Boolean getEnableCompression() {
43                return Boolean.valueOf(env.getProperty(ParameterQueue.ENABLECOMPRESSION, "false"));
44        }
45
46        public ISerializer getInstance() throws SerializerException {
47                if (serializer == null) {
48                        try {
49                                String className = env.getProperty(ParameterQueue.SERIALIZER_NAME, Serializer.JAVA);
50                               
51                                if (className == null || className.isEmpty()) {
52                                        throw new ClassNotFoundException("Class name is null or empty.");
53                                }
54                               
55                                serializer = getInstance(className);
56                        } catch (Exception ex) {
57                                throw new SerializerException(ex.getMessage(), ex);
58                        }
59                }
60
61                return serializer;
62        }
63
64        public ISerializer getInstance(String type) throws SerializerException {                               
65                if (KRYO.equals(type)) {
66                        if (kryoSerializer == null) {
67                                kryoSerializer = new KryoImp();
68                        }
69                        return kryoSerializer;
70                } else if (GSON.equals(type)) {
71                        if (gsonSerializer == null) {
72                                gsonSerializer = new GsonImp();
73                        }
74                        return gsonSerializer;
75                } else if (JAVA.equals(type)) {
76                        if (javaSerializer == null) {
77                                javaSerializer = new JavaImp();
78                        }
79                        return javaSerializer;
80                }
81               
82                throw new SerializerException("Serializer not found.");
83        }
84
85        public byte[] serialize(String type, Object obj) throws SerializerException {
86                ISerializer instance = getInstance(type);
87
88                Boolean enableCompression = getEnableCompression();
89                if (enableCompression) {
90                        byte[] objSerialized = instance.serialize(obj);
91                        try {
92                                return Zipper.zip(objSerialized);
93                        } catch (IOException e) {
94                                throw new SerializerException(e.getMessage(), e);
95                        }
96                } else {
97                        return instance.serialize(obj);
98                }
99        }
100
101        // TODO: remove this function and think about the event serialization
102        public byte[] serialize(Object obj) throws SerializerException {
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
118        public Request deserializeRequest(String type, byte[] bytes, RemoteObject obj) throws SerializerException {
119                ISerializer instance = getInstance(type);
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
134        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
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        public Event deserializeEvent(byte[] bytes) throws SerializerException {
151                ISerializer instance = getInstance();
152
153                Boolean enableCompression = getEnableCompression();
154                if (enableCompression) {
155                        try {
156                                byte[] unZippedBytes = Zipper.unzip(bytes);
157                                return instance.deserializeEvent(unZippedBytes);
158                        } catch (IOException e) {
159                                throw new SerializerException(e.getMessage(), e);
160                        }
161                } else {
162                        return instance.deserializeEvent(bytes);
163                }
164        }
165
166        // public static void removeSerializers() {
167        // logger.warn("Removing serializers");
168        // serializer = null;
169        // kryoSerializer = null;
170        // javaSerializer = null;
171        // gsonSerializer = null;
172        // }
173}
Note: See TracBrowser for help on using the repository browser.