Uni testing and datasource problem
jagin Jan 5, 2008 1:11 PMHi to all,
I generate simple application with seam-gen. I didn't touch any existing code. I add simple UserDaoSeam class wich I want to test.
I have some problem with simple unit testing. I want to do something like in the Seam Reference book on page 293-294.
The code of the test is like this:
public class UserDaoTest extends SeamTest { private EntityManagerFactory emf; public EntityManagerFactory getEntityManagerFactory() { return emf; } @BeforeClass public void init() { emf = Persistence.createEntityManagerFactory("ezapp"); } @AfterClass public void destroy() { emf.close(); } @Test public void testFindByUsername() { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); UserDaoSeam userDao = new UserDaoSeam(); userDao.setEntityManager(em); User user = userDao.findByUsername("jkowalski"); assert user != null; em.getTransaction().rollback(); em.close(); } }
after ant test i get
D:\dev\ezapp>ant test Buildfile: build.xml compiletest: copytestclasses: buildtest: [copy] Copying 1 file to D:\dev\ezapp\test-build\META-INF [copy] Copying 1 file to D:\dev\ezapp\test-build test: [testng] [Parser] Running: [testng] D:\dev\ezapp\test-build\PersistenceTest.xml [testng] [testng] FATAL [org.hibernate.connection.DatasourceConnectionProvider] Could not find datasource: java:/DefaultDS [testng] java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties. Automatic discovery not implemented yet. [testng] at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158) [testng] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) [testng] at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247) [testng] at javax.naming.InitialContext.init(InitialContext.java:223) [testng] at javax.naming.InitialContext.<init>(InitialContext.java:175) [testng] at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28) [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) [testng] at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) [testng] at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) [testng] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) [testng] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) [testng] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) [testng] at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:918) [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:656) [testng] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52) [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) [testng] at pl.unizeto.ezapp.persistence.UserDaoTest.init(UserDaoTest.java:24) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:604) [testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:394) [testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142) [testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:79) [testng] at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:165) [testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:103) [testng] at org.testng.TestRunner.runWorkers(TestRunner.java:678) [testng] at org.testng.TestRunner.privateRun(TestRunner.java:624) [testng] at org.testng.TestRunner.run(TestRunner.java:495) [testng] at org.testng.SuiteRunner.runTest(SuiteRunner.java:300) [testng] at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:295) [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:275) [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:190) [testng] at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:792) [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:765) [testng] at org.testng.TestNG.run(TestNG.java:699) [testng] at org.testng.TestNG.privateMain(TestNG.java:824) [testng] at org.testng.TestNG.main(TestNG.java:802) [testng] FAILED CONFIGURATION: @BeforeClass init [testng] javax.persistence.PersistenceException: org.hibernate.HibernateException: Could not find datasource [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:663) [testng] at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52) [testng] at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) [testng] at pl.unizeto.ezapp.persistence.UserDaoTest.init(UserDaoTest.java:24) [testng] Caused by: org.hibernate.HibernateException: Could not find datasource [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:56) [testng] at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124) [testng] at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29) [testng] at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62) [testng] at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009) [testng] at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292) [testng] at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:918) [testng] at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:656) [testng] ... 26 more [testng] Caused by: java.lang.RuntimeException: PROVIDER_URL not provided in jndi.properties. Automatic discovery not implemented yet. [testng] at org.jboss.naming.JBossRemotingContextFactory.getInitialContext(JBossRemotingContextFactory.java:158) [testng] at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667) [testng] at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:247) [testng] at javax.naming.InitialContext.init(InitialContext.java:223) [testng] at javax.naming.InitialContext.<init>(InitialContext.java:175) [testng] at org.hibernate.util.NamingHelper.getInitialContext(NamingHelper.java:28) [testng] at org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52) [testng] ... 33 more [testng] ... Removed 22 stack frames [testng] FAILED CONFIGURATION: @BeforeMethod begin [testng] java.lang.IllegalStateException: Attempted to invoke a Seam component outside the an initialized application [testng] at org.jboss.seam.contexts.Lifecycle.getApplication(Lifecycle.java:36) [testng] at org.jboss.seam.contexts.Lifecycle.beginSession(Lifecycle.java:173) [testng] at org.jboss.seam.contexts.ServletLifecycle.beginSession(ServletLifecycle.java:124) [testng] at org.jboss.seam.mock.BaseSeamTest.begin(BaseSeamTest.java:918) [testng] at org.jboss.seam.mock.SeamTest.begin(SeamTest.java:28) [testng] ... Removed 24 stack frames [testng] SKIPPED CONFIGURATION: @AfterMethod end [testng] SKIPPED CONFIGURATION: @AfterClass destroy [testng] SKIPPED CONFIGURATION: @AfterClass cleanup [testng] SKIPPED: testFindByUsername [testng] [testng] =============================================== [testng] ezApp [testng] Tests run: 1, Failures: 0, Skips: 1 [testng] Configuration Failures: 2, Skips: 3 [testng] =============================================== [testng] [testng] [testng] =============================================== [testng] ezApp [testng] Total tests run: 1, Failures: 0, Skips: 1 [testng] Configuration Failures: 2, Skips: 3 [testng] =============================================== [testng] BUILD SUCCESSFUL Total time: 2 seconds
the persistence-test.xml is seam-gen generated without any change
<?xml version="1.0" encoding="UTF-8"?> <!-- Persistence deployment descriptor for tests --> <persistence 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" version="1.0"> <persistence-unit name="ezapp"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>java:/DefaultDS</jta-data-source> <properties> <property name="hibernate.hbm2ddl.auto" value="create-drop"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.cache.use_second_level_cache" value="false"/> <property name="jboss.entity.manager.factory.jndi.name" value="java:/ezappEntityManagerFactory"/> </properties> </persistence-unit> </persistence>
Why i'm getting Could not find datasource: java:/DefaultDS error? Am I missing something. I read all reference book, diged forum and googled very deep and didn't find any solution. What's wrong?
I found that DefaultDS is defined in bootstrap/deploy/hsqldb-ds.xml. So I made this file errorous but i got the same error. I looks like this file is not read in the embedded environment.
I try this wit Seam 2.0.0.GA and 2.0.1.CR1
Any help or working unit test example will be very weelcome.
I'm a newbee in seam matter so please be kind :] ( i'm trying to switch from appfuse framework and like the Seam concept very much).
Jarek