-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 
Author Message
 Post subject: Unable to build the EntityManagerFactory
PostPosted: Sun Apr 09, 2017 1:56 pm 
Newbie

Joined: Sun Apr 09, 2017 1:46 pm
Posts: 3
My stack:
JBoss Wildfly 10 server
Ubuntu 16.04
Java 8
Postgres 9.5.6
Hibernate 5

I am having problems trying to get my JUnit test to work. The unit tests were created by JBoss and they are used to test if Hibernate is working properly. I got their hibernate5 quickstart tutorial to work, and it was using an H2 database. Now I'm trying to use some of their code (datasource.xml and persistence.xml) for my personal project, and I'm using a Postgres database with Hibernate JPA. I got the following exception when I tried to run the unit test:

Code:
@BeforeClass - runOnceBeforeClass
Problem creating factory
javax.persistence.PersistenceException: Unable to build entity manager factory
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at com.bernales.test.TestEntityManager.runOnceBeforeClass(TestEntityManager.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:228)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    ... 19 more
Caused by: org.hibernate.engine.jndi.JndiException: Error parsing JNDI name [java:jboss/datasources/HibernateMyAppDS]
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:124)
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:95)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.configure(DatasourceConnectionProviderImpl.java:98)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:254)
    ... 30 more
Caused by: javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
    at javax.naming.InitialContext.getNameParser(InitialContext.java:505)
    at org.hibernate.engine.jndi.internal.JndiServiceImpl.parseName(JndiServiceImpl.java:118)
    ... 40 more


Here's the unit test method that corresponds with the exception. The exception is thrown in the try block:

Code:
package com.bernales.test;

import static org.junit.Assert.assertTrue;

import java.util.List;

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

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.bernales.model.Person;

public class TestEntityManager {

   final Logger logger = LoggerFactory.getLogger(TestEntityManager.class);
   
   private static EntityManagerFactory entityManagerFactory;
   private static EntityManager entityManager;

   // Run once, e.g. Database connection, connection pool
   @BeforeClass
   public static void runOnceBeforeClass() {
      System.out.println("@BeforeClass - runOnceBeforeClass");
      try {
         entityManagerFactory = Persistence.createEntityManagerFactory("primary");
      } catch (Exception exception) {
         System.out.println("Problem creating factory");
         exception.printStackTrace();
         System.out.println("");
      }
   }

        ...
}


I tried to configure my standalone.xml using this StackOverflow post http://stackoverflow.com/questions/39281314/wflyctl0412-required-services-that-are-not-installed. Here's what my standalone.xml datasource looks like:

Code:
<datasources>
        <datasource jta="false" jndi-name="java:jboss/datasources/HibernateMyAppDS" pool-name="myappds" enabled="true" use-ccm="false">
             <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
             <driver>postgres</driver>
                 <security>
                 <user-name>postgres</user-name>
             <password>postgres</password>
             </security>
              <validation>
             <validate-on-match>false</validate-on-match>
             <background-validation>false</background-validation>
             </validation>
             <statement>
             <share-prepared-statements>false</share-prepared-statements>
             </statement>
        </datasource>
        <drivers>
             <driver name="postgres" module="org.postgres">
                 <driver-class>org.postgresql.Driver</driver-class>
             </driver>
        </drivers>               
 
        <!-- example from hibernate5 quickstart tutorial using h2 database
        <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
        -->

</datasources>


Here's what my module.xml looks like. It's in directory wildfly-10.1.0.final/modules/org/postgres/main:

Code:
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="org.postgres">

    <resources>
        <resource-root path="postgresql-42.0.0-jdbc4.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>


Here's what my datasource in the WEB-INF folder looks like:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.jboss.org/ironjacamar/schema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.jboss.org/ironjacamar/schema http://docs.jboss.org/ironjacamar/schema/datasources_1_0.xsd">
   <!-- The datasource is bound into JNDI at this location. We reference
      this in META-INF/persistence.xml -->
   <datasource jndi-name="java:jboss/datasources/HibernateMyAppDS"
      pool-name="myappds" enabled="true"
      use-java-context="true">
      <connection-url>jdbc:postgresql://localhost:5432/postgres</connection-url>
      <driver>postgres</driver>
      <security>
         <user-name>postgres</user-name>
         <password>postgres</password>
      </security>
   </datasource>
</datasources>


Here's what my persistence.xml looks like from the META-INF folder:

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

<persistence version="2.1"
    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">

    <persistence-unit name="primary">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!-- The datasource is deployed as WEB-INF/myapp-ds.xml,
            you can find it in the source at src/main/webapp/WEB-INF/myapp-ds.xml -->
        <jta-data-source>java:jboss/datasources/HibernateMyAppDS</jta-data-source>
        <!-- Annotated entity classes -->
        <class>com.bernales.model.Person</class>
        <properties>
            <!-- Properties for Hibernate -->
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
            <property name="hibernate.connection.username" value="postgres" />
            <property name="hibernate.connection.password" value="postgres" />
            <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postgres" />
        </properties>

    </persistence-unit>

</persistence>


Does anyone know what I need to do in order to fix this exception? Thanks.


Top
 Profile  
 
 Post subject: Re: Unable to buld entity manager factory
PostPosted: Mon Apr 10, 2017 1:36 am 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1628
Location: Romania
If you want to have your Hibernate unit tests run in Wildfly, then it's better to use Arquillian. Check out this tutorial for more info.


Top
 Profile  
 
 Post subject: Re: Unable to buld entity manager factory
PostPosted: Mon Apr 10, 2017 10:15 am 
Newbie

Joined: Sun Apr 09, 2017 1:46 pm
Posts: 3
vlad wrote:
If you want to have your Hibernate unit tests run in Wildfly, then it's better to use Arquillian. Check out this tutorial for more info.


Thanks! I'll look into this. I'm building my first web app, and there's a lot of stuff I don't understand yet.


Top
 Profile  
 
 Post subject: Re: Unable to buld entity manager factory
PostPosted: Mon Apr 10, 2017 10:50 am 
Newbie

Joined: Sun Apr 09, 2017 1:46 pm
Posts: 3
Vlad,

So I just want to make sure I understand how everything works. The Java application talks to Wildfly, and Wildfly gives the Java app the Hibernate/Postgres DB connection. Is that correct?


Top
 Profile  
 
 Post subject: Re: Unable to buld entity manager factory
PostPosted: Mon Apr 10, 2017 12:38 pm 
Hibernate Team
Hibernate Team

Joined: Thu Sep 11, 2014 2:50 am
Posts: 1628
Location: Romania
The Java App is hosted in Wildfly and the test emulates a container and runs inside it.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 5 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.