Changeset 38


Ignore:
Timestamp:
06/13/13 17:19:52 (11 years ago)
Author:
stoda
Message:

Remote exception added
todo: change throws Exception to Throwable since it seems that NoSuchMethodException? does not inherit from Exception...

Location:
trunk/objectmq
Files:
8 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/objectmq/src/omq/client/proxy/Proxymq.java

    r36 r38  
    2424import omq.common.util.Serializer;
    2525import omq.exception.NoContainsInstanceException;
     26import omq.exception.OmqException;
    2627import omq.exception.RetryException;
    2728import omq.exception.SerializerException;
     
    234235                }
    235236
     237                if (resp.getError() != null) {
     238                        OmqException error = resp.getError();
     239                        String name = error.getType();System.out.println("Name: "+name);
     240                        String message = error.getMessage();
     241                        throw (Exception) Class.forName(name).getConstructor(String.class).newInstance(message);
     242                }
     243
    236244                return resp.getResult();
    237245        }
  • trunk/objectmq/src/omq/common/broker/Broker.java

    r37 r38  
    196196         */
    197197        public static void tryConnection(Properties env) throws Exception {
    198                 System.out.println("hola");
    199198                Channel channel = connection.createChannel();
    200199                String message = "ping";
     
    221220
    222221                if (!message.equalsIgnoreCase(new String(delivery.getBody()))) {
    223                         throw new IOException("Ping-pong initialitzation has failed");
     222                        throw new IOException("Ping initialitzation has failed");
    224223                }
    225224        }
  • trunk/objectmq/src/omq/common/message/Request.java

    r9 r38  
    1010        private static final long serialVersionUID = 6366255840200365083L;
    1111
     12        private String method;
     13        private Object[] params;
    1214        private String id;
    13         private String method;
    1415        private boolean async = false;
    15         private Object[] arguments;
    1616
    1717        private transient long timeout;
     
    2121        }
    2222
    23         public Request(String id, String method, Object[] arguments) {
     23        public Request(String id, String method, Object[] params) {
    2424                this.id = id;
    2525                this.method = method;
    26                 this.arguments = arguments;
     26                this.params = params;
    2727        }
    2828
    29         private Request(String id, String method, boolean async, Object[] arguments) {
     29        private Request(String id, String method, boolean async, Object[] params) {
    3030                this.id = id;
    3131                this.method = method;
    3232                this.async = async;
    33                 this.arguments = arguments;
     33                this.params = params;
    3434        }
    3535
    36         public static Request newSyncRequest(String id, String method, Object[] arguments) {
    37                 return new Request(id, method, false, arguments);
     36        public static Request newSyncRequest(String id, String method, Object[] params) {
     37                return new Request(id, method, false, params);
    3838        }
    3939
    40         public static Request newSyncRequest(String id, String method, Object[] arguments, int retries, long timeout) {
    41                 Request req = new Request(id, method, false, arguments);
     40        public static Request newSyncRequest(String id, String method, Object[] params, int retries, long timeout) {
     41                Request req = new Request(id, method, false, params);
    4242                req.setRetries(retries);
    4343                req.setTimeout(timeout);
     
    4545        }
    4646
    47         public static Request newAsyncRequest(String id, String method, Object[] arguments) {
    48                 return new Request(id, method, true, arguments);
     47        public static Request newAsyncRequest(String id, String method, Object[] params) {
     48                return new Request(id, method, true, params);
    4949        }
    5050
     
    6565        }
    6666
    67         public Object[] getArguments() {
    68                 return arguments;
     67        public Object[] getParams() {
     68                return params;
    6969        }
    7070
    71         public void setArguments(Object[] arguments) {
    72                 this.arguments = arguments;
     71        public void setParams(Object[] params) {
     72                this.params = params;
    7373        }
    7474
  • trunk/objectmq/src/omq/common/message/Response.java

    r9 r38  
    22
    33import java.io.Serializable;
     4
     5import omq.exception.OmqException;
    46
    57public class Response implements Serializable {
     
    1012        private static final long serialVersionUID = 3368363997012527189L;
    1113
     14        private Object result;
     15        private OmqException error;
    1216        private String id;
    1317        private String idOmq;
    14         private Object result;
    1518
    1619        public Response() {
    1720        }
    1821
    19         public Response(String id, String idOmq, Object result) {
     22        public Response(String id, String idOmq, Object result, OmqException error) {
    2023                this.id = id;
    2124                this.idOmq = idOmq;
    2225                this.result = result;
     26                this.error = error;
    2327        }
    2428
     
    4751        }
    4852
     53        public OmqException getError() {
     54                return error;
     55        }
     56
     57        public void setError(OmqException error) {
     58                this.error = error;
     59        }
     60
    4961}
  • trunk/objectmq/src/omq/common/util/Serializers/GsonImp.java

    r34 r38  
    66import omq.common.message.Request;
    77import omq.common.message.Response;
     8import omq.exception.OmqException;
    89import omq.exception.SerializerException;
    910import omq.server.RemoteObject;
     
    6970                Object result = gson.fromJson(jsonElement, type);
    7071
    71                 return new Response(id, idOmq, result);
     72                JsonElement jsonError = jsonObj.get("error");
     73                OmqException error = gson.fromJson(jsonError, OmqException.class);
     74
     75                return new Response(id, idOmq, result, error);
    7276        }
    7377
     
    7781                        String json = new String(bytes);
    7882                        System.out.println(json);
    79                        
     83
    8084                        JsonParser parser = new JsonParser();
    8185                        JsonObject jsonObj = parser.parse(json).getAsJsonObject();
  • trunk/objectmq/src/omq/server/InvocationThread.java

    r37 r38  
    11package omq.server;
    22
     3import java.lang.reflect.InvocationTargetException;
    34import java.util.concurrent.BlockingQueue;
    45
     
    67import omq.common.message.Response;
    78import omq.common.util.Serializer;
     9import omq.exception.OmqException;
    810
    911import com.rabbitmq.client.AMQP.BasicProperties;
     
    3537                                // Deserialize the json
    3638                                Request request = Serializer.deserializeRequest(delivery.getBody(), obj);
    37                                 //Log.saveLog("Server-Deserialize", delivery.getBody());
     39                                // Log.saveLog("Server-Deserialize", delivery.getBody());
    3840
    3941                                String methodName = request.getMethod();
     
    4244                                System.out.println("Invoke method: " + methodName + " CorrID: " + requestID);
    4345
    44                                  // Invoke the method
    45                                  Object result = obj.invokeMethod(request.getMethod(),
    46                                  request.getArguments());
     46                                // Invoke the method
     47                                Object result = null;
     48                                OmqException error = null;
     49                                try {
     50                                        result = obj.invokeMethod(request.getMethod(), request.getParams());
     51                                } catch (InvocationTargetException e) {
     52                                        Throwable throwable = e.getTargetException();
     53                                        error = new OmqException(throwable.getClass().getCanonicalName(), throwable.getMessage());
     54                                } catch (NoSuchMethodException e) {
     55                                        error = new OmqException(e.getClass().getCanonicalName(), e.getMessage());
     56                                }
    4757
     58                                // Reply if it's necessary
    4859                                if (!request.isAsync()) {
    49                                         Response resp = new Response(request.getId(), obj.getRef(), result);
     60                                        Response resp = new Response(request.getId(), obj.getRef(), result, error);
    5061
    5162                                        Channel channel = obj.getChannel();
     
    5869                                        channel.basicPublish("", props.getReplyTo(), replyProps, bytesResponse);
    5970
    60                                         //Log.saveLog("Server-Serialize", bytesResponse);
     71                                        // Log.saveLog("Server-Serialize", bytesResponse);
    6172                                }
    6273
     
    6980                        }
    7081
    71                 }System.out.println("Invocation Thread dies!!");
     82                }
     83                System.out.println("Invocation Thread dies!!");
    7284        }
    7385
  • trunk/objectmq/src/omq/server/RemoteObject.java

    r37 r38  
    166166
    167167        private Method loadMethodWithPrimitives(String methodName, Class<?>[] argArray) throws NoSuchMethodException {
    168                 Method[] methods = this.getClass().getMethods();
    169                 int length = argArray.length;
    170 
    171                 for (Method method : methods) {
    172                         String name = method.getName();
    173                         int argsLength = method.getParameterTypes().length;
    174 
    175                         if (name.equals(methodName) && length == argsLength) {
    176                                 // This array can have primitive types inside
    177                                 Class<?>[] params = method.getParameterTypes();
    178 
    179                                 boolean found = true;
    180 
    181                                 for (int i = 0; i < length; i++) {
    182                                         if (params[i].isPrimitive()) {
    183                                                 Class<?> paramWrapper = primitiveClasses.get(params[i].getName());
    184 
    185                                                 if (!paramWrapper.equals(argArray[i])) {
    186                                                         found = false;
    187                                                         break;
     168                if (argArray != null) {
     169                        Method[] methods = this.getClass().getMethods();
     170                        int length = argArray.length;
     171
     172                        for (Method method : methods) {
     173                                String name = method.getName();
     174                                int argsLength = method.getParameterTypes().length;
     175
     176                                if (name.equals(methodName) && length == argsLength) {
     177                                        // This array can have primitive types inside
     178                                        Class<?>[] params = method.getParameterTypes();
     179
     180                                        boolean found = true;
     181
     182                                        for (int i = 0; i < length; i++) {
     183                                                if (params[i].isPrimitive()) {
     184                                                        Class<?> paramWrapper = primitiveClasses.get(params[i].getName());
     185
     186                                                        if (!paramWrapper.equals(argArray[i])) {
     187                                                                found = false;
     188                                                                break;
     189                                                        }
    188190                                                }
    189191                                        }
    190                                 }
    191                                 if (found) {
    192                                         return method;
     192                                        if (found) {
     193                                                return method;
     194                                        }
    193195                                }
    194196                        }
  • trunk/objectmq/test/calculatorTest/Calculator.java

    r34 r38  
    2121
    2222        @AsyncMethod
    23         public void divideByZero() throws IOException, SerializerException;
     23        public void asyncDivideByZero() throws IOException, SerializerException;
     24
     25        @SyncMethod
     26        public int divideByZero();
    2427
    2528}
  • trunk/objectmq/test/calculatorTest/CalculatorImpl.java

    r34 r38  
    33import java.io.IOException;
    44
    5 import omq.client.annotation.AsyncMethod;
    65import omq.common.broker.Broker;
    76import omq.exception.SerializerException;
     
    1716        private static final long serialVersionUID = 1L;
    1817
     18        @Override
    1919        public int add(int x, int y) {
    2020                return x + y;
    2121        }
    2222
     23        @Override
    2324        public void mult(int x, int y) {
    2425                mult = x * y;
     
    3334        }
    3435
    35         public void divideByZero() throws IOException, SerializerException {
     36        @Override
     37        public void asyncDivideByZero() throws IOException, SerializerException {
    3638                ZeroEvent ze = new ZeroEvent("my zero event", "zero-event");
    3739                Broker.trigger(ze);
     
    4042
    4143        @Override
    42         @AsyncMethod
    4344        public void sendMessage(Message m) {
    4445                System.out.println("Code = "+m.getCode());
    4546                System.out.println("Message = "+m.getMessage());
    4647        }
    47        
    48        
     48
     49        @Override
     50        public int divideByZero() {
     51                int x = 2 / 0;
     52                return x;
     53        }
    4954
    5055}
  • trunk/objectmq/test/calculatorTest/ClientTest.java

    r35 r38  
    2626                env.setProperty(ParameterQueue.SERVER_PORT, "5672");
    2727                env.setProperty(ParameterQueue.DURABLE_QUEUES, "false");
    28                 env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.kryo);
     28                env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
    2929                env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
    3030
     
    8080                remoteCalc.addListener(zL);
    8181
    82                 remoteCalc.divideByZero();
     82                remoteCalc.asyncDivideByZero();
    8383
    8484                Thread.sleep(200);
     
    9090                remoteCalc.sendMessage(m);
    9191        }
     92
     93        @Test(expected = ArithmeticException.class)
     94        public void divideByZero() {
     95                remoteCalc.divideByZero();
     96        }
    9297}
  • trunk/objectmq/test/calculatorTest/ServerTest.java

    r35 r38  
    2020                env.setProperty(ParameterQueue.SERVER_PORT, "5672");
    2121                env.setProperty(ParameterQueue.DURABLE_QUEUES, "true");
    22                 env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.kryo);
     22                env.setProperty(ParameterQueue.SERIALIZER_NAME, Serializer.java);
    2323                env.setProperty(ParameterQueue.ENABLECOMPRESSION, "false");
    2424
Note: See TracChangeset for help on using the changeset viewer.