RMI mit Generic Method

Hellboy256

Mitglied
Also ich hab zum test eine simple RMI Anwendung geschrieben die auch perfekt funktioniert hat. Jetzt hab ich zum Test eine zusaetzliche Generische Methode zum Server hinzugefuegt und jetzt krieg ich auf einmal eine ganze Reihen Fehlermeldungen:
Java:
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Operations extends Remote {
    <T> int TestGeneric(T op, T param1, T param2);
}
Java:
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
	
public class Server implements Operations {
	
    public Server() {}
	public <T> int TestGeneric(T op, T param1, T param2) {
		return 0;
	}
    
    public static void main(String args[]) {
		try {
		    Server server = new Server();
		    Operations stub = (Operations) UnicastRemoteObject.exportObject(server, 2200);
	
		    // Bind the stub of the remote object in the registry
		    Registry registry = LocateRegistry.getRegistry();
		    registry.bind("Test", stub);
	
		    System.out.println("Server ready");
		} catch (Exception e) {
		    System.out.println("Server error: " + e.toString());
		    e.printStackTrace();
		}
    }
}

Hier die Fehlermeldung:
Code:
java Server 
Server error: java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is: 
	java.lang.IllegalArgumentException: illegal remote method encountered: public abstract int Operations.TestGeneric(java.lang.Object,java.lang.Object,java.lang.Object)
java.rmi.server.ExportException: remote object implements illegal remote interface; nested exception is: 
	java.lang.IllegalArgumentException: illegal remote method encountered: public abstract int Operations.TestGeneric(java.lang.Object,java.lang.Object,java.lang.Object)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:198)
	at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:310)
	at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:252)
	at Server.main(Server.java:18)
Caused by: java.lang.IllegalArgumentException: illegal remote method encountered: public abstract int Operations.TestGeneric(java.lang.Object,java.lang.Object,java.lang.Object)
	at sun.rmi.server.Util.checkMethod(Util.java:262)
	at sun.rmi.server.Util.getRemoteInterfaces(Util.java:241)
	at sun.rmi.server.Util.getRemoteInterfaces(Util.java:211)
	at sun.rmi.server.Util.createProxy(Util.java:144)
	at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:196)
	... 3 more
 

irgendjemand

Top Contributor
weil

Java:
<T> int

auch NICHT geht ... da "<T>" ja für "TYPE" steht ... wenn dann also so

Java:
public <T> testGeneric

das das überhaupt compiled wundert mich ...
 
S

SlaterB

Gast
also z.B. folgendes funktioniert und ergibt einigermaßen Sinn
Java:
public class Test {
    public static void main(final String[] args) {
        Plus p = new Plus();
        System.out.println(p.calc(4, 5));
    }
}

class Plus  implements Operation {
    public <T extends Number>int calc(T a, T b)  {
        return a.intValue() + b.intValue();
    }
}

interface Operation  extends Remote {
    <T extends Number>int calc(T a, T b);
}

vielleicht einfach auf Generics in Remote verzichten?
man kann ja Object als Parameter verwenden und im Client einen Wrapper mit generischen Aufbau drumherumschließen,
schön sicher nicht..,
im Internet zu Generics bei RMI keine Beispiele zu finden? habe selber auch nur ganz kurz geschaut
 
Zuletzt bearbeitet von einem Moderator:

fastjack

Top Contributor
Natürlich geht das

Java:
public <T> int TestGeneric(T op, T param1, T param2)

T definiert nur den Typ von op, param1 und param2. Warum soll das denn nicht gehen?
 

Hellboy256

Mitglied
Der return Type ist doch
Java:
int
Leider wuerd ich gern Generische Parameter uebergeben, aber ich werde aus der Exception einfach nicht schlau...
 

Joew0815

Bekanntes Mitglied
versuch mal

Java:
import java.rmi.Remote;
import java.rmi.RemoteException;
 
public interface Operations extends Remote {
    <T> int TestGeneric(T op, T param1, T param2) throws RemoteException;
}
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben