Avatar billede alister_crowley Nybegynder
05. april 2005 - 22:20 Der er 14 kommentarer og
1 løsning

webservice med db adgang via. j-connector

Hej

Hvordan kan jeg få en webservice som kræver mysql j-connector til at virke, når jeg ikke selv kan indstille den classpath der skal bruges til at compile det med ?
Avatar billede arne_v Ekspert
05. april 2005 - 22:24 #1
En af de fixe ting ved JDBC er at du slet ikke skal bruge jar filen ved compile
time men først ved run time.

Og hvis du putter JDBC driver jar filen i webapps/dinapp/WEB-INF/lib så bør
den finde den på runtime.
Avatar billede alister_crowley Nybegynder
05. april 2005 - 22:37 #2
hmm, så burde det jo i princippet virke :)

Den brokker sig over denne linje:

Class.forName("com.mysql.dbc.Driver");

Exception java.lang.ClassNotFoundException...
Avatar billede alister_crowley Nybegynder
05. april 2005 - 22:39 #3
ups, Class.forName("com.mysql.jdbc.Driver"); var det (men stadig fejl)
Avatar billede arne_v Ekspert
05. april 2005 - 22:41 #4
Og jar filen er der og web app er genstartet efter at jar filen er anbragt der ?
Avatar billede alister_crowley Nybegynder
05. april 2005 - 22:44 #5
jep
Avatar billede arne_v Ekspert
05. april 2005 - 22:46 #6
prøv lige at test med den her classpath.jsp:

<%@ page import="java.net.*" %>
<ul>
<%
    ClassLoader cl = this.getClass().getClassLoader();
    while(cl != null) {
        %>
        <li><%=cl.getClass().getName()%></li>
        <%
        if(cl instanceof URLClassLoader) {
            %>
            <ul>
            <%
            URL[] urls = ((URLClassLoader)cl).getURLs();
            for(int i = 0; i < urls.length; i++) {
                %>
                <li><%=urls[i]%></li>
                <%
            }
            %>
            </ul>
            <%
        }
        cl = cl.getParent();
    }
%>
</ul>
Avatar billede alister_crowley Nybegynder
05. april 2005 - 22:57 #7
Får fejlen "getClass cannot be resolved or is not a field." på linjen med ClassLoader cl = this.getClass().getClassLoader();
Avatar billede arne_v Ekspert
06. april 2005 - 09:45 #8
Hm.

Der foregår altså noget mystisk.

Alle objekter bør have .getClass()
Avatar billede alister_crowley Nybegynder
06. april 2005 - 10:52 #9
Ved ikke hvad der var gået galt, men det virker nu:

    *  org.apache.jasper.servlet.JasperLoader
          o file:/C:/TomCat/work/Catalina/localhost/_/
    * org.apache.catalina.loader.WebappClassLoader
          o file:/C:/TomCat/webapps/ROOT/WEB-INF/lib/catalina-root.jar
    * org.apache.catalina.loader.StandardClassLoader
          o file:/C:/TomCat/shared/classes/
    * org.apache.catalina.loader.StandardClassLoader
          o file:/C:/TomCat/common/classes/
          o file:/c:/TomCat/common/i18n/tomcat-i18n-en.jar
          o file:/c:/TomCat/common/i18n/tomcat-i18n-es.jar
          o file:/c:/TomCat/common/i18n/tomcat-i18n-fr.jar
          o file:/c:/TomCat/common/i18n/tomcat-i18n-ja.jar
          o file:/c:/TomCat/common/endorsed/xercesImpl.jar
          o file:/c:/TomCat/common/endorsed/xml-apis.jar
          o file:/c:/TomCat/common/lib/commons-el.jar
          o file:/c:/TomCat/common/lib/jasper-compiler-jdt.jar
          o file:/c:/TomCat/common/lib/jasper-compiler.jar
          o file:/c:/TomCat/common/lib/jasper-runtime.jar
          o file:/c:/TomCat/common/lib/jsp-api.jar
          o file:/c:/TomCat/common/lib/naming-factory-dbcp.jar
          o file:/c:/TomCat/common/lib/naming-factory.jar
          o file:/c:/TomCat/common/lib/naming-resources.jar
          o file:/c:/TomCat/common/lib/servlet-api.jar
          o file:/c:/TomCat/common/lib/activation.jar
          o file:/c:/TomCat/common/lib/tools.jar
          o file:/c:/TomCat/common/lib/mail.jar
    * sun.misc.Launcher$AppClassLoader
          o file:/C:/TomCat/bin/bootstrap.jar
    * sun.misc.Launcher$ExtClassLoader
          o file:/C:/Programmer/Java/j2re1.4.2_08/lib/ext/dnsns.jar
          o file:/C:/Programmer/Java/j2re1.4.2_08/lib/ext/ldapsec.jar
          o file:/C:/Programmer/Java/j2re1.4.2_08/lib/ext/sunjce_provider.jar

Mht. database tingen, så hjalp det at sætte den ind i en try{}catch(){}
men jeg kan ikke få den til at retunere en værdi.

Denne kode vil jeg gerne have at den retunere værdien (ID'et) af resultsettet

  /**
  * Checks about the username, end password is in the db.
  *
  * @param user          The username
  * @param pass          The password
  */
  public String dbCheck(String user,String pass)
  {
    try
    {
      // Create SQL connection
      Class.forName("com.mysql.jdbc.Driver");
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost/java", "root", "");
      Statement stmt = con.createStatement();
      // SQL
      String sql = "SELECT `id` FROM `users` WHERE `username`='" + user + "' AND `password`='" + pass + "'";
      // Query
      rs = stmt.executeQuery(sql);
      // Returns the result
      return rs.getString("id");
    } catch(Exception e) {}

    return null;
  }
Avatar billede arne_v Ekspert
06. april 2005 - 19:51 #10
Jeg kan altså ikke se MySQL JDBC driver har fil i:

* org.apache.catalina.loader.WebappClassLoader
          o file:/C:/TomCat/webapps/ROOT/WEB-INF/lib/catalina-root.jar

Check lige igen !
Avatar billede arne_v Ekspert
06. april 2005 - 19:52 #11
} catch(Exception e) {}

er en uheldig konstruktion fordi den fanger og sluger alle fejl uden at man
kan  de har været der !
Avatar billede alister_crowley Nybegynder
07. april 2005 - 01:01 #12
Jo, mysql JDBC driveren er der, jeg havde bare kørt classpath.jsp fra ROOT, og ikke fra axis directoriet.

Så den er der fint nok.

Mht. } catch(Exception e) {} så brokker java sig konstant over at mysql'en ikke er i en try catch sætning, men jeg kan jo ikke retunere en fejl i en webservice, det er jo nød til at være blank.

Og den nægter også at retunere data, så jeg er meget forvirret lige pt.
Avatar billede arne_v Ekspert
07. april 2005 - 07:40 #13
da den metode returnerer en string så kunne du jo:

} catch(Exception e) { return e.getMessage(); }

men ellers er:

} catch(Exception e) {
    e.printStackTrace();
}

en gode ide, fordi så kan man se noget i Tomcat's log fil !
Avatar billede alister_crowley Nybegynder
07. april 2005 - 08:27 #14
ah, dejligt så kunne jeg endelig få en forståelig fejlmeddelse.

manglede også rs.next();  :)

Mange tak for hjælpen, husk at ligge svar.
Avatar billede arne_v Ekspert
07. april 2005 - 09:09 #15
svar
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

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