2016-06-09 13 views
0

Ich habe einen REST-Service, der auf eine MySQL-Datenbank zugreifen. Ich benutze Wildfly 10 und MySQL 5.7.12. Ich versuche, den EntityManager als eine Injektion zu erhalten, und ich erhalte den folgenden Fehler, wenn ich die find Methode für meine Entität ausführe, die den Tabelleninhalt abbildet.Wildfly 10 Persistenz MySQL-Tabelle nicht gefunden

org.h2.jdbc.JdbcSQLException: Table "MYTABLE" not found; SQL statement:

In der RESTService Klasse habe ich

@PersistenceContext(unitName="myUnit") 
protected EntityManager entityManager; 

und meine persistence.xml Datei ist:

<?xml version="1.0" encoding="UTF-8"?> 

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
      http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
    version="2.1"> 

    <persistence-unit name="myUnit"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <properties> 
     <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mytable" /> 
     <property name="javax.persistence.jdbc.user" value="user" /> 
     <property name="javax.persistence.jdbc.password" value="pass" /> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 

     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.archive.autodetection" value="class, hbm"/> 
    </properties> 
    </persistence-unit> 

</persistence> 

Das Problem ist, dass, wenn anstelle der Injektion von mit rufe ich an das Unternehmen Manager mit der manuellen Art und Weise funktioniert alles glatt.

EntityManagerFactory emFactory; 
emFactory = Persistence.createEntityManagerFactory("myUnit"); 
EntityManager em = emFactory.createEntityManager(); 

Könnten Sie mir geben einige Hinweise, wie die PersistenceContext zu benutzen? Der Code ist irgendwie sauberer und ich benutze ihn lieber.

Antwort

0

Es sieht so aus, als ob Sie die Standard-Datenquelle in Ihre Persistenz-Einheit injiziert bekommen, also denke ich, das hängt davon ab, wie der EntityManager 'gebaut' ist. Eine Möglichkeit, dies zu beheben, besteht darin, eine Datenquelle in WidFly zu erstellen und sie (über) ihren JNDI-Namen in Ihrer Persistenzeinheit zu verwenden. Fühlen Sie sich frei, einen Fehler zu melden http://issues.jboss.org/

+0

Gibt es eine Möglichkeit, diese Datenquelle projektweise zu erstellen? Ich möchte die Wildfly-Konfiguration nicht ändern. Für andere Dinge konnte ich jboss-deployment-structure.xml – jlanza

0

Sie richten eine RESOURCE_LOCAL Persistenzeinheit ein. Sie sollten es als solches konfigurieren:

<persistence-unit transaction-type="RESOURCE_LOCAL"> 

Um eine Ressource lokale Persistenz Einheit verwenden Sie EntityManager nicht injizieren kann, nur EntityManagerFactory. Wenn Sie zu JTA-Datenquelle wechseln und den Server verwalten lassen, werden Sie mit weniger Installationsaufwand konfrontiert.

Wenn Sie nicht unbedingt die Datei standalone.xml bearbeiten möchten, können Sie in WF8 die Datei datasource-ds.xml entweder in Ihren WEB-INF-Ordner oder in das Bereitstellungsverzeichnis neben Ihrer WAR-Datei einfügen. Es war die Rede davon, das von WF zu entfernen, also weiß ich nicht, ob es in 10.x funktioniert.