Java - Por favor Ayuda:MVC con RMI: Problema actualizando las vistas en mi cliente

 
Vista:
Imágen de perfil de Jorge

Por favor Ayuda:MVC con RMI: Problema actualizando las vistas en mi cliente

Publicado por Jorge (1 intervención) el 07/03/2013 18:18:52
Gracias de antemano por ayudarme
Mi problema es el siguiente:
Tengo una implementacion de un MVC utilizando RMI, o sea mi cliente RMI contiene la vista y mis clases remotas el controlador y el modelo.
Mi controlador le envia a la vista que es un JFrame un JPanel para que lo muestre, esto ocurre normalmente pero los componentes del JPanel no ejecutan las acciones de los listeners. He probado tambien haciendo que el JPanel extienda de UnicastRemoteObject para que en vez de serializarse lo que se envie sea un stub pero ocurre los mismo.

En este ejemplo la accion es simplemente escribir un string.
Pero originalmente es una llamada a otro metodo del controlador.
Mi pregunta es: Que estoy haciendo mal, existe una mejor forma de implementar MVC sobre una red?
Ejemplo:

Interfaz del Controlador que esta tanto en el cliente como en el servidor
1
2
3
public interface IController extends Remote{
    public JPanel createNewGame() throws RemoteException;
}


Controlador:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Controller extends UnicastRemoteObject implements IController {
    public Controller() throws RemoteException {
        super();
    }
 
    public static void main(String[] args) {
        try {
            Controller controller = new Controller();
            final Registry registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
            registry.rebind("BoardGamesServer", controller);
        } catch (RemoteException ex) {
            Logger.getLogger(Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    @Override
    public OthelloBoardPanel createNewGame() {
        return new BoardPanel(this);
    }
}


Panel que se envia por RMI
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class OthelloBoardPanel extends JPanel {
    IController controller;
    JButton button;
 
    public OthelloBoardPanel(Controller controller) {
        super();
        this.controller = controller;
        button = new JButton("Accion");
        button.addActionListener(new Accion());
    }
 
    private class Accion implements ActionListener {
        @Override
//Esta es la accion que deberia ejecutarse en la vista pero no ocurre nada
        public void actionPerformed(ActionEvent ae) {
           System.out("Accion Ejecutada");
        }
    }
}


Vista:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class View extends JFrame{
    JPanel mainPanel;
    IController controller;
 
    public View( IController controller) throws HeadlessException {
        super();
        initComponents(controller);
//Inicia las propiedades de la vista que incluye un menu con un boton que llama la clase interna
    }
 
   private class NewGameAction implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent ae){
            try {
//Aqui se adiciona a la vista el panel creado en el controlador
                add(controller.createNewGame());
            } catch (RemoteException ex) {
                Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
 
    public static void main(String[] args) {
        IController controller;
        try {
            final Registry registry = LocateRegistry.getRegistry("127.0.0.1", Registry.REGISTRY_PORT);
            controller = (IController)registry.lookup("BoardGamesServer");
            View boardGamesView = new View(controller);
        } catch (Exception ex) {
            Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex);
        }
   }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder