/ / Escribiendo una buena interfaz para separar de una tecnología en particular ... ¿qué hacer con las excepciones? - java, interfaz, amazon-web-services, desacoplamiento

Escribiendo una buena interfaz para separar de una tecnología particular ... ¿qué hacer con las excepciones? - Java, interfaz, servicios web de amazon, desacoplamiento

Quiero escribir una interfaz Java para separarDe una tecnología en particular, ¿cuál es la mejor manera de enviar excepciones? Digamos que la tecnología de la que quiero separar es Amazon SQS. Amazon SQS es esencialmente un servicio de colas y quiero ser lo más flexible posible y quiero tener la opción de sustituir fácilmente SQS con RabbitMQ u otro servicio de colas.

Esto es lo que tengo hasta ahora:

public interface QueueService {

// URL of the Queue Server
public void setURL(String url);
public String getURL();

public Msg getMessage() throws QueueServiceException;
public void deleteMessage(String messageId) throws QueueServiceException;

}

La implementación SQS de getMessage es probablementebastante sencillo, solo utiliza el Amazon AWS Java SDK y esencialmente el método receiveMessage de la clase AmazonSQS. Aquí está la firma de este método en el SDK de Java de AWS:

  public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest)  throws AmazonServiceException, AmazonClientException;

Ahora mi pregunta es ¿qué hago con estosexcepciones en una implementación de la interfaz de QueueService ... ¿simplemente capturo estas excepciones (que son específicas de una tecnología en particular) y las vuelvo a lanzar como QueueServiceException?

try {
messages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages()
} catch(AmazonServiceException ase) {
throw new QueueServiceException();
}

QueueServiceException es:

public class QueueServiceException extends Exception {

public QueueServiceException (String message){
super(message);
}

public QueueServiceException(String message, Throwable cause){
super(message, cause);

}

}

Alguna idea ?

Saludos!

Respuestas

2 para la respuesta № 1

Vas a tener que hacer envoltura de excepción. La primavera hace esto. Básicamente, detecte la excepción específica del proveedor y vuelva a realizarla como su excepción.