[VS] Aufgabe 1b) - generelle Probleme mit Java

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

[VS] Aufgabe 1b) - generelle Probleme mit Java
Hi,

wie funktioniert denn das mit der Makefile und Java?
Die Aufgabe lautet:

"Es ist ebenfalls ein Makefile zu erstellen, welches die benötigten Class-Dateien erzeugt. Server bzw. Client sollen sich durch
“Java vs.boardserver” bzw.
“Java vs.boardclient parameter” starten lassen.

Ok, aber

  1. Class-Dateien erzeugen? Ich dachte, ich schreibe den Java-Code in eine Class-Datei, und führe die dann mittels ‘Java [Dateiname]’ aus.

  2. Was bedeutet das ‘vs.’?
    Sorry falls das triviale Fragen sind, aber ausser im 2. Semester habe ich mit Java bis jetzt (in der Form) nicht viel gemacht.

Vielen Dank für Eure Hilfe!!!


Obwohl es durchaus möglich ist manuell direkt den Java-Bytecode in die Class Dateien zu schreiben, schätze ich mal dass du das mit den .java Dateien verwechselst.
D.H. du speicherst den Code in einer .java Datei. Die kompilierst du dann mit javac xyz.java (beachte das c am ende für Compiler), und dann bekommst du eine .class Datei die du mit java xyz ausführen kannst (sofern die Klasse mit der Main-Methode xyz heisst).
Im Makefile benötigst du entsprechend den „javac“ Aufruf.

Die beiden Klassen für Server und Client sollen sich in einem Package names „vs“ befinden. Das kannst du mit der „package“ directive definieren. Genaueres müsste irgendwo in der Java-Dokumentation stehen.


Ok, danke!


Hat zufällig jemand die listen-Methode in der 1b bereits implementiert?
Wenn ja, welches Object übergebt ihr, wenn sich ein Client beim Server registriert? Ein UnicastRemoteObject?


ja hier!

Man erzeugt in der main vom Client mit new eine neue Instanz der Clientklasse. Die Referenz übergibt man an den Server. Die Clientklasse ist aber kein UnicastRemoteObject. Das hat bei mir nur Exceptions gehagelt.
Dafür muss ich aber per java.rmi.server.UnicastRemoteObject.exportObject(Referenz) meine Klasse bekannt machen.

Orientiert hab ich mich an dem Teil - da gibts auch irgendwo gezipten Quellcode zum runterladen: http://www.javaworld.com/javaworld/javaqa/1999-04/05-rmicallback.html


Das hab ich auch so gemacht (hab ich auch von dem ewähnten Artikel abgeschrieben. Allerdings würde mich interessieren warum ich nicht das eigentliche Client-Object übergeben kann , also etwa:

Server.registerCallBack(this);

Gibts da logische Erklärungen dafür?


Also meine theorie ist, dass die Main methode des Clients statisch ist - also ohne eine Instanz der eigentlichen Klasse aufrufbar ist. Wenn man this übergeben will, so gibt das eine Referenz auf die statische Main. Da fehlen aber alle sonstigen Klassenelemente noch. Um die vollwertige Klasse zu übergeben, muss es erst eine Instanz davon geben. Wie gesagt nur eine Theorie.


Hi,
welchen Port sprecht ihr im boardserver beim rebind an?
Welchen sollen wir verwenden?

BoardserverImpl bs = new BoardserverImpl();	

Naming.rebind("rmi://localhost:1099/MessageBoard", bs);

In den Folien stand irgendwas von Port 10412, oder ist das egal?


In der Übung hat das auch einer gefragt und der Übungsleiter meinte, dass es ihm egal is, da wir es eh vorführen sollen. Automatisierte Scripten wird es nicht geben.