Hibernate und MySQL testen

Dieses Thema Hibernate und MySQL testen im Forum "Data Tier" wurde erstellt von braindump23, 25. Jan. 2014.

Thema: Hibernate und MySQL testen Hallo Leute, ich bin ein Newbie in Sachen Java und Hibernate bzw. MysqlDB. Ich habe bisher meinen JBoss AS7 via...

  1. Hallo Leute,

    ich bin ein Newbie in Sachen Java und Hibernate bzw. MysqlDB.
    Ich habe bisher meinen JBoss AS7 via standalone.xml konfiguriert:
    Code (Text):
           <subsystem xmlns="urn:jboss:domain:datasources:1.0">
                <datasources>
                    <datasource jta="true" jndi-name="java:jboss/datasources/rbowDB" pool-name="rbowDB" enabled="true" use-java-context="true" use-ccm="true">
                        <connection-url>jdbc:mysql://localhost:3306/rbowDB</connection-url>
                        <driver>mysql-connector-java-5.1.26-bin.jar</driver>
                        <pool>
                            <max-pool-size>100</max-pool-size>
                            <prefill>true</prefill>
                            <use-strict-min>false</use-strict-min>
                            <flush-strategy>FailingConnectionOnly</flush-strategy>
                        </pool>
                        <security>
                            <user-name>dbuser</user-name>
                            <password>dbuser1</password>
                        </security>
                    </datasource>
                    <drivers>
                        <driver name="mysql-connector-java-5.1.26-bin.jar" module="com.mysql">
                            <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                        </driver>
                    </drivers>
                </datasources>
    Desweiteren habe ich dann in meinem Eclipse-Projekt die persistence.xml wie folgt konfiguriert:
    Code (Text):
    <?xml version="1.0" encoding="UTF-8"?>

    <!-- Hier wird die zum JBoss zugehörige Datenbank angesprochen JBoss-Konfiguration der DB im Verzeichnis /standalone/configuration/standalone.xml -->

    <persistence version="2.0"
       xmlns="http://java.sun.com/xml/ns/persistence"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
            http://java.sun.com/xml/ns/persistence
            http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
       <persistence-unit name="primary">
          <jta-data-source>java:jboss/datasources/rbow.rbowwebappDS</jta-data-source>
          <properties>
             <!-- Properties for Hibernate -->
             <property name="hibernate.hbm2ddl.auto" value="create-drop" />
             <property name="hibernate.show_sql" value="false" />
          </properties>
       </persistence-unit>
    </persistence>
    und jetzt würde ich gerne innerhalb eines Unittest mal eine Entität persisiteren um die Konfiguration zu testen.
    Code (Text):
    package end2end;

    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;

    import org.junit.Test;

    import model.Aktion;
    import model.Konto;

    public class TestPersistence {

        private Aktion aktion = new Aktion();

        @Test
        public void testPersist() {
           
            String persistenceUnitName = "primary";
            EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
           
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();
            fillAktion(aktion);
            entityManager.persist( aktion);
            entityManager.getTransaction().commit();
            entityManager.close();
        }
       
        private void fillAktion(Aktion aktion) {
            aktion.setId(1l);
            aktion.setKonto(new Konto("Max Mustermann", "Bank", "1234", "100200300"));
            aktion.setName("Max Mustermann");
        }
    }
    Was genau ist denn jetzt für den Unit-Test der String persistenceUnitName zu nehmen?
    Mache ich das so richtig, oder muss ich was anders tun?

    Die Fehlermeldung die ich bekomme ist jedenfalls:
    Code (Text):
    javax.persistence.PersistenceException: No Persistence provider for EntityManager named primary
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
        at end2end.TestPersistence.testPersist(TestPersistence.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
     
    Kann mir da ejmand weiterhelfen?

    Mfg
    Braindump
     
  2. Vielleicht hilft dir das Grundlagen Training weiter --> *Klick*
  3. Als Driver musst du den voll qualifizierten Namen der Klasse angeben.. com.mysql....Driver
    Poste mal das ganze Logfile, ich vermute der fällt davor schon auf die Nase und "primary not found" ist nur die Folge daraus..
     
  4. Hallo,

    danke erstmal.
    das ist der gesamte Stacktrace. Den Namen welcher Klasse?

    Gruss Braindump
     
  5. Hallo zusammen,

    mein Problem besteht immer noch. Ich habe den voll qualifizierten Pfad jetzt mal angegeben scheitere aber trotzdem.
    Kann da nochmal jemand drüberschauen?

    Code (Text):
    javax.persistence.PersistenceException: No Persistence provider for EntityManager named com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
        at end2end.TestPersistence.testPersist(TestPersistence.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
     
  6. Poste Code ubd die persistence.xml...und schau dir ein Tutorial zu dem Thema an...dann sind deine Fragen beantwortet!
     
  7. ... der Code ist doch weiter oben gepostet, die persistence.xml ist auch dabei.
    Tutorials habe ich mir angeschaut sonst wäre ich soweit gar nicht gekommen.

    Hast Du eine konkrete Vermutung oder einen Tipp?

    Mfg
    Braindump
     
  8. Hab ich doch geschrieben! Du musst als Driver den Klassennamen angeben, nicht den Name der Jar!
     
  9. Hallo,

    der Klassenname ist doch dann:
    com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
    aus der persistence.xml vgl. :
    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>

    ... oder nicht?

    Mfg
     
  10. Hallo?
     
  11. Kostenloses Java-Grundlagen Training im Wert von 39 €
    Schau dir jetzt hier das Tutorial an und starte richtig durch!