# RMI & Mysql -> Fehler bei der Compilierung



## Bud (6. Jan 2012)

Hallo Leute! 

Ich habe ein RMI-Testprogramm, das *ohne mysql wunderbar funktioniert*. Folgende Dateien gehören dazu:

Server:
SampleServer.java (interface)
SampleServerImpl.java

Client:
SampleServer.java (interface)
SampleClient.java


-- So und dann habe ich das ganze um eine mysql-Anbinung mittels *jdbc erweitert*. Wenn ich aber auf dem Server die Implementierung compilieren möchte, bekomme ich folgende Fehlermeldung:



> root@vps:/home/admin/rmi# javac -classpath ./mysql-connector-java-5.1.18 SampleServerImpl.java
> SampleServerImpl.java:12: cannot find symbol
> symbol: class SampleServer
> implements SampleServer
> ...



Und so sieht der Quelltext aus:


```
//-----------------------------------------------------------
// File: SampleServerImpl.java
//-----------------------------------------------------------

import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.sql.*;


public class SampleServerImpl extends UnicastRemoteObject
                             implements SampleServer
{
  SampleServerImpl() throws RemoteException
  {
     super();
  }

  public int sum(int a,int b) throws RemoteException
  {
     return a + b;
  }

 public String sessionid(String user, String pw) throws RemoteException
 {
	String Ausgabe="";
		
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance(); // Klaeren, was passiert hier?
			Connection con=DriverManager.getConnection("jdbc:mysql://domain.de/database", "user", "pw");
			Statement stmt = con.createStatement();		// Statement initiieren	
			
			ResultSet rs=stmt.executeQuery("Select * from benutzer"); // Statement an Tabelle "benutzer" ausgefuehrt -> Alle anzeigen/speichern in "rs"			
			
			while (rs.next()) 
			{ 
				Ausgabe=Ausgabe+rs.getString("email")+" "+ rs.getString(4);
			}	
		} catch (Exception e){System.out.println("* Fehlermeldung -> "+e);}	

return Ausgabe;
 }


  public static void main(String args[])
  {
    //set the security manager
    try
      {
        System.setSecurityManager(new RMISecurityManager());

        //create a local instance of the object
        SampleServerImpl Server = new SampleServerImpl();

        //put the local instance in the registry
        Naming.rebind("SAMPLE-SERVER" , Server);

        System.out.println("Server waiting.....");
      }
    catch (java.net.MalformedURLException me)
      {
         System.out.println("Malformed URL: " + me.toString());
      }

    catch (RemoteException re)
      {
         System.out.println("Remote exception: " + re.toString());
      }

  }
}
```


```
import java.rmi.*;
import java.sql.*;

public interface SampleServer extends Remote
{
  public int sum(int a,int b)      throws RemoteException;
  public String sessionid(String user, String pw) throws RemoteException;
}
```

Die Compilierung von SampleServer.java funktioniert problemlos, nur bei die Implementierung bereitet mir Kopfschmerzen.

Was mache ich falsch?


----------



## SlaterB (6. Jan 2012)

du willst wirklich ein Programm, welches über Hello World oder meinetwegen auch 3 oder 4 oder in extremen Ausnahmesituationan auch 5 Code-Zeilen hinausgeht mit javac kompilieren statt einer IDE wie Eclipse?
naja, wenn du dann das javac nicht mal beherrschst kann eben genau sowas herauskommen

damit SampleServer gefunden wird, muss es im ClassPath mit dabei sein,
wenn du [c] -classpath ./mysql-connector-java-5.1.18 [/c]
angibst, ist nur genau das der ClassPath, du brauchst wahrscheinlich auch . im ClassPath, welches für das aktuelle Verzeichnis steht,
das Trennzeichen unter Linux sollte : sein, also vielleicht
[c] -classpath .:./mysql-connector-java-5.1.18 [/c]

Setting the class path


----------



## irgendjemand (6. Jan 2012)

SlaterB hat gesagt.:


> du willst wirklich ein Programm, welches über Hello World oder meinetwegen auch 3 oder 4 oder in extremen Ausnahmesituationan auch 5 Code-Zeilen hinausgeht mit javac kompilieren statt einer IDE wie Eclipse?



sry ... den post find ich etwas lächerlich ...

ich compile selbst auch codes mit mehr als 20'000 zeilen und ganze projekte mit mehr als 50 solcher klassen über console ... und schaffe es sogar diese dann noch richtig in ein lauffähiges jar zu packen ... ohne das ich während der runtime auch nur eine exception wegen fehlenden resourcen bekomme ...

ist also durch aus möglich ... und eine IDE braucht mindestens genau so lange zum compilen über das system jdk wie über console ... da nimmt sich nichts ...


----------



## SlaterB (6. Jan 2012)

wer sich auskennt schafft auch über Konsole irgendwie ein Posting hier im Forum abzusetzen, und sei es per extra Programm,
Normalsterbliche, die nichtmal ClassPath kennen, landen dann eben bei Ergebnissen wie hier zu sehen,
sollten doch lieber IDE fürs Programmieren bzw. Web-Browser für Postings verwenden


----------



## Bud (6. Jan 2012)

SlaterB hat gesagt.:


> du willst wirklich ein Programm, welches über Hello World oder meinetwegen auch 3 oder 4 oder in extremen Ausnahmesituationan auch 5 Code-Zeilen hinausgeht mit javac kompilieren statt einer IDE wie Eclipse?
> *naja, wenn du dann das javac nicht mal beherrschst kann eben genau sowas herauskommen*



Oha. Stimmt, ich lasse es besser gleich. Dann lerne ich vielleicht auch nichts - aber dann mache ich auch nichts falsch. 

Da der Server in einer virtuellen Maschine läuft und ich diese nur per SSH ansteuern kann, dachte ich dass für Testzwecke so etwas auch durchaus über die Konsole zu machen ist. 

Dein Ton ist nicht besonders freundlich, aber Dein Tipp war gut. Danke!


----------

