parent
c49c4f80a2
commit
af7a040d54
1 changed files with 21 additions and 16 deletions
|
@ -24,6 +24,8 @@ import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import javax.naming.InitialContext;
|
import javax.naming.InitialContext;
|
||||||
import javax.naming.NamingException;
|
import javax.naming.NamingException;
|
||||||
|
@ -80,10 +82,11 @@ public class JpaMapStorageProviderFactory implements
|
||||||
EnvironmentDependentProviderFactory {
|
EnvironmentDependentProviderFactory {
|
||||||
|
|
||||||
public static final String PROVIDER_ID = "jpa-map-storage";
|
public static final String PROVIDER_ID = "jpa-map-storage";
|
||||||
|
private static final Logger logger = Logger.getLogger(JpaMapStorageProviderFactory.class);
|
||||||
|
|
||||||
private volatile EntityManagerFactory emf;
|
private volatile EntityManagerFactory emf;
|
||||||
|
private final Set<Class<?>> validatedModels = ConcurrentHashMap.newKeySet();
|
||||||
private Config.Scope config;
|
private Config.Scope config;
|
||||||
private static final Logger logger = Logger.getLogger(JpaMapStorageProviderFactory.class);
|
|
||||||
|
|
||||||
public final static DeepCloner CLONER = new DeepCloner.Builder()
|
public final static DeepCloner CLONER = new DeepCloner.Builder()
|
||||||
//client
|
//client
|
||||||
|
@ -144,6 +147,7 @@ public class JpaMapStorageProviderFactory implements
|
||||||
if (emf != null) {
|
if (emf != null) {
|
||||||
emf.close();
|
emf.close();
|
||||||
}
|
}
|
||||||
|
this.validatedModels.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void lazyInit() {
|
private void lazyInit() {
|
||||||
|
@ -231,23 +235,24 @@ public class JpaMapStorageProviderFactory implements
|
||||||
}
|
}
|
||||||
|
|
||||||
public void validateAndUpdateSchema(KeycloakSession session, Class<?> modelType) {
|
public void validateAndUpdateSchema(KeycloakSession session, Class<?> modelType) {
|
||||||
Connection connection = getConnection();
|
if (this.validatedModels.add(modelType)) {
|
||||||
|
Connection connection = getConnection();
|
||||||
|
try {
|
||||||
|
if (logger.isDebugEnabled()) printOperationalInfo(connection);
|
||||||
|
|
||||||
try {
|
MapJpaUpdaterProvider updater = session.getProvider(MapJpaUpdaterProvider.class);
|
||||||
if (logger.isDebugEnabled()) printOperationalInfo(connection);
|
MapJpaUpdaterProvider.Status status = updater.validate(modelType, connection, config.get("schema"));
|
||||||
|
|
||||||
MapJpaUpdaterProvider updater = session.getProvider(MapJpaUpdaterProvider.class);
|
if (!status.equals(VALID)) {
|
||||||
MapJpaUpdaterProvider.Status status = updater.validate(modelType, connection, config.get("schema"));
|
update(modelType, connection, session);
|
||||||
|
}
|
||||||
if (! status.equals(VALID)) {
|
} finally {
|
||||||
update(modelType, connection, session);
|
if (connection != null) {
|
||||||
}
|
try {
|
||||||
} finally {
|
connection.close();
|
||||||
if (connection != null) {
|
} catch (SQLException e) {
|
||||||
try {
|
logger.warn("Can't close connection", e);
|
||||||
connection.close();
|
}
|
||||||
} catch (SQLException e) {
|
|
||||||
logger.warn("Can't close connection", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue