seam test and transaction ovservers
freakwave10 Oct 15, 2009 5:15 PMHi 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     
 
     
     
    