Hallo,
ich versuche eine reine RMI-Anwendung (kein EJB, kein Webservice, etc.) auf Jboss 4.0 zum Laufen zu kriegen. Irgendwie wills nicht klappen.
Ich benutze Eclipse WTP 3.x...
Die Serviceklasse beinhaltet eine Start-Methode, welche den Service in der RMI-Registry registrieren soll. Dies funktioniert auch, wenn ich über das RMI-Plugin die lokale RMI-Registry starte (ist die Standard-RMI Registry von Sun).
Der Client holt sich dann den Service über rmi://localhost:1099/ppsTestService
und der RMI-Inspector des Plugins zeigt den installierten Service auf localhost:1099 auch an.
Versuche ich aber den Service auf jboss zum laufen zu bekommen, so gelingt dies nicht.
Ich habe nun versucht den Service über JNDI zu binden. Das lookup() scheint ihn auch zu finden, aber wenn ich dann eine Methode aufrufen will, dannn bekomme ich eine Excedption: connection refused.
Vermutlich muss ich die RMI-Serviceklasse ganz anders deployen. Kann mir da jemand einen Tip geben?
Hier der Servercode, der mit der RMI-Registry funktioniert:
Und hier der Client dazu:
Meine Frage: Wie bekomme ich das unter Jboss ans laufen?
Starte ich den JBoss, und versuche die Registrierung auf den gleichen Weg, erhalte ich die folgende Fehlermeldung auf der Console:
Was muss ich tun, um diese Klasse unter JBoss korrekt zu deployen und zu registrieren?
Vielen Dank im Voraus,
Mike
ich versuche eine reine RMI-Anwendung (kein EJB, kein Webservice, etc.) auf Jboss 4.0 zum Laufen zu kriegen. Irgendwie wills nicht klappen.
Ich benutze Eclipse WTP 3.x...
Die Serviceklasse beinhaltet eine Start-Methode, welche den Service in der RMI-Registry registrieren soll. Dies funktioniert auch, wenn ich über das RMI-Plugin die lokale RMI-Registry starte (ist die Standard-RMI Registry von Sun).
Der Client holt sich dann den Service über rmi://localhost:1099/ppsTestService
und der RMI-Inspector des Plugins zeigt den installierten Service auf localhost:1099 auch an.
Versuche ich aber den Service auf jboss zum laufen zu bekommen, so gelingt dies nicht.
Ich habe nun versucht den Service über JNDI zu binden. Das lookup() scheint ihn auch zu finden, aber wenn ich dann eine Methode aufrufen will, dannn bekomme ich eine Excedption: connection refused.
Vermutlich muss ich die RMI-Serviceklasse ganz anders deployen. Kann mir da jemand einen Tip geben?
Hier der Servercode, der mit der RMI-Registry funktioniert:
Code:
public class PPSTestServiceImpl
implements PPSTestService
{
public PPSTestServiceImpl()
{
}
/**
* Methode registriert diesen Service unter dem Namen ppsTestService am RMI-Server
*
*/
private void start() {
try {
PPSTestService serviceStub = (PPSTestService) UnicastRemoteObject.exportObject(this);
Registry registry = LocateRegistry.getRegistry();
registry.rebind("ppsTestService", serviceStub);
} catch (RemoteException e) {
// TODO Sinnvolle Exception ausgeben
e.printStackTrace();
}
}
/**
* Methode startet den Testservice, indem es die Registrierungsmethode des Service aufruft
* @param args
*/
public static void main(String[] args) {
new PPSTestServiceImpl().start();
}
/**
* Testimplementierung einer Serviceroutine, welche die aktuelle Uhrzeit liefert
*/
public String getTime()
throws RemoteException
{
GregorianCalendar cal = new GregorianCalendar();
StringBuffer sb = new StringBuffer();
sb.append(cal.get(Calendar.HOUR_OF_DAY));
sb.append(":" + cal.get(Calendar.MINUTE));
sb.append(":" + cal.get(Calendar.SECOND));
return sb.toString();
}
}
Und hier der Client dazu:
Code:
public class PPSTestServiceClient
{
public static void main(String[] args)
{
try{
String host = "localhost";
String port = "1099";
String srv = "ppsTestService";
String url = "rmi://" + host + ":" + port + "/" + srv;
System.out.println("Looking-up PPSTestService " + url);
PPSTestService ts = (PPSTestService)Naming.lookup(url);
System.out.println(" Server time is " + ts.getTime());
} catch (Exception e) {
System.err.println(e.toString());
System.exit(1);
}
}
Meine Frage: Wie bekomme ich das unter Jboss ans laufen?
Starte ich den JBoss, und versuche die Registrierung auf den gleichen Weg, erhalte ich die folgende Fehlermeldung auf der Console:
Code:
java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is:
java.net.SocketException: Software caused connection abort: recv failed
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:273)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:306)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at de.pbs.testautomat.impl.PPSTestServiceImpl.start(PPSTestServiceImpl.java:60)
at de.pbs.testautomat.impl.PPSTestServiceImpl.main(PPSTestServiceImpl.java:72)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at net.genady.rmi.logger.Runner.main(Runner.java:137)
Caused by: java.net.SocketException: Software caused connection abort: recv failed
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
at java.io.DataInputStream.readByte(DataInputStream.java:241)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:215)
... 10 more
Was muss ich tun, um diese Klasse unter JBoss korrekt zu deployen und zu registrieren?
Vielen Dank im Voraus,
Mike