2016-03-31 39 views
1

我們使用基本測試在我們的Play Server中製作了測試結構,在該測試中我們清理了內存數據庫,然後進行了改進。代碼的簡單快照如下:Ebean關機在播放時崩潰測試

public static void ddlConfiguration() { 
    String serverName = "default"; 
    server = Ebean.getServer(serverName); 
    ServerConfig config = new ServerConfig(); 
    ddl = new DdlGenerator(); 

    // Get the database engine 
    String jdbc = settings.get("db.default.url"); 
    String[] splittedUrl = jdbc.split(":"); 
    String engine = splittedUrl[1]; 
    if(engine.equals("h2")){ 
     ddl.setup((SpiEbeanServer) server, new H2Platform(), config); 
    }else{ 
     ddl.setup((SpiEbeanServer) server, new MySqlPlatform(), config); 
    } 

} 
@Before 
public void startApp() throws IOException { 
    app = Helpers.fakeApplication(settings); 
    Helpers.start(app); 

    ddlConfiguration(); 
} 
@After 
public void stopApp() { 
    // We clean the database at the end of the test in order not to overwrite 
    // the onStart App initialization 
    cleanDb(); 
    Helpers.stop(app); 
} 

的問題是,一旦所有的測試執行和播放服務器shutdows有拋出類似下面的異常:

[error] c.a.e.s.c.DefaultServer - Error unregistering Ebean Ebean:server=default2 
javax.management.InstanceNotFoundException: Ebean:server=default2,key=AutoFetch 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_72] 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) ~[na:1.8.0_72] 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) ~[na:1.8.0_72] 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) ~[na:1.8.0_72] 
    at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownInternal(DefaultServer.java:406) [avaje-ebeanorm.jar:na] 
    at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownManaged(DefaultServer.java:379) [avaje-ebeanorm.jar:na] 
[error] c.a.e.s.c.DefaultServer - Error unregistering Ebean Ebean:server=default3 
javax.management.InstanceNotFoundException: Ebean:server=default3,key=AutoFetch 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_72] 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) ~[na:1.8.0_72] 
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) ~[na:1.8.0_72] 
    at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) ~[na:1.8.0_72] 
    at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownInternal(DefaultServer.java:406) [avaje-ebeanorm.jar:na] 
    at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownManaged(DefaultServer.java:379) [avaje-ebeanorm.jar:na] 

的第一行每個錯誤報告從「[錯誤] caescDefaultServer - 錯誤註銷Ebean Ebean:s​​erver = default2」到「[錯誤] caescDefaultServer - 錯誤註銷Ebean Ebean:s​​erver = default38」。所以我相信這是由於EbeanSevers沒有關閉。

那麼,我該如何正確關閉它們呢?

回答

0

這通常發生在命名衝突時。

如果您有:

String serverName = "default"; 
server = Ebean.getServer(serverName); 

改變它的東西與唯一的服務器名稱:

String serverName = "default" + UUID.randomUUID().toString(); 
server = Ebean.getServer(serverName); 

當然你也可以使用一些櫃檯或類似的,只是確保Ebean服務器的名稱是獨特的。

+0

它仍然會出現同樣的錯誤,但重複次數會減少。非常感謝你。 –

+0

Ebean是什麼版本? (我認爲這是一箇舊版本) –