RMI Problem beim shutdown von verteilter CORBA-Anwendung

dermorti

Mitglied
Moin moin,

ich habe ein Problem in meiner verteilten CORBA-Anwendung ...
Ich habe drei Projekte, ein Server, ein Monitor und einen Client.

Soweit rennt auch alles, aber ich habe einen Fehler, wenn ich vom Client das quit auf meinem Server aufrufe und der ORB geschlossen wird.

Im Groben rennt das Programm folgendermaßen:

Der Server wird gestartet und meldet ein Objekt am Namensdienst an, danach blockiert der Aufruf
Java:
orb.run()
bis der ORB geschlossen wird mittels
Java:
orb.shutdown(false/true)
.

Anschließend werden ein oder mehrere Monitore gestartet, die sich am Server anmelden und von da an nur Log-Nachrichten auf der Konsole ausgeben.

Der Client kann auf dem Server Methoden aufrufen und allerlei Dinge tun. Unter anderem eben die quit-Methode des Servers aufrufen. Der Server ruft daraufhin auf allen angemeldeten Monitoren die quit-Methode auf und danach erfolgt ein unbind beim NameServer und danach ein shutdown des ORBs.

Bei meiner Lösung gibt es nun immer mal wieder eine CORBA-Exception namens "BAD_INV_ORDER", dabei ist es egal, ob ich
Java:
orb.shutdown(true)
oder
Java:
orb.shutdown(false)
nutze. Bei true kommt es hin und wieder vor, dass der Server dann gar nicht mehr beendet wird und er beim shutdown stehen bleibt. Allerdings funktioniert es auch häufiger, ohne dass eine Exception geworfen wird, ich vermute, dass es mit der Ausführungsgeschwindigkeit/Reihenfolge des Threads (der den orb.shutdown() macht) zusammenhängen könnte.

Versucht habe ich, den shutdown durch einen extra Thread durchzuführen, weil der Anwendung ja sonst die CORBA-Verbindung beim AUfruf entzogen wird.

hier mal die relevanten Code-Ausschnitte:


quit()-Methode des Servers, die vom Client aus aufgerufen wird.
Java:
	public void quit() {
		System.out.println("Server>Client quitted server");
		System.out.print("Server>quitting all monitors...");
		
		removeAllMonitors();
		
		System.out.print("OK\nServer>unbinding...");
		
		try {
			ncRef.unbind(path);
		} catch (NotFound e) {
			e.printStackTrace();
		} catch (CannotProceed e) {
			e.printStackTrace();
		} catch (InvalidName e) {
			e.printStackTrace();
		}
		
		System.out.print("OK\nServer>shutting down ORB...");
		
		orb.shutdown(false);
		
		System.out.println("OK\nServer>shutdown was successful...");
	}

quit()-Methode des Monitors
Java:
	public void quit() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				System.out.println("Monitor>quit");
				orb.shutdown(false);
			}
		}).start();
	}

removeAllMonitors();
Java:
	public void removeAllMonitors() {
		for (Iterator<Monitor> iterator = lagerMonitore.iterator(); iterator.hasNext();) {
			Monitor moni = iterator.next();
			try {
				moni.quit();
			} catch (Exception e) {
				System.out.println("Monitor.quit() threw: " + e.getMessage());
			} finally {
				iterator.remove();
			}
		}
	}


der Client macht einfach nur einen simplen Aufruf auf den Servant, also der Methode quit() auf dem Server.
Java:
	private void quit() {
		lagerRef.quit();
	}

Ich habe bereits versucht, beim Server ebenfalls das orb.shutdown() in einen eigenen Thread zu legen, wie bei der Monitor quit()-Methode. Mein Problem behebt dies dennoch nicht.

Entweder geht alles glatt ohne Fehler, oder es knallt im Monitor die "BAD_INV_ORDER" Exception oder sie kommt im Server. Beim Client kommt maximal eine CORBA-Comm-Exception.

Wer kann mir bei diesem Problem helfen oder mir einen Hinweis geben, wie ich von meinem Client aus den Server so beenden kann, also das blocken von orb.run() so durch orb.shutdown() beenden, dass dieser alle Monitore beenden kann und dann sich selbst, ohne das ich eine BAD_INV_ORDER Exception bekomme oder der Client eine Corba-Comm-Exception :(


PS: Interessant ist noch, dass unter Windows auf der Konsole alles prima läuft, die Fehler sind jetzt beim Testen unter Linux aufgetreten (alles jre1.6) ...
 
Zuletzt bearbeitet:

dermorti

Mitglied
Moin,

nein einen Thread will ich an der Stelle nicht starten.

orb.run() blockiert nur den laufenden Thread solange, bis orb.shutdown() das Blockieren aufhebt.
Gehört zum ORB Objekt zur Kommunikation mit Namensdienst usw.
 

turtle

Top Contributor
Soweit rennt auch alles, aber ich habe einen Fehler, wenn ich vom Client das quit auf meinem Server aufrufe und der ORB geschlossen wird.

Selbst wenn alles laufen würde wie Du meint, hinterfrage ich, warum ein Client den Server beenden möchte? Danach gibt es ja keine Möglichkeit mehr den Server wieder zu starten und zumal sich für andere Clients es sich merkwürdig "anfühlt" wenn der Server plötzlich nicht mehr antwortet weil heruntergefahren ob absichtlich oder unabsichtlich.
 

dermorti

Mitglied
Naja ob das merkwürdig ist oder nicht, ist wohl Geschmackssache, ich finde es hilfreich die Möglichkeit zu haben, einen Server aus der Ferne zu beenden. Gut das mit dem Starten ist so eine Sache ...
In meinem Fall ist dies aber auch egal, es ist eine Übungsaufgabe ...
Der Prof will ein "verteiltes" Lager haben, auf pc a rennt namensdienst und das Lager, auf pc b rennt der Monitor, der alles protokolliert, was mit dem Lager zu tun hat, auf pc c rennt dann der Client. Der wird auch nur mit ein paar Parametern aufgerufen, was er tun soll und beendet sich danach eh wieder, der rennt nicht dauerhaft.
Der Prog möchte nun gerne, dass man aus der Ferne das Lager (Server) beenden kann. Dies geschieht durch den clientseitigen Aufruf der quit() Methode auf dem Lager. In dieser Methode ruft nun ebenfalls das Lager auf allen verbundenen Monitoren ebenfalls deren quit() Methode auf. Anschließend eben shutdown des Orbs.
Und das Ganze soll ohne CORBA Fehler passieren. Probleme kann es eben geben beim orb.shutdown() im Monitor und Server, weil dann natürlich die Kommunikation zwischen Client/Server und ggf. den Monitoren schon weg ist ...
Das ist ja gerade das Problem was ich beheben muss ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
M Problem beim Datenempfang Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
J Problem beim Senden von File Netzwerkprogrammierung 4
V Problem beim Senden von Dateien Netzwerkprogrammierung 4
P problem beim schließen eines Streams Netzwerkprogrammierung 6
C Session Problem beim Zugriff auf Webseiten Netzwerkprogrammierung 3
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben