2009-05-15 9 views
0

Mon système passe avec succès les objets d'un client à la servlet. Cependant, il est primitif car il a été construit pour répondre à Java 1.1. L'objet de message qu'il passe se compose d'un int (représentant l'un d'environ soixante-dix types) et d'une chaîne de jetons qui doivent être analysés (les jetons peuvent contenir une liste, une liste d'objets, etc.). Pas bon! Donc, je cherche à refactoriser cela en Java 1.5. Utiliser une énumération au lieu d'un int est certainement une amélioration, mais je ne sais pas comment envoyer le reste du message. Créer soixante-dix classes différentes pour représenter chaque type n'est certainement pas la bonne façon de procéder.Java: moyen approprié de passer des messages entre client et servlet?

Des indications sur la façon dont je devrais refactoriser cela?

Répondre

2

Il n'est pas nécessaire de créer une classe différente pour représenter chaque type de message. Vous créez une classe de message avec les propriétés dont vous avez besoin. Quelque chose comme ceci:

public class Message implements Serializable{ 
    private Long id; 
    private String msgText; 
    //other necessary properties 

    public Message(){ 
     this(0, "default message"); 
    } 

    public Message(Long id, String msgText){ 
     setId(id); 
     setMsgText(msgText); 
     //etc 
    } 

    //getters and setters 
} 

Et vous créez ensuite des objets si nécessaire. Par exemple:

Message m1 = new Message(9, "The Eagle has landed"); 
//serialize m1 to server 

Message m2 = new Message(27, "The Wren has landed"); 
//serialize m2 to the server 

et ainsi de suite.

3

Vous pouvez utiliser des objets sérialisés.

Ils sont conçus pour être facilement transmis le long du réseau.

Dans votre situation, vous aurez juste besoin d'une classe 'message' sérialisée. Ensuite, vous pouvez lire et écrire dans un flux.

Here est un tutoriel sur l'utilisation d'objets sérialisés. Il y a beaucoup de choses là-bas.

+0

+1 parce que c'est le bon concept. Malheureusement, sur Java, la plupart des sérialiseurs sont basés sur XML ... – Javier

+1

Java a construit en série qui peut sérialiser des objets réguliers. Pas besoin de XML. – jjnguy

+0

Merci, mais même avec la sérialisation et la désérialisation, il me faudrait encore créer une classe pour chaque type de message envoyé. Fondamentalement, je suppose que la question que j'essaie de poser est de savoir comment envoyer un nombre arbitraire de messages différents sans créer de classe pour chaque nouveau type de message. – Pool

0

Vous pouvez également sérialiser les objets au format XML et revenir aux objets en utilisant xStream.

0

Première question: pourquoi ressentez-vous le besoin de faire des changements? Est-ce parce que le système actuel ne prend pas en charge certaines fonctionnalités que vous envisagez d'ajouter? Ou voulez-vous simplement entrer et nettoyer pour le nettoyage? Si ce dernier point, je suggère fortement de laisser des punaises dormir.

Deuxième question: Je suppose qu'il s'agit d'une applet. Prévoyez-vous d'utiliser un autre frontal? Ou exposer ce serveur comme un service générique? Si non, je reviens à la première question. Si oui, vous voudrez certainement éviter une sérialisation spécifique à une langue.

Si vous envisagez d'exposer en tant que service, il est recommandé de suivre un protocole de service "standard". REST est probablement la charge utile XML POST-ing la plus simple. Vous pouvez aussi faire SOAP, mais j'ai toujours considéré que c'était trop. Ou, vous pourriez aller avec un POST codé par URL standard ... qui devrait être plus facile à implémenter que tout envelopper dans XML.