Need help with SeamTest
francof Jul 10, 2007 10:56 AMI'm writing my first SeamTest class. I like the idea of TDD, but I'm kinda frustrated with getting my first test working perfectly. I'm struggling with this problem for 2 days now. I also combed the forum/google for an answer.
META-INF/persistence.xml, hibernate.cfg.xml
<persistence> <persistence-unit name="cast"> <properties> <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/> </properties> </persistence-unit> </persistence>
<hibernate-configuration> <session-factory> <!-- Hibernate settings --> <property name="hibernate.connection.driver_class" >oracle.jdbc.driver.OracleDriver </property> <property name="hibernate.connection.url" >jdbc:oracle:thin:@localhost:1521:ORCL </property> <property name="hibernate.connection.username" >scarduser</property> <property name="hibernate.connection.password"> scarduser</property> <property name="hibernate.dialect" >org.hibernate.dialect.Oracle9Dialect</property> <!-- JDBC connection pool --> <property name="connection.pool_size" >15</property> <property name="hibernate.hbm2ddl.auto">update</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <property name="format_sql">true</property> <property name="use_sql_comments">false</property> <property name="generate_statistics">false</property> <!-- SQL logging configuration --> <!-- NOTE: to show sql, use DEBUG log level for org.hibernate.SQL category --> <!-- <property name="show_sql">true</property> --> <!-- Query configuration --> <property name="hibernate.query.substitutions">true 1, false 0</property> <property name="hibernate.max_fetch_depth">2</property> <!-- Batch configuration --> <property name="hibernate.default_batch_fetch_size">8</property> <property name="hibernate.jdbc.batch_size">20</property> <mapping class="com.ibm.dw.open18.Course"/> <mapping class="com.cmsc.sonycard.model.Catalog"/> </session-factory> </hibernate-configuration>
My seamtest class - CatalogTest
package com.cmsc.sonycard.model; /** Imports omitted ***/ public class CatalogTest extends SeamTest { private Catalog catalog; /* START SECTION A private EntityManagerFactory emf; public EntityManagerFactory getEntityManagerFactory() { return emf; } @Configuration(beforeTestClass = true) public void init() { emf = Persistence .createEntityManagerFactory("cast"); } @Configuration(afterTestClass = true) public void destroy() { emf.close(); } END SECTION A */ @Test public void testPersist() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("cast"); EntityManager em = emf.createEntityManager(); catalog = new Catalog(); catalog.setName("Blah Blah"); catalog.setActive("Y"); em.getTransaction().begin(); em.persist(catalog); em.getTransaction().commit(); em.close(); } }
My tests run fine with the above code as is. The problem is when I uncomment "Section A" and run my test again -
my testPersist() still runs successfully but I get these errors.
[testng] 10:50:38,202 WARN [DriverManagerConnectionProvider] problem closing pooled connection
[testng] java.sql.SQLException: Io exception: Socket closed
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
[testng] at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1442)
[testng] at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152)
[testng] at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142)
[testng] at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
[testng] at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
[testng] at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
[testng] at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)
[testng] 10:50:38,202 INFO [TableMetadata] columns: [phone, type, street, postal_code, id, county, longitude, country, uri, description, state, latitude, na
me, city]
[testng] 10:50:38,202 INFO [DriverManagerConnectionProvider] cleaning up connection pool: jdbc:oracle:thin:@localhost:1521:ORCL
[testng] 10:50:38,202 WARN [DriverManagerConnectionProvider] problem closing pooled connection
[testng] java.sql.SQLException: Io exception: Socket closed
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
[testng] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
[testng] at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1442)
[testng] at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152)
[testng] at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142)
[testng] at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
[testng] at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
[testng] at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
[testng] at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)
[testng] 10:50:38,202 INFO [TableMetadata] foreign keys: []
[testng] 10:50:38,202 INFO [TableMetadata] indexes: [sys_c005286]
[testng] 10:50:38,202 INFO [SchemaUpdate] schema update complete
[testng] Creating C:\source\cast\build\testout\CatalogTest.html
[testng] PASSED: testPersist
[testng] FAILED: org.jboss.seam.mock.SeamTest.end()
[testng] java.lang.NullPointerException
[testng] at org.jboss.seam.contexts.WebApplicationContext.get(WebApplicationContext.java:48)
[testng] at org.jboss.seam.Component.forName(Component.java:1579)
[testng] at org.jboss.seam.Component.getInstance(Component.java:1627)
[testng] at org.jboss.seam.Component.getInstance(Component.java:1622)
[testng] at org.jboss.seam.Component.getInstance(Component.java:1599)
[testng] at org.jboss.seam.Component.getInstance(Component.java:1594)
[testng] at org.jboss.seam.core.ConversationEntries.instance(ConversationEntries.java:91)
[testng] at org.jboss.seam.contexts.Lifecycle.endSession(Lifecycle.java:284)
[testng] at org.jboss.seam.mock.SeamTest.end(SeamTest.java:676)
[testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
I tried putting the same code block into the registration example and I get similar errors. Am I missing something in the testng configuration.
Sorry for the long post. Thanks for any help, will keep trying, got some free time to play today.
Franco