2 Replies Latest reply on Jul 10, 2007 10:17 PM by Tony Tony

    Need help with SeamTest

    Franco Fernandes Novice

      I'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



        • 1. Re: Need help with SeamTest
          Franco Fernandes Novice

          I found this post
          http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4010462#4010462

          I forgot to add earlier - I'm using Seam 1.2.1

          Following the suggestions everything works ok only if I my test class does not extend SeamTest - if it's a pure TestNG test it works fine.

          OK
          public class CatalogTest {
          private Catalog catalog;

          private EntityManagerFactory emf;

          public EntityManagerFactory getEntityManagerFactory() {
          return emf;
          }

          @Configuration(beforeTestClass = true)
          public void init() {
          emf = Persistence
          .createEntityManagerFactory("cast");
          }

          }

          FAILED
          public class CatalogTest extends SeamTest {
          private Catalog catalog;

          private EntityManagerFactory emf;

          public EntityManagerFactory getEntityManagerFactory() {
          return emf;
          }

          @Configuration(beforeTestClass = true)
          public void init() {
          emf = Persistence
          .createEntityManagerFactory("cast");
          }

          }



          Basically, all I'm trying to attempt is test that the entity POJO saves to my database and I was following the steps in the reference guide.
          Matt / Clive - hoping you guys have a few minutes to respond.


          • 2. Re: Need help with SeamTest
            Tony Tony Newbie

            I have same problem too....