# GWT Applikation-The method forName(String) is undefined for the type Class



## Problem12 (26. Jun 2012)

Hallo,

ich habe ein riesen Problem wo ich shcon lang dran hänge und nicht mehr weiter weiß. 
Ich hoffe hier kann mir jemand helfen.

Also folgendes ich habe mit gwt eine GUI erstellt und möchte es mit einer Datenbank (MySql) Verbinden, jedoch kommt immer diese Fehlermeldung

The method forName(String) is undefined for the type Class

Ich versuche es in das Google Appengine zu deployen dann kommt diese Fehlermeldung im Code zeigt es keinen Fehler an. Bisher konnte ich mir nihct weiterhelfen und habe auch keine hilfreichen Forumeinträge gefunden.

[JAVA=42]	Class.forName("com.mysql.jdbc.Driver").newInstance();
		}
		catch (ClassNotFoundException e)
		{
		System.out.println("Treiber konnte nicht geladen werden "+e); 
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			//dbVerbindung = DriverManager.getConnection("jdbcdbcRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/xxxxx/DB/Datenbank_BA.accdb",user,pw);
			//dbVerbindung.setReadOnly(true);

			  // Verbindung zur ODBC-Datenbank 'Datenbank_BA' herstellen.
	        // Es wird die JDBC-ODBC-Brücke verwendet.
	        dbVerbindung = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
	                + dbPort + "/" + database + "?" + "user=" + dbUser + "&"
	                + "password=" + dbPassword);
		}
		catch(SQLException e)
		{
			System.out.println("DB-Verbindung fehlgeschlagen: "+e);
		}

	}
[/code]

Bitte um dringende Hilfe bin für jeden Tipp der mich zur Lösung führen kann Dankbar.


----------



## JavaNooby (26. Jun 2012)

Versuchst du das im Server Code oder im Client Code?

Im Client Teil wird es nicht funktionieren da der Code in Javascript kompiliert wird.
Muss also serverseitig passieren.
Dort musst du darauf achten dass die Jar des JDBC Treibers im War-Verzeichniss drin liegt.

Poste mal am besten die ganze Klasse


----------



## Problem12 (26. Jun 2012)

Also der Code ist im server package, so ist auch richtig oder?
Ich hoofffe du kannst mir helfen bin wirklich shcon am verzweifeln bin auch kein profi in java und gwt.
Meinst du ich muss den mysqlconnector.jar in war verzeichnis drin haben?

[JAVA=42]
package com.mis.server;

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;


import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.mis.client.DBConnService;

//@SuppressWarnings("serial")
public class DBConnServiceImplement extends RemoteServiceServlet implements DBConnService {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Connection dbVerbindung;

	String [] personen = null;
	String [] kunden = null;

	    // Hostname
	    private static String dbHost = "foxxxx";
	    // Port -- Standard: 3306
	    private static String dbPort = "xx306";
	    // Datenbankname
	    private static String database = "Datenbank_BA";
	    // Datenbankuser
	    private static String dbUser = "ixxxl";
	    // Datenbankpasswort
	    private static String dbPassword = "rexxxp";

	//Rückgabewert true falls DB-Verbindung erfolgreich, ansonsten false
	public void dbConn() {
		//String user = "ixxl";
		//String pw = "rexxxxfp";
		try
		{
		//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		//System.out.println("Treiber erfolgreich geladen");
		//}
		Class.forName("com.mysql.jdbc.Driver").newInstance();
		}
		catch (ClassNotFoundException e)
		{
		System.out.println("Treiber konnte nicht geladen werden "+e); 
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try
		{
			//dbVerbindung = DriverManager.getConnection("jdbcdbcRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/Ixxxx/DB/Datenbank_BA.accdb",user,pw);
			//dbVerbindung.setReadOnly(true);

			  // Verbindung zur ODBC-Datenbank 'Datenbank_BA' herstellen.
	        // Es wird die JDBC-ODBC-Brücke verwendet.
	        dbVerbindung = DriverManager.getConnection("jdbc:mysql://" + dbHost + ":"
	                + dbPort + "/" + database + "?" + "user=" + dbUser + "&"
	                + "password=" + dbPassword);
		}
		catch(SQLException e)
		{
			System.out.println("DB-Verbindung fehlgeschlagen: "+e);
		}

	}

	///////////////////////////////////////////////////////////Projektleiterabrfrage aus DB
	public String [] getPersonen(){
			dbConn();
			Statement stmt = null;
			ResultSet rs = null;
			int rsSize = 0;

			String sqlpl = "SELECT PJLId FROM ProjektListe";


			try {
				stmt = dbVerbindung.createStatement();
				rs = stmt.executeQuery(sqlpl);
				//RS Länge finden
				rs.last();
				rsSize = rs.getRow();

				//Wenn rsSize nicht 0, dann array füllen
				if(rsSize != 0){
					personen = new String[rsSize];
					//Zurück zu ersten Zeile
					rs.beforeFirst();
					int i = 0;
					while(rs.next()){
						personen_ = rs.getString("PJLId"); //+ " " + rs.getString("Name");
						i++;
					}
					i=0;
				}else{
					personen = new String[1];
					personen[0] = "Keinen Person gefunden!";
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}
			return personen;

	}
	///////////////////////////////////////////////////Kundenabfrage aus DB
	public String [] getKunden(){
		dbConn();
		Statement stmt = null;
		ResultSet rs = null;
		int rsSize = 0;

		String sqlkunde = "SELECT Name1 FROM Firmen";


		try {
			stmt = dbVerbindung.createStatement();
			rs = stmt.executeQuery(sqlkunde);
			//RS Länge finden
			rs.last();
			rsSize = rs.getRow();

			//Wenn rsSize nicht 0, dann array füllen
			if(rsSize != 0){
				kunden = new String[rsSize];
				//Zurück zu ersten Zeile
				rs.beforeFirst();
				int i = 0;
				while(rs.next()){
					kunden = rs.getString("Name1"); //+ " " + rs.getString("Name");
					i++;
				}
				i=0;
			}else{
				kunden = new String[1];
				kunden[0] = "Keine Kunden gefunden!";
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
		return kunden;

}
}
[/code]_


----------



## JavaNooby (27. Jun 2012)

Ja, serverseitig ist richtig.

Leg mal die Jar in War\WEB-INF\lib\.
rein.


Ich schätze dass er einfach die Jar nicht findet.


Ich würde dir auch empfehlen ein Ant File anzulegen um das Projekt zu bauen.
Dort kannst du genau sagen wo er welche jars hinkopiert, dann kann im Prinzip nichts mehr schiefgehen ^^.


Hat zwar nichts mit deinem Problem zu tun, aber noch ein genereller Tip zu GWT.
Du kannst die Compile Zeiten veringern wenn du in die .gwt.xml nur für bestimmte Browser Compilierst
<set-property name="user.agent" value="gecko1_8, safari, ie6, ie8, ie9, opera" />
Weil auf dauer wird das Compilieren extrem lahm ^^.

Falls dein Projekt groß wird würde ich dir auch zu Hibernate raten. Das macht die ganze Datenbank Abfragen Geschichten etwas bequemer


----------



## Problem12 (27. Jun 2012)

Hallo Danke für dein Tipp, 

hab die Jar datei genau wo du gesagt hast. aber es kommt immernoch die gleiche fehlermeldung ich werde verrückt 

Kann sein das etwas an der jar datei nicht stimmt oder flasch ist?

ich hab die mysql-connector-java-5.1.20-bin.jar

 Ant file sagt mir jez überhaupt nix muss ich mal gleich probieren.

Will das ding nur zum laufen kriegen damit ich wenigstens weiterarbeiten kann.

Vielen Dank aber für deine hilfen 
Das andere forname problem ist glaub wichtiger 

habe grad gesehen das ich eine ant file drin habe wahrscheinlich abe ich die mal reingemacht, glaube das ist ein antfile was du meinst.
[JAVA=42]
<?xml version="1.0" encoding="utf-8" ?>
<project name="MIS" default="build" basedir=".">
  <!-- Configure path to GWT SDK -->
  <property name="gwt.sdk" location="/path/to/gwt.sdk" />
   <!-- Configure path to App Engine SDK -->
  <property name="appengine.sdk" location="Path to App Engine SDK" />

  <path id="project.class.path">
    <pathelement location="war/WEB-INF/classes"/>
    <pathelement location="${gwt.sdk}/gwt-user.jar"/>
    <fileset dir="${gwt.sdk}" includes="gwt-dev*.jar"/>
    <!-- Add any additional non-server libs (such as JUnit) -->
    <fileset dir="war/WEB-INF/lib" includes="**/*.jar"/>
  </path>

  <target name="libs" description="Copy libs to WEB-INF/lib">
    <mkdir dir="war/WEB-INF/lib" />
    <copy todir="war/WEB-INF/lib" file="${gwt.sdk}/gwt-servlet.jar" />
    <!-- Add any additional server libs that need to be copied -->
     <copy todir="war/WEB-INF/lib" flatten="true">
      <fileset dir="${appengine.sdk}/lib/user" includes="**/*.jar"/>
    </copy>
  </target>

  <target name="javac" depends="libs" description="Compile java source">
    <mkdir dir="war/WEB-INF/classes"/>
    <javac srcdir="src" includes="**" encoding="utf-8"
        destdir="war/WEB-INF/classes"
        source="1.5" target="1.5" nowarn="true"
        debug="true" debuglevel="lines,vars,source">
      <classpath refid="project.class.path"/>
    </javac>
    <copy todir="war/WEB-INF/classes">
      <fileset dir="src" excludes="**/*.java"/>
    </copy>
    <taskdef
       name="datanucleusenhancer"
       classpathref="tools.class.path"
       classname="org.datanucleus.enhancer.tools.EnhancerTask" />
    <datanucleusenhancer
       classpathref="tools.class.path"
       failonerror="true">
      <fileset dir="war/WEB-INF/classes" includes="**/*.class" />
    </datanucleusenhancer>
  </target>

  <target name="gwtc" depends="javac" description="GWT compile to JavaScript">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
        <path refid="tools.class.path"/>
      </classpath>
      <!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
      <jvmarg value="-Xmx256M"/>
      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg value="com.google.gwt.mis_Absch.Mis_Absch"/>
      <arg value="-server"/>
      <arg value="com.google.appengine.tools.development.gwt.AppEngineLauncher"/>
    </java>
  </target>

  <target name="devmode" depends="javac" description="Run development mode">
    <java failonerror="true" fork="true" classname="com.google.gwt.dev.DevMode">
      <classpath>
        <pathelement location="src"/>
        <path refid="project.class.path"/>
      </classpath>
      <jvmarg value="-Xmx256M"/>
      <arg value="-startupUrl"/>
      <arg value="MIS_Absch.html"/>
      <!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
      <arg value="com.google.gwt.sample.stockwatcher.StockWatcher"/>
    </java>
  </target>

  <target name="javac.tests" depends="javac" description="Compiles test code">
    <javac srcdir="test" includes="**" encoding="utf-8"
      source="1.5" target="1.5" nowarn="true"
      debug="true" debuglevel="lines,vars,source">
      <classpath location="path_to_the_junit_jar"/>
      <classpath refid="project.class.path"/>
    </javac>
  </target>

  <target name="test.dev" depends="javac.tests" description="Run development mode tests">
    <mkdir dir="reports/htmlunit.dev" />
    <junit fork="yes" printsummary="yes" haltonfailure="yes">
      <jvmarg line="-Xmx256m" />
      <sysproperty key="gwt.args" value="-logLevel WARN" />
      <sysproperty key="java.awt.headless" value="true" />
      <classpath>
      	<pathelement location="src" />
      	<pathelement location="test" />
        <path refid="project.class.path" />
        <pathelement location="path_to_the_junit_jar" />
      </classpath>
      <batchtest todir="reports/htmlunit.dev" >
        <fileset dir="test" >
          <include name="**/*Test.java" />
        </fileset>
      </batchtest>
      <formatter type="plain" />
      <formatter type="xml" />
    </junit>
  </target>

  <target name="test.prod" depends="javac.tests" description="Run production mode tests">
    <mkdir dir="reports/htmlunit.prod" />
    <junit fork="yes" printsummary="yes" haltonfailure="yes">
      <jvmarg line="-Xmx256m" />
      <sysproperty key="gwt.args" value="-prod -logLevel WARN -out www-test" />
      <sysproperty key="java.awt.headless" value="true" />
      <classpath>
        <pathelement location="src" />
        <pathelement location="test" />
        <path refid="project.class.path" />
        <pathelement location="path_to_the_junit_jar" />
      </classpath>
      <batchtest todir="reports/htmlunit.prod" >
        <fileset dir="test" >
          <include name="**/*Test.java" />
        </fileset>
      </batchtest>
      <formatter type="plain" />
      <formatter type="xml" />
    </junit>
  </target>

  <target name="test" description="Run development and production mode tests">
    <antcall target="test.dev" />
    <antcall target="test.prod" />
  </target>

  <target name="hosted" depends="devmode" description="Run development mode (NOTE: the 'hosted' target is deprecated)" />

  <target name="build" depends="gwtc" description="Build this project" />

  <target name="war" depends="build" description="Create a war file">
    <zip destfile="StockWatcher.war" basedir="war"/>
  </target>

  <target name="clean" description="Cleans this project">
    <delete dir="war/WEB-INF/classes" failonerror="false" />
    <delete dir="war/stockwatcher" failonerror="false" />
  </target>

</project>

[/code]


----------



## Problem12 (27. Jun 2012)

forname undefined type class schon wieder


----------



## JavaNooby (27. Jun 2012)

mmh ich würde versuchen das mal aufm tomcat (Apache Tomcat - Welcome!)  laufen zu lassen
(Einfach tomcat runterladen und dein projekt.war ins webapps verzeichniss legen)

Ich könnte mir vorstellen dass der interne Server möglicherweise nicht für JDBC ausgelegt ist 

Ich hatte glaube ich vor langer Zeit mal dasselbe Problem wenn ich mich nicht täusche


----------



## Problem12 (27. Jun 2012)

ja also ich habe tomcatv7 als lokalen server, frage ist jez wie ich projekt war da rein legen schau noch .

konnte es daran liegen das es forname methode nciht erkennt?

Ja dnn weißt du genau wie es mir grade geht und deshalb verstehst du mich also so gut .. danke


----------



## Problem12 (28. Jun 2012)

hallo Nochmal,

es lässt sich die war datei nicht erstellen steht egal was ich angebe ungültiger name ich versteh das nicht..

Lokaler Server ist wie gesagt Tomcatv7...

Bitte Helfen


----------



## JavaNooby (29. Jun 2012)

Musst mal etwas präziser werden.
Falls der GWT Compiler schön druchläuft kannst du einfach den war ordner kopieren und in tomcats/webapps ordner reinlegen.


----------



## Problem12 (7. Jul 2012)

Hallo,

Danke für deine Hilfen, es lag an meinem 64 Bit Betriebssystem, es erkennt den treiber der DB nicht.
Man muss da einstellungen im ODBC Datenquellen32 im System DNS den Treiber bekannt machen.

Danke .


----------

