WildFly + Hibernate
A JTA datasource is managed by the jpa container (inside wildfly).
You must define the url, username, password in the standalone.xml.
Search for the datasources subsystem <subsystem xmlns="urn:jboss:domain:datasources:4.0">
and add a datasource definition, for example:
<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>
Next you have to create a module for your database driver. For the details check the documentation: https://docs.jboss.org/author/display/WFLY8/DataSource+configuration
Then your persistence.xml will look like this:
<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>
</persistence>
During server and component start watch for exceptions.
Related videos on Youtube
Teodor Dimitrov
Updated on June 20, 2022Comments
-
Teodor Dimitrov almost 2 years
I've been struggling for days with configuring Hibernate and run it on WildFly.
Here is my 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>
User:
@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; }
When I load my main page no database is created.
Moreover I want to persist a User.
@Stateless public class UserRepositoryImpl implements UserRepository { @PersistenceContext(unitName = "blog") private EntityManager entityManager; public void create(User user) { this.entityManager.persist(user); } }
No database is created and the entity manager is null. What do I need to configure to make it run? I am using IntelliJ for testing.
-
cassiomolin over 7 yearsFirst of all, when using
JTA
as transaction type, the database connection details shouldn't be in thepersistence.xml
file. They should be in thestandalone.xml
from your WilfFly. Then thepersistence.xml
just reference it.
-
-
Gimby over 7 yearsNo you do not, in a JEE container like Wildfly entities are automatically discovered upon application deployment.