Java RMI - 2 problemy, program obsługi bazy access mdb

0

Witam

Ma problem z aplikacją napisaną w Java wykorzystującą mechanizm RMI. Otóż o ile serwer uruchamia się prawidłowo o tyle Clinet ma już z tym duże problemy. Client mimo że została stworzona klasa Province nie widzi i przy uruchomieniu wyświetla komunikat:
"java.rmi.NotBoundException: Province"
Nie mogę znaleźć błędu dlatego proszę o pomoc, poniżej przesyłam kod realizujący zadania Clienta:

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ArrayList;
 
public class ProvinceClient {
 
  public static void main(String[] args) {
    try {
      //Get reference to rmi registry server
      Registry registry = LocateRegistry.getRegistry("127.0.0.1");
 
      //Lookup server object
      IRemoteProvince rp = (IRemoteProvince) registry.lookup("Province");
 
      //Save province
      Province bmc = new Province(1, "BMC", "Banteay Meanchey");
      Province bat = new Province(2, "BAT", "Battambang");
      Province kpc = new Province(3, "KPC", "Kampong Cham");
      Province kch = new Province(4, "KCH", "Kampong Cang"); //wrong name
      Province ksp = new Province(5, "KSP", "Kampong Speu");
 
      //Save province
      System.out.println("Saving provinces...");
      rp.save(bmc);
      rp.save(bat);
      rp.save(kpc);
      rp.save(kch);
      rp.save(ksp);
 
      //Update province
      System.out.println("Update Kampong Cang to Kampong Chhang");
      Province updatedKCH = new Province(4, "KCH", "Kampong Chhnang");
      int iRet = rp.update(updatedKCH);
 
      //Display all provinces
      System.out.println("Display all provinces");
      ArrayList arrProv = rp.findAll();
      for (Object p: arrProv) {
        System.out.println(p.toString());
      }
 
      //Delete Kampong Cham
      System.out.println("Delete KPC");
      rp.delete(kpc);
 
      //Display province starts by "Kam"
      System.out.println("Display province starts by \"Kam\"");
      arrProv = rp.findByName("Kam");
      for (Object p: arrProv) {
        System.out.println(p.toString());
      }
 
      //Delete all provinces
      System.out.println("Delete all provinces");
      rp.deleteAll();
 
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

Z góry dziękuje za jakąkolwiek chęć pomocy.

0

A jesteś pewien ze zrobiłeś bind tego obiektu do nazwy Province?

0

tak mi się wydaje, całe to RMI jest dla mnie nowością i nie do końca to rozumiem. Poniżej przesyłam kod severa:

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
 
public class ProvinceServer {
 
  public static void main(String[] args) {
    try {
      //Create and get reference to rmi registry
      Registry registry = LocateRegistry.createRegistry(1132);
 
      //Instantiate server object
      ProvinceObject po = new ProvinceObject();
 
      //Register server object
      registry.rebind("Province", po);
      System.out.println("ProvinceServer is created!!!");
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}
0

problem rozwiązany. W linijce

 Registry registry = LocateRegistry.getRegistry("127.0.0.1"); 

należało zmienić port na ten sam który wykorzystuje serwer Registry registry = LocateRegistry.getRegistry(1132);

mam jednak pytanie odnośnie obsługi:
Czy bazą mdb da się zarządzać przez cmd? aktualnie program wykonuje wszystkie operacje na raz a chciałbym aby można było wybrać poszczególne opcje Create, Update, Delete, Show. Czy ten kod wymaga apletu do wykonania tych operacji?
0

Aplety javy są uruchamiane w przeglądarce, więc to chyba nie to o co Ci chodzi. Jeżeli natomiast chcesz sterować programem z linii poleceń, to polecam cały program uruchomić w cmd, i napisać go tak żeby przyjmował Twoje polecenia.

Najprostsze wyjście byłoby takie, oczywiście lepiej do tego obsługiwania komend byłoby użyć polimorfizmu albo jakiegoś bardziej wyszukanego rozwiązania, ale chciałem żebyś zczaił zasadę.

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
 
public class ProvinceServer {
 
  void init() {
    try {
      //Create and get reference to rmi registry
      Registry registry = LocateRegistry.createRegistry(1132);
 
      //Instantiate server object
      ProvinceObject po = new ProvinceObject();
 
      //Register server object
      registry.rebind("Province", po);
      System.out.println("ProvinceServer is created!!!");

    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public void listen() {
    Scanner scanner = new Scanner(System.in);
    
    while (true) {
       String command = scanner.nextLine();
       switch (command) {
         case 'create':  
           create();
           break;
         case 'delete':  
           delete();
           break;
       }
    }  
  }

  public void create() {
    // etc
  }

  public void dalete() {
    // etc
  }

  public static void main(String[] args) {
    ProvinceServer server = new ProvinceServer();
    server.init();
    server.listen();
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1