2 Replies Latest reply on Nov 11, 2010 4:29 AM by bangthebank

    Testing a simple session bean in glassfish embedded container

    bangthebank

      Hi there,

       

      I've just discovered Arquillana and it seems a great product.

       

      Although the setup is s relatively easier than other test frameworks, I have some difficulties to get it working.

       

      I'm developing a simple (so far) Java EE 6 enteprise application in NetBeans/Maven.

       

      Now, I get an error so I still cannot execute tests. Please, see below source code, configurations and error's details (I'm even new with the ejb3 programming model hence if you notice some inconsistencies, let me know please).

       

      Here the relevant code and configurations. Hope it's enough. Many thanks in advance!

       

      Login Entity source code

       

      package efg.entity;

       

      import java.io.Serializable;
      ...

       

      /**
      *
      */
      @Entity
      @Table(name = "LOGIN", catalog = "", schema = "EFGPRD_METADATA")
      @NamedQueries({
          @NamedQuery(name = "Login.findAll", query = "SELECT l FROM Login l"),
          @NamedQuery(name = "Login.findById", query = "SELECT l FROM Login l WHERE l.id = :id"),
          ...

      })
      public class Login implements Serializable {
          private static final long serialVersionUID = 1L;
          @Id
          @Basic(optional = false)
          @Column(name = "ID")
          private Long id;
          @Column(name = "INSTITUTIONFK")
          private Long institutionfk;
          ...

          ...


          @Column(name = "TOTALVIEWS")
          private Long totalviews;
          @Basic(optional = false)
          @Column(name = "ENABLED")
          private short enabled;

       

          public Login() {
          }

       

          public Login(Long id) {
              this.id = id;
          }

       

          ...

          ...

       

          public Long getTotalviews() {
              return totalviews;
          }

       

          public void setTotalviews(Long totalviews) {
              this.totalviews = totalviews;
          }

       

          ...

          ...

       

          @Override
          public int hashCode() {
              int hash = 0;
              hash += (id != null ? id.hashCode() : 0);
              return hash;
          }

       

          @Override
          public boolean equals(Object object) {
              // TODO: Warning - this method won't work in the case the id fields are not set
              if (!(object instanceof Login)) {
                  return false;
              }
              Login other = (Login) object;
              if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                  return false;
              }
              return true;
          }

       

      }

       

      LoginBean Session Bean source code

       

      package efg.ejb;

       

      import efg.entity.Login;
      import javax.ejb.Stateful;
      ...

       

      /**
      *
      */
      @Stateful(mappedName="ejb/LoginSessionBeanJNDI")
      public class LoginBean implements LoginBeanLocal {
          @PersistenceContext(unitName="EFG_MetadataCatalogue-ejbPU")
          private EntityManager em;
          private Login login;

       

          public EntityManager getEm() {
              return em;

          }

       

          public void setEm(EntityManager em) {
              this.em = em;
          }

       

       

          @Override

          public Boolean logIn(String userName, String encPassword) {
             
              login = null;
              login = (Login)em.createNamedQuery("Login.findByUsernameinsti").setParameter("usernameinsti", userName).getSingleResult();
              if (login!=null) {
                  return Boolean.TRUE;
              } else {
                  return Boolean.FALSE;
              }
          }

       

          @Override
          public Boolean logOut() {
              login = null;
              return Boolean.TRUE;

          }

       

          @Override
          public Login getLogin() {
              return login;
          }

       

      LoginBeanTest source code

       

      package efg.ejbtests;

       

      import efg.ejb.LoginBean;
      import efg.entity.Login;
      import javax.ejb.EJB;
      import junit.framework.Assert;

      ...

      ...

       

      /**
      *
      */
      @RunWith(Arquillian.class)
      public class LoginBeanTest {
         
          @EJB
          private LoginBean loginService;

       

         @Deployment
         public static JavaArchive createTestArchive() {

       

            return ShrinkWrap.create(JavaArchive.class, "testMetadataCatalogueEjbs.jar").addClasses(Login.class, LoginBean.class);

       

         }

       

         @Test
         public void shouldBeAbleToInjectEJB() throws Exception {

        
            Assert.assertNotNull(loginService);

         }

       

         @Test
         public void LoginMethodTest() throws Exception {

       

            String userName = "testadminuser";
            String pass = "admin";
          
            Assert.assertTrue(loginService.logIn(userName, pass));
            Assert.assertNotNull(loginService.getLogin());
            Assert.assertFalse(loginService.logIn("x", "x"));


         }

       

      }

      POM.xml dependencies

       

      <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>4.8.2</version>
                  <scope>test</scope>
              </dependency>

       

              <dependency>
                  <groupId>org.jboss.arquillian</groupId>
                  <artifactId>arquillian-junit</artifactId>
                  <version>${arquillian.version}</version>
                  <scope>test</scope>
              </dependency>

       

               <dependency>
                  <groupId>org.jboss.arquillian.container</groupId>
                  <artifactId>arquillian-glassfish-embedded-3</artifactId>
                  <version>${arquillian.version}</version>
                  <scope>test</scope>
              </dependency>

       

              <dependency>
                  <groupId>org.glassfish.extras</groupId>
                  <artifactId>glassfish-embedded-all</artifactId>
                  <version>3.0.1-b02</version>       
              </dependency>

          </dependencies>

       

      Stack Trace Exception

       

      Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 10.025 sec <<< FAILURE!
      shouldBeAbleToInjectEJB(efg.ejbtests.LoginBeanTest)  Time elapsed: 0.014 sec  <<< ERROR!
      org.jboss.arquillian.impl.event.FiredEventException: java.lang.IllegalStateException: Error launching test

      efg.ejbtests.LoginBeanTest public void efg.ejbtests.LoginBeanTest.shouldBeAbleToInjectEJB() throws java.lang.Exception
              at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)
              at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
              at org.jboss.arquillian.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:157)
              at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:244)
              at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:207)
              at org.jboss.arquillian.junit.Arquillian$5$1.evaluate(Arquillian.java:225)
              at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
              at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:221)
              at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
              at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
              at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
              at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
              at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
              at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
              at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
              at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
              at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:163)
              at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)
              at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
              at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)
              at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
              at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127)
              at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
              at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
              at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
              at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
              at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
      Caused by: java.lang.IllegalStateException: Error launching test efg.ejbtests.LoginBeanTest public void efg.ejbtests.LoginBeanTest.shouldBeAbleToInjectEJB() throws java.lang.Exception
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:61)
              at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:50)
              at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:40)
              at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
              ... 31 more
      Caused by: java.net.SocketException: Unexpected end of file from server
              at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
              at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
              at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
              at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
              at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
              at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.execute(ServletMethodExecutor.java:82)
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:57)
              ... 34 more

       

      LoginMethodTest(efg.ejbtests.LoginBeanTest)  Time elapsed: 0.011 sec  <<< ERROR!
      org.jboss.arquillian.impl.event.FiredEventException: java.lang.IllegalStateException: Error launching test efg.ejbtests.LoginBeanTest public void efg.ejbtests.LoginBeanTest.LoginMethodTest() throws java.lang.Exception
              at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:68)
              at org.jboss.arquillian.impl.context.AbstractEventContext.fire(AbstractEventContext.java:115)
              at org.jboss.arquillian.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:157)
              at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:244)
              at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:207)
              at org.jboss.arquillian.junit.Arquillian$5$1.evaluate(Arquillian.java:225)
              at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
              at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:221)
              at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
              at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
              at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
              at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
              at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
              at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
              at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
              at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
              at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:163)
              at org.jboss.arquillian.junit.Arquillian$3$1.evaluate(Arquillian.java:186)
              at org.jboss.arquillian.junit.Arquillian$MultiStatementExecutor.execute(Arquillian.java:297)
              at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:182)
              at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
              at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127)
              at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62)
              at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
              at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
              at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
              at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
              at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
              at java.lang.reflect.Method.invoke(Method.java:597)
              at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
              at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)
      Caused by: java.lang.IllegalStateException: Error launching test efg.ejbtests.LoginBeanTest public void efg.ejbtests.LoginBeanTest.LoginMethodTest() throws java.lang.Exception
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:61)
              at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:50)
              at org.jboss.arquillian.impl.handler.ContainerTestExecuter.callback(ContainerTestExecuter.java:40)
              at org.jboss.arquillian.impl.event.MapEventManager.fire(MapEventManager.java:63)
              ... 31 more
      Caused by: java.net.SocketException: Unexpected end of file from server
              at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
              at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
              at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
              at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
              at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
              at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.execute(ServletMethodExecutor.java:82)
              at org.jboss.arquillian.protocol.servlet_3.ServletMethodExecutor.invoke(ServletMethodExecutor.java:57)
              ... 34 more

        • 1. Re: Testing a simple session bean in glassfish embedded container
          figueiredo

          I am a begginer as well in Arquillian and I am not sure, but I had a similar error few hours ago when I tried to start Glassfish Embedded while other services were using the same port. Then the same exception as you saw, i.e.,

           

          "java.net.SocketException: Unexpected end of file from server
                  at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
                  at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
                  at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
                  at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)"

           

          was triggered here, since Glassfish Embedded's default port is 8181 and there was another service using this port as well.
          After I stopped this service, my test using Glassfish Embedded could run nicely.

           

          Maybe this could help.

           

          Best Regards,
          Fábio

          • 2. Re: Testing a simple session bean in glassfish embedded container
            bangthebank

            Many Thanks Fabio,

            Indeed, I was having Glassfish started and Grizzly listens on 8181.

             

            INFO: Grizzly Framework 1.9.18-o started in: 47ms listening on port 4848
            INFO: Grizzly Framework 1.9.18-o started in: 53ms listening on port 8181

             

            Now I've got further problems with injection but I will post a new thread if I can't solve them