keycloak-service
公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.provider.ProviderManager クラス
org.keycloak.provider.ProviderManager 連携図
Collaboration graph

公開メンバ関数

 ProviderManager (KeycloakDeploymentInfo info, ClassLoader baseClassLoader, String... resources)
 
synchronized List< Spi > loadSpis ()
 
synchronized List< ProviderFactory > load (Spi spi)
 
synchronized MultivaluedHashMap< Class<? extends Provider >, ProviderFactory > getLoadedFactories ()
 
synchronized ProviderFactory load (Spi spi, String providerId)
 

非公開変数類

List< ProviderLoader > loaders = new LinkedList<ProviderLoader>()
 
MultivaluedHashMap< Class<? extends Provider >, ProviderFactory > cache = new MultivaluedHashMap<>()
 

静的非公開変数類

static final Logger logger = Logger.getLogger(ProviderManager.class)
 

詳解

著者
Stian Thorgersen

構築子と解体子

◆ ProviderManager()

org.keycloak.provider.ProviderManager.ProviderManager ( KeycloakDeploymentInfo  info,
ClassLoader  baseClassLoader,
String...  resources 
)
inline
43  {
44  List<ProviderLoaderFactory> factories = new LinkedList<ProviderLoaderFactory>();
45  for (ProviderLoaderFactory f : ServiceLoader.load(ProviderLoaderFactory.class, getClass().getClassLoader())) {
46  factories.add(f);
47  }
48 
49  logger.debugv("Provider loaders {0}", factories);
50 
51  loaders.add(new DefaultProviderLoader(info, baseClassLoader));
52 
53  if (resources != null) {
54  for (String r : resources) {
55  String type = r.substring(0, r.indexOf(':'));
56  String resource = r.substring(r.indexOf(':') + 1, r.length());
57 
58  boolean found = false;
59  for (ProviderLoaderFactory f : factories) {
60  if (f.supports(type)) {
61  KeycloakDeploymentInfo resourceInfo = KeycloakDeploymentInfo.create().services();
62  loaders.add(f.create(resourceInfo, baseClassLoader, resource));
63  found = true;
64  break;
65  }
66  }
67  if (!found) {
68  throw new RuntimeException("Provider loader for " + r + " not found");
69  }
70  }
71  }
72  }
static final Logger logger
Definition: ProviderManager.java:37
List< ProviderLoader > loaders
Definition: ProviderManager.java:39

関数詳解

◆ getLoadedFactories()

synchronized MultivaluedHashMap<Class<? extends Provider>, ProviderFactory> org.keycloak.provider.ProviderManager.getLoadedFactories ( )
inline

returns a copy of internal factories.

戻り値
113  {
114  MultivaluedHashMap<Class<? extends Provider>, ProviderFactory> copy = new MultivaluedHashMap<>();
115  copy.addAll(cache);
116  return copy;
117  }
MultivaluedHashMap< Class<? extends Provider >, ProviderFactory > cache
Definition: ProviderManager.java:40

◆ load() [1/2]

synchronized List<ProviderFactory> org.keycloak.provider.ProviderManager.load ( Spi  spi)
inline
87  {
88  if (!cache.containsKey(spi.getProviderClass())) {
89 
90  Set<String> loaded = new HashSet<>();
91  for (ProviderLoader loader : loaders) {
92  List<ProviderFactory> f = loader.load(spi);
93  if (f != null) {
94  for (ProviderFactory pf: f) {
95  String uniqueId = spi.getName() + "-" + pf.getId();
96  if (!loaded.contains(uniqueId)) {
97  cache.add(spi.getProviderClass(), pf);
98  loaded.add(uniqueId);
99  }
100  }
101  }
102  }
103  }
104  List<ProviderFactory> rtn = cache.get(spi.getProviderClass());
105  return rtn == null ? Collections.EMPTY_LIST : rtn;
106  }
List< ProviderLoader > loaders
Definition: ProviderManager.java:39
MultivaluedHashMap< Class<? extends Provider >, ProviderFactory > cache
Definition: ProviderManager.java:40

◆ load() [2/2]

synchronized ProviderFactory org.keycloak.provider.ProviderManager.load ( Spi  spi,
String  providerId 
)
inline
119  {
120  for (ProviderFactory f : load(spi)) {
121  if (f.getId().equals(providerId)) {
122  return f;
123  }
124  }
125  return null;
126  }
synchronized List< ProviderFactory > load(Spi spi)
Definition: ProviderManager.java:87

◆ loadSpis()

synchronized List<Spi> org.keycloak.provider.ProviderManager.loadSpis ( )
inline
73  {
74  // Use a map to prevent duplicates, since the loaders may have overlapping classpaths.
75  Map<String, Spi> spiMap = new HashMap<>();
76  for (ProviderLoader loader : loaders) {
77  List<Spi> spis = loader.loadSpis();
78  if (spis != null) {
79  for (Spi spi : spis) {
80  spiMap.put(spi.getName(), spi);
81  }
82  }
83  }
84  return new LinkedList<>(spiMap.values());
85  }
List< ProviderLoader > loaders
Definition: ProviderManager.java:39

メンバ詳解

◆ cache

MultivaluedHashMap<Class<? extends Provider>, ProviderFactory> org.keycloak.provider.ProviderManager.cache = new MultivaluedHashMap<>()
private

◆ loaders

List<ProviderLoader> org.keycloak.provider.ProviderManager.loaders = new LinkedList<ProviderLoader>()
private

◆ logger

final Logger org.keycloak.provider.ProviderManager.logger = Logger.getLogger(ProviderManager.class)
staticprivate

このクラス詳解は次のファイルから抽出されました: