Skip to content

Commit

Permalink
[KEYCLOAK-11679] - Server startup on Quarkus
Browse files Browse the repository at this point in the history
  • Loading branch information
pedroigor committed May 26, 2020
1 parent 7deb89c commit f15821f
Show file tree
Hide file tree
Showing 13 changed files with 882 additions and 404 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
package org.keycloak.quarkus.deployment;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.persistence.spi.PersistenceUnitTransactionType;

import org.hibernate.cfg.AvailableSettings;
import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor;
import org.keycloak.Config;
import org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory;
import org.keycloak.connections.jpa.DelegatingDialect;
import org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProviderFactory;
import org.keycloak.connections.jpa.updater.liquibase.conn.DefaultLiquibaseConnectionProvider;
import org.keycloak.provider.KeycloakDeploymentInfo;
import org.keycloak.provider.ProviderFactory;
import org.keycloak.provider.ProviderManager;
import org.keycloak.provider.Spi;
import org.keycloak.runtime.KeycloakRecorder;
import org.keycloak.transaction.JBossJtaTransactionManagerLookup;

import io.quarkus.arc.deployment.BeanContainerListenerBuildItem;
import io.quarkus.deployment.annotations.BuildProducer;
Expand All @@ -15,7 +30,6 @@
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.hibernate.orm.deployment.PersistenceUnitDescriptorBuildItem;
import org.keycloak.runtime.KeycloakRecorder;

class KeycloakProcessor {

Expand All @@ -33,11 +47,55 @@ void configureHibernate(KeycloakRecorder recorder, List<PersistenceUnitDescripto
ParsedPersistenceXmlDescriptor unit = descriptors.get(0).getDescriptor();
unit.setTransactionType(PersistenceUnitTransactionType.JTA);
unit.getProperties().setProperty(AvailableSettings.DIALECT, DelegatingDialect.class.getName());
unit.getProperties().setProperty(AvailableSettings.QUERY_STARTUP_CHECKING, Boolean.FALSE.toString());
}

@Record(ExecutionTime.STATIC_INIT)
@BuildStep
void configureDataSource(KeycloakRecorder recorder, BuildProducer<BeanContainerListenerBuildItem> container) {
container.produce(new BeanContainerListenerBuildItem(recorder.configureDataSource()));
}

/**
* <p>Load the built-in provider factories during build time so we don't spend time looking up them at runtime.
*
* <p>User-defined providers are going to be loaded at startup</p>
*/
@Record(ExecutionTime.STATIC_INIT)
@BuildStep
void configureBuiltInProviders(KeycloakRecorder recorder, BuildProducer<BeanContainerListenerBuildItem> container) {
container.produce(new BeanContainerListenerBuildItem(recorder.configSessionFactory(loadBuiltInFactories())));
}

private Map<Spi, Set<Class<? extends ProviderFactory>>> loadBuiltInFactories() {
ProviderManager pm = new ProviderManager(
KeycloakDeploymentInfo.create().services(), getClass().getClassLoader(), Config.scope().getArray("providers"));
Map<Spi, Set<Class<? extends ProviderFactory>>> result = new HashMap<>();

for (Spi spi : pm.loadSpis()) {
List<ProviderFactory> loaded = pm.load(spi);

if (loaded.isEmpty()) {
continue;
}

Set<Class<? extends ProviderFactory>> factories = new HashSet<>();

for (ProviderFactory factory : loaded) {
if (Arrays.asList(
JBossJtaTransactionManagerLookup.class,
DefaultJpaConnectionProviderFactory.class,
DefaultLiquibaseConnectionProvider.class,
LiquibaseJpaUpdaterProviderFactory.class).contains(factory.getClass())) {
continue;
}

factories.add(factory.getClass());
}

result.put(spi, factories);
}

return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

public class TestStartup {
public class StartupTest {

@RegisterExtension
static final QuarkusUnitTest test = new QuarkusUnitTest()
Expand Down
2 changes: 1 addition & 1 deletion quarkus/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
<packaging>pom</packaging>

<properties>
<quarkus.version>999-SNAPSHOT</quarkus.version>
<quarkus.version>1.5.0.CR1</quarkus.version>
<resteasy.version>4.5.3.Final</resteasy.version>
<jackson.version>2.10.2</jackson.version>
<jackson.databind.version>${jackson.version}</jackson.databind.version>
Expand Down
Loading

0 comments on commit f15821f

Please sign in to comment.