Avatar billede martinm Nybegynder
21. maj 2003 - 16:49 Der er 6 kommentarer og
1 løsning

rmic - stubgenerering

Hej xperter!

Jeg har kodet fire klasser: RMIClient (behandler noget data) og RMIInterface(som arver fra rmi.Remote).

Disse to .java filer og deres classes ligger i et bibliotek, der hedder ..../Client

Dernæst er der to andre klasser, der ligger i ../Server ved navn RMIImpl og RMIServer(med main).

Men når jeg stiller mig i ../Server og kører min bat-fil bliver outputtet:

error: File \server\RMIImpl.class does not contain type RMIImpl as expected, but type min.pakke
.subpakke.server.RMIImpl. Please remove the file, or make sure it appears in the correct subd
irectory of the class path.
error: Class RMIImpl not found.

Hvad gør jeg?
Avatar billede soreno Praktikant
21. maj 2003 - 16:54 #1
Har du ikke også lavet et server interface ?
Avatar billede soreno Praktikant
21. maj 2003 - 16:56 #2
Men du skriver bare:
rmic RMIServer
Avatar billede arne_v Ekspert
21. maj 2003 - 17:02 #3
Prøv med:

rmic -classpath rod-dir-for-pakker min.pakke.subpakke.server.RMIImpl

(argumentet til rmic er klasse navn ikke fil navn)
Avatar billede martinm Nybegynder
21. maj 2003 - 17:02 #4
I serverpakken har jeg:

public class RMIImpl extends UnicastRemoteObject implements RMIInterface {
...
}
public class RMIServer {
    public static void main( String[] argv ) {....}
}

Og i client pakken:


import com.bea.document.IDocument;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.UnknownHostException;

public class RMIClient {

    public IDocument call( IDocument inputDoc ) {

        String serverName = null;
        IDocument outputDoc = null;
        System.setSecurityManager( new RMISecurityManager() );
        try {
            serverName = "127.0.0.1";
            System.out.println( "Servername: " + java.net.InetAddress.getLocalHost().getHostName() );
            try {
                //bind server object to object in client
                RMIInterface myServerObject = ( RMIInterface ) Naming.lookup( "rmi://" + serverName + "/RMIImpl instance" );
                //invoke method on server object
                outputDoc = myServerObject.execute( inputDoc );
                System.out.println( "XML " + outputDoc.toXML() );
            }
            catch ( Exception e ) {
                System.out.println( "Exception occured: " + "\n" );
                e.printStackTrace();
            }
        }
        catch ( UnknownHostException e ) {
            e.printStackTrace();  //To change body of catch statement use Options | File Templates.
        }
        return outputDoc;
    }
}

import com.bea.document.IDocument;

public interface RMIInterface extends java.rmi.Remote {
    public IDocument execute(IDocument iDoc) throws java.rmi.RemoteException;
}
Avatar billede martinm Nybegynder
21. maj 2003 - 17:07 #5
arne >> Det hjalp, men nu brokker den sig over BEAs IDocument, Class IDocument not found. Skal der en reference i classpath til den jar, hvor den ligger i?
Avatar billede arne_v Ekspert
21. maj 2003 - 17:11 #6
Prøv også at put den jar i classpath.
Avatar billede martinm Nybegynder
21. maj 2003 - 17:20 #7
Great!

rmic -classpath 'roden';C:\bea\lib\wlicommon.jar min.pakke.subpakke.server.RMIImpl

Det virkede!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester