001package io.ebean.docker.commands; 002 003import java.sql.Connection; 004import java.sql.SQLException; 005 006public abstract class JdbcBaseDbContainer extends DbContainer { 007 008 JdbcBaseDbContainer(DbConfig config) { 009 super(config); 010 this.checkConnectivityUsingAdmin = true; 011 } 012 013 abstract void createDatabase(); 014 015 abstract void dropCreateDatabase(); 016 017 @Override 018 public boolean startWithCreate() { 019 if (!startContainerWithWait()) { 020 return false; 021 } 022 createDatabase(); 023 return true; 024 } 025 026 @Override 027 public boolean startWithDropCreate() { 028 if (!startContainerWithWait()) { 029 return false; 030 } 031 dropCreateDatabase(); 032 return true; 033 } 034 035 private boolean startContainerWithWait() { 036 if (checkAlreadyRunning()) { 037 dbConfig.clearStopMode(); 038 return true; 039 } 040 startIfNeeded(); 041 if (!waitForConnectivity()) { 042 log.warn("Failed waiting for connectivity"); 043 return false; 044 } 045 return true; 046 } 047 048 protected boolean checkAlreadyRunning() { 049 try (Connection connection = dbConfig.createAdminConnection()) { 050 return true; 051 } catch (Throwable e) { 052 // no connectivity 053 return false; 054 } 055 } 056 057 @Override 058 public boolean waitForDatabaseReady() { 059 // Just rely on waitForConnectivity() instead 060 return true; 061 } 062 063 @Override 064 protected boolean isDatabaseReady() { 065 // Just rely on waitForConnectivity() instead 066 return true; 067 } 068 069 @Override 070 protected boolean isDatabaseAdminReady() { 071 // Just rely on waitForConnectivity() instead 072 return true; 073 } 074}