Java Ebean关机在播放测试中被破坏
我们在Play服务器中使用了一个基本测试,在这个测试中,我们清理内存数据库,然后进行改进。代码的简单快照如下所示:Java Ebean关机在播放测试中被破坏,java,playframework-2.2,ebean,Java,Playframework 2.2,Ebean,我们在Play服务器中使用了一个基本测试,在这个测试中,我们清理内存数据库,然后进行改进。代码的简单快照如下所示: public static void ddlConfiguration() { String serverName = "default"; server = Ebean.getServer(serverName); ServerConfig config = new ServerConfig(); ddl = new DdlGenerator();
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);
}
[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]
问题是,一旦执行所有测试并播放服务器关闭,就会引发如下异常:
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);
}
[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]
每个错误的第一行从“[error]c.a.e.s.c.DefaultServer-注销Ebean Ebean时出错:服务器=default2”报告到“[error]c.a.e.s.c.DefaultServer-注销Ebean时出错:服务器=default38”。所以我相信这是由于Ebensevers没有关闭
那么,如何才能正确地关闭它们呢?这通常发生在命名冲突时 如果您有:
String serverName = "default";
server = Ebean.getServer(serverName);
将其更改为具有唯一服务器名称的内容:
String serverName = "default" + UUID.randomUUID().toString();
server = Ebean.getServer(serverName);
当然,您可以使用一些计数器或类似的计数器,只要确保Ebean服务器的名称是唯一的。这通常在存在命名冲突时发生 如果您有:
String serverName = "default";
server = Ebean.getServer(serverName);
将其更改为具有唯一服务器名称的内容:
String serverName = "default" + UUID.randomUUID().toString();
server = Ebean.getServer(serverName);
当然,您可以使用一些计数器或类似的计数器,只要确保Ebean服务器的名称是唯一的。它仍然会出现相同的错误,但重复次数会减少。非常感谢。那是什么版本的Ebian?(我认为这是一个较旧的版本)它仍然认为是相同的错误,但重复次数减少了。非常感谢。那是什么版本的Ebian?(我认为这是一个旧版本)