I want to create JUnit test with hardcoded Hibernate configuration values:
public class UserProvisionTest { public static SessionFactory buildTestSessionFactory() { Configuration configuration = new Configuration(); configuration.setProperty("hibernate.show_sql", "true"); configuration.setProperty("hibernate.connection.url", "jdbc:sqlite:/Users/Desktop/testDB.sqlite"); configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.SQLiteDialect"); configuration.setProperty("hibernate.connection.driver_class", "org.sqlite.JDBC"); configuration.setProperty("hibernate.connection.release_mode", "auto"); configuration.setProperty("hibernate.connection.autoReconnect", "true"); configuration.setProperty("hibernate.hbm2ddl.auto", "update"); configuration.setProperty("hibernate.current_session_context_class", "thread"); configuration.addAnnotatedClass(SystemUserModel.class); configuration.configure(); System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); System.setProperty(Context.URL_PKG_PREFIXES, "org.apache.naming"); return configuration.buildSessionFactory(); } @Test public void createUsersTest() throws Exception { System.out.println("Creating default users"); Session session = buildTestSessionFactory().getCurrentSession(); Transaction tr = session.beginTransaction(); // some query session.flush(); tr.commit(); } }
When I run the code I get this error:
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:271) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68) Caused by: org.hibernate.engine.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/sqliteDB] at org.hibernate.engine.jndi.internal.JndiServiceImpl.locate(JndiServiceImpl.java:100) 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.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) ... 44 more Caused by: javax.naming.NameNotFoundException: Name java:comp is not bound in this Context
Can you give me some advice how I can solve this issue? Looks like this custom configuration is not valid.
EDIT: Pom file content with my configuration:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.web.package</groupId> <artifactId>Web_package</artifactId> <packaging>war</packaging> <version>1.0</version> <name>Web_package</name> <dependencies> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.faces</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.12.Final</version> </dependency> <!-- SQLite JDBC library --> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.20.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> <type>jar</type> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>8.0</version> <scope>provided</scope> </dependency> <!--JBoss/Weld Refrence Implementation for CDI on a Servlet Container --> <dependency> <groupId>org.jboss.weld.servlet</groupId> <artifactId>weld-servlet</artifactId> <version>2.4.5.Final</version> <type>jar</type> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.0</version> <type>jar</type> </dependency> <dependency> <groupId>com.sun.el</groupId> <artifactId>el-ri</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.4.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.omnifaces</groupId> <artifactId>omnifaces</artifactId> <version>2.6.5</version> </dependency> <dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>6.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>catalina</artifactId> <version>6.0.53</version> <scope>test</scope> </dependency> <!-- <dependency> <groupId>org.primefaces.themes</groupId> <artifactId>all-themes</artifactId> <version>1.0.10</version> </dependency> --> <dependency> <groupId>com.github.gwenn</groupId> <artifactId>sqlite-dialect</artifactId> <version>d285e22851</version> </dependency> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp</artifactId> <version>0.8.0.RELEASE</version> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.10.19</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>Web_package</finalName> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.0</version> <configuration> <packagingExcludes>WEB-INF/web.xml</packagingExcludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> <configuration> <encoding>${project.build.sourceEncoding}</encoding> </configuration> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <repositories> ....... <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories> </project>
I'm pasting here the content for the POM.xml file.
2 Answers
Answers 1
- Remove this line, because it tries to read from
hibernate.cfg.xml
which you don't have and don't need (that's why it tries to make a JNDI lookup, while you didn't tell it to do so).
configuration.configure()
- Consequently, for proper programmatic configuration, change this line
return configuration.buildSessionFactory();
to this
configuration.buildSessionFactory( new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()) .build() );
Answers 2
Your error is caused by
Caused by: org.hibernate.engine.jndi.JndiException: Unable to lookup JNDI name [java:comp/env/jdbc/sqliteDB]
it can't find the name com/env/jdbc/sliteDB
You might wish to download the jdbc driver and install the jar into your project.
https://bitbucket.org/xerial/sqlite-jdbc/downloads/
Or if you use maven, list it as a dependency.
https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc
<dependencies> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.7.2</version> </dependency> </dependencies>
0 comments:
Post a Comment