2013-01-25 24 views
1

我已經在派生的RequestFactory中定義了兩個實體和相應的兩個請求類型。 當我在單元測試中堅持單個實體時,它工作正常。當我嘗試在同一個單元內一個接一個地測試兩個實體時,第一個實體將被存儲,第二個火焰也會以onSuccess結束,但是沒有數據存儲在數據庫中。 我使用一個RequestFacory,一個EventBus和兩個請求類型。GWT RequestFactory:如何在一個方法中使用不同的請求類型

當我將第二個persist.fire放入第一個onSuccess方法時,相應的onSuccess方法未命中並且測試終止而沒有任何消息。

如何將兩個不相關的實體保存在一個代碼中?

//Company 
@Entity 
public class Company { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @Column(name = "version") 
    private Integer version; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public Integer getVersion() { 
     return version; 
    } 

    public void setVersion(Integer version) { 
     this.version = version; 
    } 

    private String instance; 

    public static Company findCompany(Long id) { 
     EntityManager em = emf.createEntityManager(); 
     try { 
      Company company = em.find(Company.class, id); 
      return company; 
     } finally { 
      em.close(); 
     } 
    } 

    public void persist() throws PersistenceException { 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tx = null; 
     try { 
      tx = em.getTransaction(); 
      tx.begin(); 
      em.persist(this); 
      tx.commit(); 
     } catch (RuntimeException e) { 
      tx.rollback(); 
      throw e; 
     } finally { 
      em.close(); 
     } 
    } 
} 

//CompanyRequest 
@Service(Company.class) 
public interface CompanyRequest extends RequestContext { 
    Request<CompanyProxy> findCompany(Long id); 

    InstanceRequest<CompanyProxy, Void> persist(); 

    InstanceRequest<CompanyProxy, Void> remove(); 
} 

//ServiceProvider 
similar to Company with ServiceProviderRequest 

//RequestFactory 
public interface AftdRequestFactory extends RequestFactory { 
    CompanyRequest companyRequest(); 
    ServiceProviderRequest serviceProviderRequest(); 
} 

//UnitTest 
public void testSetupDatabase() { 
    final EventBus eventBus = new SimpleEventBus(); 
    final AftdRequestFactory requestFactory = GWT.create(AftdRequestFactory.class); 
    requestFactory.initialize(eventBus); 

    CompanyRequest request = requestFactory.companyRequest(); 
    CompanyProxy newCompany = request.create(CompanyProxy.class); 
    newCompany.setInstance("1"); 
    request.persist().using(newCompany); 
    request.fire(new Receiver<Void>() { 
     @Override 
     public void onSuccess(Void arg0) { 
      ServiceProviderRequest spRequest = requestFactory.serviceProviderRequest(); 
      ServiceProviderProxy newServiceProvider = spRequest.create(ServiceProviderProxy.class); 
      newServiceProvider.setInstance("12345"); 
      spRequest.persist().using(newServiceProvider); 
      spRequest.fire(new Receiver<Void>() { 
       @Override 
       public void onSuccess(Void arg0) { 
        System.out.println("service provider instance created"); 
       } 

       @Override 
       public void onFailure(ServerFailure error) { 
       } 
      }); 

     } 

     @Override 
     public void onFailure(ServerFailure error) { 
      System.out.println("could not create company instances"); 
     } 
    }); 
} 
+1

顯示您的代碼! –

回答

0

根本問題似乎是一個計時問題。當我將'delayTestFinish(30000)'添加到gwt單元測試的開始時,主線程會等待足夠長的時間,直到兩個onSuccess()方法被調用並且異步線程完成。

相關問題