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

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

Events deleted instead of them there's a new example of how to use the observer pattern

File size: 4.0 KB
Line 
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 *
17 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
18 *
19 */
20public class Serializer {
21        // private static final Logger logger =
22        // Logger.getLogger(Serializer.class.getName());
23        public static final String KRYO = "kryo";
24        public static final String JAVA = "java";
25        public static final String GSON = "gson";
26
27        // Client serializer
28        public ISerializer serializer;
29
30        // Server serializers
31        private ISerializer kryoSerializer;
32        private ISerializer javaSerializer;
33        private ISerializer gsonSerializer;
34
35        private Properties env;
36
37        public Serializer(Properties env) {
38                this.env = env;
39        }
40
41        private Boolean getEnableCompression() {
42                return Boolean.valueOf(env.getProperty(ParameterQueue.ENABLECOMPRESSION, "false"));
43        }
44
45        public ISerializer getInstance() throws SerializerException {
46                if (serializer == null) {
47                        try {
48                                String className = env.getProperty(ParameterQueue.SERIALIZER_NAME, Serializer.JAVA);
49
50                                if (className == null || className.isEmpty()) {
51                                        throw new ClassNotFoundException("Class name is null or empty.");
52                                }
53
54                                serializer = getInstance(className);
55                        } catch (Exception ex) {
56                                throw new SerializerException(ex.getMessage(), ex);
57                        }
58                }
59
60                return serializer;
61        }
62
63        public ISerializer getInstance(String type) throws SerializerException {
64                if (KRYO.equals(type)) {
65                        if (kryoSerializer == null) {
66                                kryoSerializer = new KryoImp();
67                        }
68                        return kryoSerializer;
69                } else if (GSON.equals(type)) {
70                        if (gsonSerializer == null) {
71                                gsonSerializer = new GsonImp();
72                        }
73                        return gsonSerializer;
74                } else if (JAVA.equals(type)) {
75                        if (javaSerializer == null) {
76                                javaSerializer = new JavaImp();
77                        }
78                        return javaSerializer;
79                }
80
81                throw new SerializerException("Serializer not found.");
82        }
83
84        public byte[] serialize(String type, Object obj) throws SerializerException {
85                ISerializer instance = getInstance(type);
86
87                Boolean enableCompression = getEnableCompression();
88                if (enableCompression) {
89                        byte[] objSerialized = instance.serialize(obj);
90                        try {
91                                return Zipper.zip(objSerialized);
92                        } catch (IOException e) {
93                                throw new SerializerException(e.getMessage(), e);
94                        }
95                } else {
96                        return instance.serialize(obj);
97                }
98        }
99
100        // TODO: remove this function and think about the event serialization
101        public byte[] serialize(Object obj) throws SerializerException {
102                ISerializer instance = getInstance();
103
104                Boolean enableCompression = getEnableCompression();
105                if (enableCompression) {
106                        byte[] objSerialized = instance.serialize(obj);
107                        try {
108                                return Zipper.zip(objSerialized);
109                        } catch (IOException e) {
110                                throw new SerializerException(e.getMessage(), e);
111                        }
112                } else {
113                        return instance.serialize(obj);
114                }
115        }
116
117        public Request deserializeRequest(String type, byte[] bytes, RemoteObject obj) throws SerializerException {
118                ISerializer instance = getInstance(type);
119
120                Boolean enableCompression = getEnableCompression();
121                if (enableCompression) {
122                        try {
123                                byte[] unZippedBytes = Zipper.unzip(bytes);
124                                return instance.deserializeRequest(unZippedBytes, obj);
125                        } catch (IOException e) {
126                                throw new SerializerException(e.getMessage(), e);
127                        }
128                } else {
129                        return instance.deserializeRequest(bytes, obj);
130                }
131        }
132
133        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
134                ISerializer instance = getInstance();
135
136                Boolean enableCompression = getEnableCompression();
137                if (enableCompression) {
138                        try {
139                                byte[] unZippedBytes = Zipper.unzip(bytes);
140                                return instance.deserializeResponse(unZippedBytes, type);
141                        } catch (IOException e) {
142                                throw new SerializerException(e.getMessage(), e);
143                        }
144                } else {
145                        return instance.deserializeResponse(bytes, type);
146                }
147        }
148
149}
Note: See TracBrowser for help on using the repository browser.