diff --git a/server_development/topics/user-storage/packaging.adoc b/server_development/topics/user-storage/packaging.adoc index 89366a02bc..d882a577da 100644 --- a/server_development/topics/user-storage/packaging.adoc +++ b/server_development/topics/user-storage/packaging.adoc @@ -1,14 +1,14 @@ === Packaging and Deployment -User Storage providers are packaged in a jar and deployed or undeployed to the {{book.project.name}} runtime in the same way you would deploy something in the JBoss/Wildfly application server. You can either copy the jar directly to the `deploy/` directory of the server, or use the JBoss CLI to execute the deployment. +User Storage providers are packaged in a JAR and deployed or undeployed to the {{book.project.name}} runtime in the same way you would deploy something in the JBoss/Wildfly application server. You can either copy the JAR directly to the `deploy/` directory of the server, or use the JBoss CLI to execute the deployment. -In order for {{book.project.name}} to recognize the provider, you need to add a file to the jar: `META-INF/services/org.keycloak.storage.UserStorageProviderFactory`. This file must contain a line-separated list of fully qualified classnames of the `UserStorageProviderFactory` implementation: +In order for {{book.project.name}} to recognize the provider, you need to add a file to the JAR: `META-INF/services/org.keycloak.storage.UserStorageProviderFactory`. This file must contain a line-separated list of fully qualified classnames of the `UserStorageProviderFactory` implementations: ---- org.keycloak.examples.federation.properties.ClasspathPropertiesStorageFactory org.keycloak.examples.federation.properties.FilePropertiesStorageFactory ---- -{{book.project.name}} supports hot deployment of these provider jars. You'll also see later in this chapter that you can package it within and as Java EE components. +{{book.project.name}} supports hot deployment of these provider JARs. You'll also see later in this chapter that you can package it within and as Java EE components. diff --git a/server_development/topics/user-storage/provider-capability-interfaces.adoc b/server_development/topics/user-storage/provider-capability-interfaces.adoc index d27e80b780..322a59be49 100644 --- a/server_development/topics/user-storage/provider-capability-interfaces.adoc +++ b/server_development/topics/user-storage/provider-capability-interfaces.adoc @@ -1,7 +1,7 @@ === Provider Capability Interfaces -If you've examined the `UserStorageProvider` interface closely you might notice that it does not define any methods for locating or managing users. These methods are actually defined in other _capability__interfaces_ depending on what scope of capabilities your external user store can provide and execute on. For example, some external stores are read-only and can only do simple queries and credential validation. You will only be required to implement the _capability_ _interfaces_ for the features you are able to. Here's a list of interfaces that you can implement: +If you have examined the `UserStorageProvider` interface closely you might notice that it does not define any methods for locating or managing users. These methods are actually defined in other _capability interfaces_ depending on what scope of capabilities your external user store can provide and execute on. For example, some external stores are read-only and can only do simple queries and credential validation. You will only be required to implement the _capability interfaces_ for the features you are able to. You can implement these interfaces: |=== diff --git a/server_development/topics/user-storage/provider-interfaces.adoc b/server_development/topics/user-storage/provider-interfaces.adoc index 8bf3b6778f..0f0070e3ca 100644 --- a/server_development/topics/user-storage/provider-interfaces.adoc +++ b/server_development/topics/user-storage/provider-interfaces.adoc @@ -51,12 +51,9 @@ public interface UserStorageProvider extends Provider { } ---- -You may be thinking that the `UserStorageProvider` interface is pretty sparse? You'll see later in this chapter that -there are other mix-in interfaces your provider class may implement to support the meat of user integration. +You may be thinking that the `UserStorageProvider` interface is pretty sparse? You'll see later in this chapter that there are other mix-in interfaces your provider class may implement to support the meat of user integration. -`UserStorageProvider` instances are created once per transaction. When the transaction is complete, the -`UserStorageProvider.close()` method is invoked and the instance is then garbage collected. Instances are created -by provider factories. Provider factories implement the `org.keycloak.storage.UserStorageProviderFactory` interface. +`UserStorageProvider` instances are created once per transaction. When the transaction is complete, the `UserStorageProvider.close()` method is invoked and the instance is then garbage collected. Instances are created by provider factories. Provider factories implement the `org.keycloak.storage.UserStorageProviderFactory` interface. [source,java] ---- diff --git a/server_development/topics/user-storage/simple-example.adoc b/server_development/topics/user-storage/simple-example.adoc index 4bb126c078..09ecb8fdff 100644 --- a/server_development/topics/user-storage/simple-example.adoc +++ b/server_development/topics/user-storage/simple-example.adoc @@ -90,7 +90,7 @@ Every get method of `AbstractUserAdapter` either returns null or empty collectio The `getUserById()` method parses the `id` parameter using the `org.keycloak.storage.StorageId' helper class. The `StorageId.getExternalId()` method is invoked to obtain the username embeded in the `id` parameter. The method then delegates to `getUserByUsername()`. -Emails are not stored, so the `getUserByEmail() method returns null. +Emails are not stored, so the `getUserByEmail()` method returns null. ===== CredentialInputValidator Implementation