Exception javax.naming.CommunicationException

Also nach meinem Verständnis müsste RMI wie folgt ablaufen:

1.
Der Server registriert ein remote-Objekt, bounded zu einem Namen
2.
Der Client macht einen naming-lookup-Aufruf
3.
Die RMI-Registry bringt eine Instanz von dem remote-Objekt zurück
4.
Der Client macht einen request auf die Klasse der codebase des Servers
5.
Der HTTP-Server bringt das remote-Objekt zum Client zurück

Das Problem tritt wohl beim Punkt 2. auf.

Kann man da irgendwie näher in diesem Prozessablauf 'reinhorchen'?
 
Der Swing-Client läuft fehlerfrei auf x-beliebigen Windows-Maschinen (nur jre 1.6.0 installiert und Netzwerkkontakt zum JBoss der Vista-Maschine).

Auf der Debian-Maschine wird eine Exception geworfen, und zwar hier:

initial.lookup("project_projectQ");

Die Exception lautet:
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: project.query.projectQHome]

Die project.query.projectQHome ist ein Interface in einer project.ear, die auf dem JBoss (der Vista-Maschine) deployed ist.

Code:
package project.query; 
public interface projectQHome extends javax.ejb.EJBHome { 
    public projectQ create() throws java.rmi.RemoteException, javax.ejb.CreateException; 
}


Wenn dieses Interface in der .jar-Datei des Swing-Client eingebunden wird, funktioniert der Aufruf auch auf der Debian-Maschine!!

Warum funktioniert das Einbinden des Interfaces project.query.projectQHome aus der project.ear des JBoss bei der Debian-Maschine nicht? Laufen da Threads, die die Kommunikation bzw. den Download des Interfaces verpassen?
 
Ich glaube, ich bin der Lösung nahe.

Ist das Interface project.query.ProjectQHome in der .jar-Datei des Swing-Client eingebunden, werden die Ports 2001,2000 und 4444 genutzt.

Ist dieses Interface nicht eingebunden, werden die Ports 2001,2000,4444 und 8083 genutzt.


Beim Starten des JBoss wird folgendes protokolliert:

08:47:05,244 INFO [WebService] Using RMI server codebase: http://MAINSERV:8083
08:47:05,986 INFO [NamingService] Started jndi bootstrap jnpPort=2001, rmiPort=2000, backlog=50, bindAddress=/192.168.1.2, Client SocketFactory=null, Server SocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076


Ausgerechnet der Webservice Using RMI server codebase 8083 hat hier die Einstellung auf MAINSERV. MAINSERV ist der Computername der Vista-Maschine.

Meiner Meinung nach ist das die Ursache für die CommunicationException, da für alle Windows-Maschinen im lokalen Netzwerk der Computername 'MAINSERV' der Vista-Maschine erreichbar ist, für alle anderen nicht!!

Hab schon bei der run.bat -b192.168.1.2 gesetzt, trotzdem holt sich der JBoss den Computernamen.

Weiß jemand, wo man hier eine Einstellung für den Port 8083 vornehmen kann, um die IP-Adresse 192.168.1.2 zu nutzen?
 
Ich habe versucht, die codebase properties für die ran.bat des JBoss zu ändern.
Die Änderungen wurden laut JBoss-Protokoll für den WebService auch angenommen, z.B.:

-Djava.rmi.server.codebase=http://192.168.1.2/
-Djava.rmi.server.codebase=http://192.168.1.2:8083/

Scheint vielleicht eine Möglichkeit zu sein, aber so funktioniert das nicht,
denn hier übergebe ich wohl die falschen Daten.

Die lokalen Windows-Maschinen werfen dann eine Exception, so wie vorher bei der Debian-Maschine:
javax.naming.CommunicationException [Root exception is java.lang.ClassNotFoundException: project.query.ProjectQHome]
 
Zurück