Avatar billede dsj Nybegynder
01. december 2002 - 22:34 Der er 21 kommentarer og
1 løsning

Forbindelse til MySQL DB

Jeg har lavet mig en lille J2EE-applikation, som gerne skulle kunne gemme data i en MySQl database, problemet er bare, at den ikke kan finde driveren (mm.mysql-2.0.4-bin.jar).

I min J2EE-app har jeg lavet en lille factory, som skaber forbindelsen til databassen:

  private static void openConnection() {
    try {
      if(con == null) {
        Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        con = DriverManager.getConnection(url
                                        +"?user="+user
                                        +"&password="+pass
                                        +"&autoReconnect="+autoReconnect
                                        +"&maxReconnects="+MAX_RECONNECTS);
      }
    } catch (Exception e) {
      System.err.println("DBFactory: "+e.getMessage());
      e.printStackTrace();
    }
  }

Det er der jo ingen ben i, men jeg får en "NoSuitableDriver" exception.

hvordan skal driver-filen "mm.mysql-2.0.4-bin.jar" følge med, for at min J2EE-app kan finde den og skabe forbindelsen???
Avatar billede dsj Nybegynder
01. december 2002 - 22:45 #1
ok, nu tror jeg at den fandt driver-filen, men fik følgende fejl, som jeg ikke ved hvad jeg skal gøre ved...

java.lang.ClassNotFoundException: No ClassLoaders found for: org.gjt.mm.mysql.Driver
Avatar billede disky Nybegynder
01. december 2002 - 23:36 #2
er den nævnt i din classpath ?

Det skal den være.
Avatar billede dsj Nybegynder
02. december 2002 - 00:01 #3
ja, ellers ville den ikke kunne finde den.

Jeg har fundet ud af at MySQL DB'en skal sættes op med en descriptor-fil som en ressource, så at man kan referere til den gennem JNDI, men jeg ved ikke hvad xml-filen skal hedde og hvad man skal skrive - det skal i øvrigt køre i et JBoss-miljø.

Ved du hvordan det gøres disky?
Avatar billede disky Nybegynder
02. december 2002 - 00:06 #4
oh sorry, jeg er lidt søvning :)

Sorry jeg har aldrig prøvet det sammen med JBoss, men jeg er sikker på det enten står i Jboss dokumentationen, eller i J2EE doc'en
Avatar billede arne_v Ekspert
02. december 2002 - 07:18 #5
Har du læse JBoss 3 Quick Start Guide (kan downloades som PDF)
kapitel 10 ?
Avatar billede arne_v Ekspert
02. december 2002 - 07:19 #6
Du kan formentlig starte med at kopiere hsqldb-service.xml og
rette den til !
Avatar billede dsj Nybegynder
02. december 2002 - 16:08 #7
hvad er et login-module, og er det nødvendigt at bruge i forbindelse med MySQL ?
Avatar billede arne_v Ekspert
02. december 2002 - 16:16 #8
Nej.

Jeg mener kun det behøver det, hvis du vil validere
brugere udfra MySQL's bruger database.
Avatar billede dsj Nybegynder
02. december 2002 - 16:27 #9
argh, kan i hjælpe mig med at finde fejlen i følgende descriptor??

<?xml version="1.0" encoding="UTF-8"?>
<server>
  <mbean code="org.jboss.resource.connectionmanager.NoTxConnectionManager" name="jboss.jca:service=LocalTxCM,name=mysqlDS">
    <depends optional-attribute-name="ManagedConnectionFactoryName">
      <!--embedded mbean-->
      <mbean code="org.jboss.resource.connectionmanager.RARDeployment" name="jboss.jca:service=LocalTxDS,name=mysqlDS">

        <attribute name="JndiName">AdresserDB</attribute>
        <attribute name="ManagedConnectionFactoryProperties">
          <properties>
            <config-property name="ConnectionURL" type="java.lang.String">jdbc:mysql://localhost:3306/adresser</config-property>
            <config-property name="DriverClass" type="java.lang.String">org.gjt.mm.mysql.Driver</config-property>
            <config-property name="UserName" type="java.lang.String">daniel</config-property>
            <config-property name="Password" type="java.lang.String">280780</config-property>
          </properties>
        </attribute>

        <!--Below here are advanced properties-->
        <depends optional-attribute-name="OldRarDeployment">jboss.jca:service=RARDeployment,name=JBoss LocalTransaction JDBC Wrapper</depends>
        <depends>jboss:service=Hypersonic</depends>
       
      </mbean>
    </depends>
    <depends optional-attribute-name="ManagedConnectionPool">
      <!--embedded mbean-->
      <mbean code="org.jboss.resource.connectionmanager.JBossManagedConnectionPool" name="jboss.jca:service=LocalTxPool,name=mysqlDS">
        <attribute name="MinSize">0</attribute>
        <attribute name="MaxSize">50</attribute>
        <attribute name="BlockingTimeoutMillis">5000</attribute>
        <attribute name="IdleTimeoutMinutes">15</attribute>
        <attribute name="Criteria">ByContainer</attribute>
      </mbean>
    </depends>
    <depends optional-attribute-name="CachedConnectionManager">jboss.jca:service=CachedConnectionManager</depends>

    <depends optional-attribute-name="JaasSecurityManagerService">jboss.security:service=JaasSecurityManager</depends>

    <attribute name="TransactionManager">java:/TransactionManager</attribute>

    <!--make the rar deploy! hack till better deployment-->
    <depends>jboss.jca:service=RARDeployer</depends>

  </mbean>
</server>

Fejlen lyder:
16:30:34,787 ERROR [URLDeploymentScanner] MBeanException: Exception in MBean operation 'checkIncompleteDeployments()'
Cause: Incomplete Deployment listing:
Packages waiting for a deployer:
  <none>
Incompletely deployed packages:
  <none>
MBeans waiting for classes:
  <none>
MBeans waiting for other MBeans:
[ObjectName: jboss.jca:service=LocalTxCM,name=mysqlDS
state: FAILED
I Depend On:  jboss.jca:service=LocalTxDS,name=mysqlDS
  jboss.jca:service=LocalTxPool,name=mysqlDS
  jboss.jca:service=CachedConnectionManager
  jboss.security:service=JaasSecurityManager

Depends On Me: org.jboss.deployment.DeploymentException: No Attribute found with name: TransactionManager]
Avatar billede dsj Nybegynder
02. december 2002 - 16:31 #10
Det er i øvrigt hsqldb-service.xml jeg har redigeret og omdøbt til mysql-service.xml
Avatar billede arne_v Ekspert
02. december 2002 - 16:42 #11
<depends>jboss:service=Hypersonic</depends>
       
virker ihvertfald suspekt !

(h'et i hsql står vistnok for hypersonic)
Avatar billede arne_v Ekspert
02. december 2002 - 16:44 #12
Ellers kan jeg prøve i aften med en maskine
med MySQL og JBoss 3.x.
Avatar billede dsj Nybegynder
02. december 2002 - 16:49 #13
Jeg fandt lige følgende link: http://www.csd.abdn.ac.uk/~bscharla/teaching/mtp_software/mysql/

og lavede nedenstående descriptor ud fra det. Den bliver deployed uden problemer, dog siger den (ved ikke om det betyder noget særligt?):
"16:51:22,363 WARN  [ServiceController] jboss.jca:service=LocalTxDS,name=MySQL does not implement any Service methods
"

<?xml version="1.0" encoding="UTF-8" ?>
- <server>
- <!-- embedded mbean
  -->
- <mbean code="org.jboss.resource.connectionmanager.RARDeployment" name="jboss.jca:service=LocalTxDS,name=MySQL">
  <attribute name="JndiName">AdresserDB</attribute>
- <attribute name="ManagedConnectionFactoryProperties">
- <properties>
  <config-property name="ConnectionURL" type="java.lang.String">jdbc:mysql://localhost/adresser</config-property>
  <config-property name="DriverClass" type="java.lang.String">org.gjt.mm.mysql.Driver</config-property>
- <!-- set these only if you want only default logins, not through JAAS
  -->
  <config-property name="UserName" type="java.lang.String">daniel</config-property>
  <config-property name="Password" type="java.lang.String">280780</config-property>
  </properties>
  </attribute>
- <!-- Below here are advanced properties
  -->
  </mbean>
  </server>
Avatar billede arne_v Ekspert
02. december 2002 - 16:56 #14
Den ser dejlig simpel ud, så prøv med den.

Prøv om du kan deploye dine CMP entity beans
eller om en session bean eller BMP entity bean
kan hente resourcen.
Avatar billede arne_v Ekspert
02. december 2002 - 16:59 #15
For CMP entity beans angiver du JNDI navn i jboss.xml,
som mather det i mysql-service.xml (AdresserDB).

For session beans og BMP entity beans slår du selv op
i JNDI, noget a la:

Context initctx  = new InitialContext();
DataSource ds = (DataSource)initctx.lookup("AdresserDB");
Connection conn = ds.getConnection();
Avatar billede dsj Nybegynder
02. december 2002 - 17:04 #16
Den resulterer i: NameNotFoundException: AdresserDB not bound
Avatar billede arne_v Ekspert
02. december 2002 - 17:08 #17
Og det er i en server component du forsøger ?

(JDBC connections kan af gode grunde ikke slåes
på af clients)
Avatar billede arne_v Ekspert
02. december 2002 - 17:13 #18
Prøv evt. at checke hvilke JNDI navne der er
defineret.
Avatar billede arne_v Ekspert
02. december 2002 - 17:14 #19
Et hurtigt blik i quick start guide antydede iøvrigt, at
navnet skal være:
  java:/AdresserDB

(jeg kan teste når jeg kommer hjem)
Avatar billede dsj Nybegynder
02. december 2002 - 17:25 #20
"et lille juhu", jeg kombinerede den nye descriptor med den gamle og får ikke længere NameNotFoundException. Tværtimod får jeg en SQLException med besked om at jeg er blevet nægtet adgang - så kan jeg da få forbindelse :D
Det hjalp at skrive: DataSource ds = (DataSource)ic.lookup("java:/AdresserDB");

Er det så nu at jeg skal til at bruge et login-modul??

I descriptoren har jeg jo angivet username og password, så jeg skulle have rettigheder til databasen, da jeg bruger samme username og password fra andre applikationer??
Avatar billede dsj Nybegynder
02. december 2002 - 18:10 #21
"et stort juhu", nu virker det, altså hvis jeg anvender en bruger i mysql-database, som IKKE har sat et password.

Mange tak for hjælpen arne, du kom med de rigtige ideer :) sølle 60p for alt det.
Avatar billede arne_v Ekspert
02. december 2002 - 18:14 #22
Det er jo herligt, når noget virker !
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