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

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

Non static broker
TODO: change all test to see whether the new broker configuration works

File size: 4.6 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.endsWith(type)) {
71                        if (gsonSerializer == null) {
72                                gsonSerializer = new GsonImp();
73                        }
74                        return gsonSerializer;
75                } else {
76                        if (javaSerializer == null) {
77                                javaSerializer = new JavaImp();
78                        }
79                        return javaSerializer;
80                }
81        }
82
83        public byte[] serialize(String type, Object obj) throws SerializerException {
84                ISerializer instance = getInstance(type);
85
86                Boolean enableCompression = getEnableCompression();
87                if (enableCompression) {
88                        byte[] objSerialized = instance.serialize(obj);
89                        try {
90                                return Zipper.zip(objSerialized);
91                        } catch (IOException e) {
92                                throw new SerializerException(e.getMessage(), e);
93                        }
94                } else {
95                        return instance.serialize(obj);
96                }
97        }
98
99        // TODO: remove this function and think about the event serialization
100        public byte[] serialize(Object obj) throws SerializerException {
101                ISerializer instance = getInstance();
102
103                Boolean enableCompression = getEnableCompression();
104                if (enableCompression) {
105                        byte[] objSerialized = instance.serialize(obj);
106                        try {
107                                return Zipper.zip(objSerialized);
108                        } catch (IOException e) {
109                                throw new SerializerException(e.getMessage(), e);
110                        }
111                } else {
112                        return instance.serialize(obj);
113                }
114        }
115
116        public Request deserializeRequest(String type, byte[] bytes, RemoteObject obj) throws SerializerException {
117                ISerializer instance = getInstance(type);
118
119                Boolean enableCompression = getEnableCompression();
120                if (enableCompression) {
121                        try {
122                                byte[] unZippedBytes = Zipper.unzip(bytes);
123                                return instance.deserializeRequest(unZippedBytes, obj);
124                        } catch (IOException e) {
125                                throw new SerializerException(e.getMessage(), e);
126                        }
127                } else {
128                        return instance.deserializeRequest(bytes, obj);
129                }
130        }
131
132        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
133                ISerializer instance = getInstance();
134
135                Boolean enableCompression = getEnableCompression();
136                if (enableCompression) {
137                        try {
138                                byte[] unZippedBytes = Zipper.unzip(bytes);
139                                return instance.deserializeResponse(unZippedBytes, type);
140                        } catch (IOException e) {
141                                throw new SerializerException(e.getMessage(), e);
142                        }
143                } else {
144                        return instance.deserializeResponse(bytes, type);
145                }
146        }
147
148        public Event deserializeEvent(byte[] bytes) throws SerializerException {
149                ISerializer instance = getInstance();
150
151                Boolean enableCompression = getEnableCompression();
152                if (enableCompression) {
153                        try {
154                                byte[] unZippedBytes = Zipper.unzip(bytes);
155                                return instance.deserializeEvent(unZippedBytes);
156                        } catch (IOException e) {
157                                throw new SerializerException(e.getMessage(), e);
158                        }
159                } else {
160                        return instance.deserializeEvent(bytes);
161                }
162        }
163
164        // public static void removeSerializers() {
165        // logger.warn("Removing serializers");
166        // serializer = null;
167        // kryoSerializer = null;
168        // javaSerializer = null;
169        // gsonSerializer = null;
170        // }
171}
Note: See TracBrowser for help on using the repository browser.