2 Replies Latest reply on Aug 30, 2007 8:59 AM by lockdog

    Bug or not?

    lockdog

      Class
      @Name("userHome")
      /**
      * User entity home class
      * Contains user management functions
      */
      public class UserHome extends EntityHome {

      ...

      @Restrict("#{s:hasRole('Librarian')}")
      public void addUser() {
      getInstance().setRole(Role.USER);
      persist();
      }

      Form:
      <h:form id="userAddForm">

      <rich:panel style="background-color:#faf9cc;">
      <f:facet name="header">UserAdd</f:facet>

      <s:decorate id="userEmailDecoration" template="/layout/edit.xhtml">
      <ui:define name="label">E-mail</ui:define>
      <h:inputText id="email" value="#{userHome.instance.email}"/>
      </s:decorate>
      <s:decorate id="firstNameDecoration" template="/layout/edit.xhtml">
      <ui:define name="label">First Name</ui:define>
      <h:inputText id="firstname" value="#{userHome.instance.firstName}"/>
      </s:decorate>
      <s:decorate id="emailDecoration" template="/layout/edit.xhtml">
      <ui:define name="label">Last Name</ui:define>
      <h:inputText id="lastName" value="#{userHome.instance.lastName}"/>
      </s:decorate>
      <s:decorate id="passwordDecoration" template="/layout/edit.xhtml">
      <ui:define name="label">Password</ui:define>
      <h:inputText id="Password" value="#{userHome.instance.password}"/>
      </s:decorate>


      <h:commandButton id="addUser"
      value="Add User"
      action="#{userHome.addUser}"/>


      </rich:panel>

      </h:form>


      Test:
      public class UserHomeTest extends SeamTest {

      @Test
      public void addUserTest() throws Exception {

      //login
      new FacesRequest() {
      @Override
      protected void updateModelValues() {
      assertFalse("Is user logged in", (Boolean) getValue("#{identity.loggedIn}"));
      // Some data(from import-test.sql)
      //login
      setValue("#{identity.username}", "lock_dog2000@mail.ru");
      setValue("#{identity.password}", "Eugene");
      }

      @Override
      protected void invokeApplication() {
      invokeMethod("#{identity.login}");
      }

      }.run();

      // Testing add user method
      new FacesRequest() {
      @Override
      protected void updateModelValues() {
      //fill new user
      setValue("#{userHome.instance.firstName}", "Lida");
      setValue("#{userHome.instance.lastName}", "Jarikova");
      setValue("#{userHome.instance.email}", "iamstupid@girl.ua");
      setValue("#{userHome.instance.password}", "passme");
      }

      @Override
      protected void invokeApplication() {
      invokeMethod("#{userHome.addUser}");
      }

      @Override
      protected void renderResponse() {
      UserList userList = (UserList) getInstance("userList");
      assertNotNull(userList);
      assertEquals(4, (long) userList.getResultCount());
      }

      }.run();


      Error:
      javax.el.ELException: javax.persistence.TransactionRequiredException: No active JTA transaction on joinTransaction call
      at com.sun.el.parser.AstValue.invoke(AstValue.java:178)
      at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:286)
      at org.jboss.seam.util.UnifiedELMethodBinding.invoke(UnifiedELMethodBinding.java:36)
      at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
      at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
      at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
      at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
      at org.jboss.seam.mock.SeamTest$Request.invokeMethod(SeamTest.java:401)
      at org.teamdev.librarian.UserHomeTest$1.invokeApplication(UserHomeTest.java:35)
      at org.jboss.seam.mock.SeamTest$Request.run(SeamTest.java:489)
      at org.teamdev.librarian.UserHomeTest.addUserTest(UserHomeTest.java:17)
      Caused by: javax.persistence.TransactionRequiredException: No active JTA transaction on joinTransaction call
      at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:429)
      at org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:402)
      at org.jboss.seam.persistence.EntityManagerProxy.joinTransaction(EntityManagerProxy.java:113)
      at org.jboss.seam.framework.EntityHome.persist(EntityHome.java:47)
      at org.teamdev.librarian.user.UserHome.addUser(UserHome.java:42)
      at org.jboss.seam.util.Reflections.invoke(Reflections.java:20)
      at org.jboss.seam.intercept.RootInvocationContext.proceed(RootInvocationContext.java:31)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:57)
      at org.jboss.seam.interceptors.BijectionInterceptor.aroundInvoke(BijectionInterceptor.java:47)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.ManagedEntityIdentityInterceptor.aroundInvoke(ManagedEntityIdentityInterceptor.java:37)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.RollbackInterceptor.aroundInvoke(RollbackInterceptor.java:34)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.ConversationInterceptor.aroundInvoke(ConversationInterceptor.java:63)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.TransactionInterceptor$1.work(TransactionInterceptor.java:32)
      at org.jboss.seam.util.Work.workInTransaction(Work.java:37)
      at org.jboss.seam.interceptors.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:27)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:27)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.interceptors.SecurityInterceptor.aroundInvoke(SecurityInterceptor.java:37)
      at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
      at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103)
      at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:151)
      at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:87)
      at org.teamdev.librarian.user.UserHome_$$_javassist_1.addUser(UserHome_$$_javassist_1.java)
      at com.sun.el.parser.AstValue.invoke(AstValue.java:174)
      ... 32 more
      ... Removed 30 stack frames
      -----


      It is all right, when you adding user by the form.
      But test fall.
      Help!!!