5 Replies Latest reply on Oct 17, 2009 11:41 PM by Wolfgang Bergbauer

    seam test and transaction ovservers

    Wolfgang Bergbauer Newbie

      Hi all,


      we have some component tests setup to create a simple organizational hierarchy:


      1
      |-11
      |-12-121
      ...



      This hierarchy is displayed in a tree.
      To ensure the tree is up to date, the setupOrgTree method is annotated with the TransactionSuccess event:


      @Create
           @Observer("org.jboss.seam.afterTransactionSuccess.Organization")
           public void setupOrgTree()
           {
           ...
      


      From a test case, we create hundrets of organizations. The problem is this test takes really long, because each insert into the databasse will raise a org.jboss.seam.afterTransactionSuccess.Organization event and the tree will be rebuild many times.
      Here is the test method:




           @Test //(dependsOnMethods = { "test_check_organization" })
           public void test_create_orgainization() throws Exception {
                new FacesRequest(){     
                     @Override
                    protected void invokeApplication() throws Exception {
                    
                                    
                          Conversation.instance().begin();
                          //create root org
                          OrganizationHome organizationHome =  (OrganizationHome) Component.getInstance("organizationHome", true);
                          organizationHome.getInstance().setName("WEBA");
                          Organization parentOrg = organizationHome.getInstance();
                          organizationHome.persist();
                               
                          for (int i=0; i<3; i++) {
                               organizationHome.clearInstance();
                               organizationHome.getInstance().setName("Level1-" + i);
                               organizationHome.getInstance().setParentOrganization(parentOrg);
                               Organization level1org = organizationHome.getInstance();
                               organizationHome.persist();
                               for (int n=0; n<3; n++) {
                                    organizationHome.clearInstance();
                                    organizationHome.getInstance().setName("Level2-" + n);
                                    organizationHome.getInstance().setParentOrganization(level1org);
                                    Organization level2org = organizationHome.getInstance();
                                    organizationHome.persist();
                                    for (int m=0; m<=3; m++) {
                                         organizationHome.clearInstance();
                                         organizationHome.create();
                                         organizationHome.getInstance().setName("Level3-" + m);
                                         organizationHome.getInstance().setParentOrganization(level2org);
                                         organizationHome.persist();
                                    }
                               }
                          }
                          Conversation.instance().end();
                          
                     }     
                }.run();
            }




      What would be the best way to supress the setupOrgTree when running a test?
      Of course I could raise my own event whenever an organization is updated/deleted/modified, but it has quite some charme to use the TransactionSuccess Events, since this is raised always (when using the home object to manage organizations).


      Thanks for any suggestions.


      Wolfgang