2017-01-04 4 views
1

Ich habe seit Tagen mit der Konfiguration von Hibernate gekämpft und es auf WildFly ausgeführt.WildFly + Hibernate

Hier ist mein Code:

META-INF/persistence.xml

<persistence version="1.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_1_0.xsd"> 

<persistence-unit name="blog" transaction-type="JTA"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

    <properties> 
     <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/blog?createDatabaseIfNotExist=true"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
     <property name="hibernate.connection.username" value="abc"/> 
     <property name="hibernate.connection.password" value="abc"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create"/> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.0"/> 
    </properties> 

</persistence-unit> 

pom.xml

<dependencies> 

    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.2.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.38</version> 
    </dependency> 

</dependencies> 

<properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
</properties> 

Benutzer:

@Entity 
@Table(name = "users") 
public class User { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private long id; 

@Column(name = "username") 
private String username; 

@Column(name = "password") 
private String password; 

@OneToMany(mappedBy = "user") 
private Set<Post> posts; 
} 

Wenn ich meine Hauptseite lade, wird keine Datenbank erstellt.

Außerdem möchte ich einen Benutzer persistieren.

@Stateless 
public class UserRepositoryImpl implements UserRepository { 

@PersistenceContext(unitName = "blog") 
private EntityManager entityManager; 

public void create(User user) { 
    this.entityManager.persist(user); 
} 
} 

Es wird keine Datenbank erstellt und der Entitätsmanager ist null. Was muss ich konfigurieren, damit es ausgeführt wird? Ich verwende IntelliJ zum Testen.

+2

Wenn Sie als Transaktionstyp 'JTA' verwenden, sollten sich die Datenbankverbindungsdetails nicht in der Datei' persistence.xml' befinden. Sie sollten in der 'standalone.xml' von Ihrer WilfFly sein. Dann referenziere die 'persistence.xml' einfach. –

+0

Ich denke, etwas anderes ist grundlegend gebrochen. Ich kann kein gutes Tutorial finden, wie es geht. Ich verlasse es für jetzt. Danke –

+0

Das Problem liegt wahrscheinlich in der Art, wie Sie das UserRepositoryImpl verwenden. Wie in: der Code, den du hier nicht angezeigt hast. Anscheinend wird der JEE-Container nicht ausgelöst, um die EntityManager-Instanz tatsächlich zu injizieren und somit den Persistenzkontext zu starten, was ich nur annehmen kann, dass das USerRepositoryImpl nicht als eine richtige EJB-Instanz initialisiert wird. – Gimby

Antwort

-2

In Datei persistence.xml Sie müssen Klasse

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

<class>package.User<class> 

<properties> 
    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/blog?createDatabaseIfNotExist=true"/> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
    <property name="hibernate.connection.username" value="abc"/> 
    <property name="hibernate.connection.password" value="abc"/> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
    <property name="hibernate.hbm2ddl.auto" value="create"/> 
    <property name="hibernate.show_sql" value="true"/> 
    <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.0"/> 
</properties> 

Sie können möglichst viele Klassen bestehen sind, wie Sie

+1

Nein, Sie werden nicht in einem JEE-Container wie Wildfly-Entitäten bei der Anwendungsbereitstellung automatisch erkannt. – Gimby

4

A JTA-Datenquelle wie vom JPA Behälter (innen verwaltet Wildfliege). Sie müssen die URL, den Benutzernamen und das Kennwort in der Datei standalone.xml definieren. für das Datenquellen-Subsystem Suche <subsystem xmlns="urn:jboss:domain:datasources:4.0"> und eine Datenquelle Definition hinzufügen, zum Beispiel:

<datasource jta="true" jndi-name="java:/jdbc/myDS" pool-name="MyDS" enabled="true" use-java-context="true" use-ccm="true"> 
       <connection-url>jdbc:mysql://localhost:3306/blog</connection-url> 
       <driver>mysqldriver.jar</driver> 
       <security> 
        <user-name>username</user-name> 
        <password>password</password> 
       </security> 
      </datasource> 

Als nächstes müssen Sie ein Modul für die Datenbank-Treiber erstellen. Für die Details der Dokumentation überprüfen: https://docs.jboss.org/author/display/WFLY8/DataSource+configuration

Dann wird Ihr persistence.xml wie folgt aussehen:

<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="blog"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>jdbc/myDS</jta-data-source> 
    <properties> 
     <property name="hibernate.archive.autodetection" value="class" /> 
     property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
    <property name="hibernate.hbm2ddl.auto" value="create"/> 
    <property name="hibernate.show_sql" value="true"/> 
    </properties> 
</persistence-unit> 

Während Uhr Server und Komponenten-Start für Ausnahmen.