Rmi uruchomienie

0
 
package test.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
       public void hello() throws RemoteException;
}


package test.rmi;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Serwer extends UnicastRemoteObject implements Hello {

	public Serwer() throws RemoteException {
	}

	public void hello() throws RemoteException {
		System.out.println("Witaj");
	}

	public static void main(String[] args) {
		try {
			Serwer serwer = new Serwer();
			Naming.bind("hello", serwer);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

package test.rmi;

import java.rmi.Naming;

public class Klient {

	public static void main(String[] args) {
		try {
			Hello hello = (Hello) Naming.lookup("hello");
                  hello.hello();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

Jeśli brak pakietu (brak package test.rmi;) i pliki .java z tymi trzema klasami dam na dysk C. I nie są w żadnym folderze.
Następnie w wierszu poleceń (cmd) korzystam z następujących poleceń:
javac *.java
rmic -v1.2 Serwer
start rmiregistry
start java Serwer
start java Klient

I wszystko działa jak chciałem.

A jak to samo robić jak jest pakiet test.rmi i pliki znajdują się na dysku C w folderze C:\test\rmi?

Prubowałem klepać jakieś komendy:
start rmiregistry
java -classpath "C:\test.rmi"
start java -Djava.rmi.server.codebase=file:/C:/test/rmi/test.rmi.Serwer

I nic. Nawet namiastki nie mogę wygenerować tą komendą rmic -v1.2. Pewnie źle komendy wklepuje. Proszę o pomoc jak to poprawnie ustawić. Proszę o przykładowe komedy.

0

rmic od javy 1.4 nie jest potrzebny bo stuby generowane są w locie

0

Dzięki przyda mi się ta informacja jako ciekawostka. A jak ustawić ten codebase pod ten przykład by zadziałało? To mnie najbardziej ciekawi :D.

0

Uruchom rmiregistry z poziomu katalogu gdzie masz skomilowane pliki (jakiś bin czy coś)

0

Z uruchomieniem rmiregistry nie mam problemu. A z uruchomieniem pliku serwera jak jest w pakieci test.rmi i w folderze na dysku C:/test.rmi. Normalnie jak nie ma tych folderów i pakietu to działa. Ale teraz:

Jak wpisuje start java Serwer to pojawia się
Exception in thread "main" java.lang.NoClassDefFoundError: Serwer... i tak dalej.

A jak
java test.rmi.Serwer to
Error: Could not find or load main class test.rmi.Serwer

Trzeba ten codebase (java.rmi.server.codebase) odpowiednio ustawić. Chodzi o to, że rmiregistry nie wie gdzie jest bytecode, z którego ma korzystać i trzeba mu to jakoś pokazać ustawiając tą rzecz. Ale nie wiem jak te ścieżki poustawiać. Męczę się z tym i męczę i dalej nic. Dlatego proszę o pomoc :).

1

aaaa bo ty nie umiesz Javy po prostu. To wiele wyjaśnia. Po pierwsze struktura katalogów dla pakietów to kolejne foldery a nie foldery z kropką w nazwie. Po drugie jeśli masz klasę Serwer w pakiecje jestem.leniem czyli na dysku masz
/../bin/jestem/leniem/Serwer.class
to z poziomu bin powinieneś wywołać
java jestem.leniem.Serwer

0

Skąd miałem wiedzieć, że to jak przenosimy na inną partycje to trzeba przenosić z katalogiem bin wraz z jego zawartością? I skąd miałem wiedzieć, że z poziomu tego bin odpalić rmiregistry i resztę? Ale to trochę dziwne bo jak nie ma pakietów w środku plików javy to nie trzeba żadnego katalogu bin i innych w środku niego mieć by to RMI odpalić. Aha i leniem też jestem, ale nie można wszystkiego wiedzieć i czasem takie drobne rzeczy decydują o sukcesie ;). Dzięki.

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