# RMI mit NTFS



## weljo (7. Mrz 2010)

Hi leute hab ein komisches problem ... und zwar exportiere ich 2 Objecte mit rmi (1x admin und 1x user) diese werden von 2 unabhängigen programmen verwendet. Bisher hat das alles auch wunderbar funktioniert bis ich es auf eine andere partiton geschmissen hab die auf NTFS formatiert ist(vorher wars FAT32). Auf der NTFS partition läuft nun nur mer das interface das als erster exportiert wurde und beim 2. kommt der fehler. 

so exportiere ich die objekte:
[JAVA=42]
private void startRMI() throws RemoteException //TODO
	{		
		try
		{
			Registry registry = LocateRegistry.createRegistry(port);
	        RemoteUserIf user = new User();
	        RemoteUserIf stubU= (RemoteUserIf) UnicastRemoteObject.exportObject(user, port);
	        RemoteServer.setLog(System.out);
	        registry.rebind("PPAU", stubU);

	        RemoteAdminIf server = new Admin();
	        RemoteAdminIf stubA= (RemoteAdminIf) UnicastRemoteObject.exportObject(server, port);
	        RemoteServer.setLog(System.out);
	        registry.rebind("PPAA", stubA);

			frame.addLine("RMI Startup Successful On Port " + port);    
		}catch(ExportException e)
		{
			port++;
			startRMI();
		}   
	}
[/code]

so ruf ich sie auf 
1.
[JAVA=42]

	RemoteUserIf user = (RemoteUserIf) LocateRegistry.getRegistry(ip, port).lookup("PPAU");
[/code]

2.
[JAVA=42]
	RemoteAdminIf admin = (RemoteAdminIf) LocateRegistry.getRegistry(ip, port).lookup("PPAA");
[/code]

Und das ist die exception die ich unter ntfs bekomm jedoch unter fat32 nicht 
[JAVA=42]
java.rmi.NoSuchObjectException: no such object in table
[/code]

Hat da wer eine lösung parat???


----------



## tuxedo (8. Mrz 2010)

Öhm, RMI ist das Dateisystem wurscht. Das muss an etwas anderem liegen. Sehe bisher allerdings in dem Codefragmenten keinen Fehler.

Die Exception besagt ja "nur" dass das gesuchte Objekt nicht in der Registry bekannt ist.

Vllt. doofe frage, aber: Kann es sein dass dein Lookup hier zu früh getriggert wird? Also zu einem Zeitpunkt zu dem das gesuchte Objekt noch nicht registriert ist?!


----------



## Sunbird (10. Mrz 2010)

Das ist oft ein Zeichen dafür das der GC dein Objekt bereits beseitigt hat wenn der Aufruf kommt.

Ich habs mit ner statischen(static) Referenz auf das Objekt gelöst.


----------



## tuxedo (10. Mrz 2010)

Wie kann denn der GC ein in der Registry gebundenes Objekt "einfach so" abräumen? Das sollte doch nicht einafch so möglich sein...

- Alex


----------



## weljo (10. Mrz 2010)

sollte eigentlich nicht sein dass ich zu frü abfrage, da ich das manuell mach. 

Dachte natürlich auch dass es nichts mit dem dateisystem zu tun hat, aber irgendwie tritt der fehler nur unter ntfs auf

werds mal mit der statischen refernez versuchen obwohl mir das nicht wirklich sinvoll vorkommt.


----------



## Sunbird (10. Mrz 2010)

Wie gesagt, bei mir hat es geholfen.

Bin durch den Thread hier darauf aufmerksam geworden.
Remote Method Invocation (RMI) - java.rmi.NoSuchObjectException: no such object in table


----------



## tuxedo (10. Mrz 2010)

Naja, es wird da zwar empfohlen eine statische Referenz zu erstellen, doch letzten endes ist denke ich das hier der ausschlaggebende Punkt:



> Thanks to ejp. His suggestion solved my trouble.
> The actual object (which has been referred to by a stub) was GC-ed in a short time after creation, less than minute with default JVM settings. *I moved the reference to the actual object to the outer namespace of main method, that kept reference intact.*



Hab auch shcon viel mit RMI (vor meiner SIMON Zeit) gemacht. Aber mein RMI Server Objekt musste ich nie statisch machen. Allerdings hab ich auch nicht alles in der 
	
	
	
	





```
main()
```
 Methode abgehandelt. Von daher  bin ich deswegen wohl noch nicht in diese "Falle" getappt.

Auf der anderen Seite finde ich es schon _strange _dass RMI hier gebundene Objekte überhaupt abräumt. Ich hätte jetzt erwartet dass das solange am leben bleibt wie es gebunden ist, sprich, bis ich die Bindung auflöse oder die Registry terminiere.

- Alex


----------



## Sunbird (10. Mrz 2010)

Da gebe ich dir Recht.

Ich hab übrigens gerade erst von deinem SIMON Projekt erfahren und kurz überflogen.

Das spricht mich sehr an. Ich glaube ich werd daheim mal versuchen meine Firmenanwendung mit SIMON zu basteln.

Ich bin auch noch in den Anfangsschuhen was Sockets und RMI betrifft aber das reizt mich schon sehr.

Vielen Dank für deine Arbeit.


----------



## weljo (10. Mrz 2010)

hab simon auch schon gesehn aber kann es wegen der lizenzierung glab ich nicht verwenden und muss deshalb wohl mit rmi klarkommen


----------



## tuxedo (10. Mrz 2010)

Für Privatzwecke geht das ja mit der GPL in der Regel. Für kommerzielle zwecke ist GPL meistens hinderlich. Aber wer mit seiner Software Geld verdient, kann mir ja auch ein bisschen (viel mehr kostet die propritäre Lizenz nicht) auch was davon abgeben


----------



## weljo (10. Mrz 2010)

Das steht dir auf alle fälle zu aber ich arbeite gerade an einer Diplomarbeit(HTL nicht UNI) mit zusammenarbeit einer firma. Die wollen nichts zahlen (bis auf die minimalen 350€ ca 1€/h) und den source code auch behalten ... zeimlich blöd gelaufen für mich, aber ich will nurnoch die schule abschließen und dann sieht mich keine große firma mehr


----------

