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

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

ParameterQueues? changed, added some properties to modify the queues

File size: 3.9 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.ENABLE_COMPRESSION, "false"));
43        }
44
45        public ISerializer getInstance() throws SerializerException {
46                if (serializer == null) {
47                        try {
48                                String className = env.getProperty(ParameterQueue.PROXY_SERIALIZER, 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        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}
Note: See TracBrowser for help on using the repository browser.