1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa;
20
21 import java.util.HashMap;
22 import java.util.Map;
23 import javax.persistence.ValidationMode;
24 import javax.validation.Validator;
25 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
26 import org.apache.syncope.common.keymaster.client.api.DomainOps;
27 import org.apache.syncope.core.persistence.api.DomainHolder;
28 import org.apache.syncope.core.persistence.api.DomainRegistry;
29 import org.apache.syncope.core.persistence.api.attrvalue.validation.PlainAttrValidationManager;
30 import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO;
31 import org.apache.syncope.core.persistence.api.dao.AnyMatchDAO;
32 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
33 import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
34 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
35 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
36 import org.apache.syncope.core.persistence.api.dao.ApplicationDAO;
37 import org.apache.syncope.core.persistence.api.dao.AttrRepoDAO;
38 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
39 import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
40 import org.apache.syncope.core.persistence.api.dao.AuthProfileDAO;
41 import org.apache.syncope.core.persistence.api.dao.BatchDAO;
42 import org.apache.syncope.core.persistence.api.dao.CASSPClientAppDAO;
43 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
44 import org.apache.syncope.core.persistence.api.dao.DelegationDAO;
45 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
46 import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
47 import org.apache.syncope.core.persistence.api.dao.EntityCacheDAO;
48 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
49 import org.apache.syncope.core.persistence.api.dao.FIQLQueryDAO;
50 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
51 import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
52 import org.apache.syncope.core.persistence.api.dao.JobStatusDAO;
53 import org.apache.syncope.core.persistence.api.dao.MailTemplateDAO;
54 import org.apache.syncope.core.persistence.api.dao.NotificationDAO;
55 import org.apache.syncope.core.persistence.api.dao.OIDCJWKSDAO;
56 import org.apache.syncope.core.persistence.api.dao.OIDCRPClientAppDAO;
57 import org.apache.syncope.core.persistence.api.dao.PersistenceInfoDAO;
58 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
59 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
60 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
61 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
62 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
63 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
64 import org.apache.syncope.core.persistence.api.dao.RemediationDAO;
65 import org.apache.syncope.core.persistence.api.dao.ReportDAO;
66 import org.apache.syncope.core.persistence.api.dao.ReportExecDAO;
67 import org.apache.syncope.core.persistence.api.dao.RoleDAO;
68 import org.apache.syncope.core.persistence.api.dao.SAML2IdPEntityDAO;
69 import org.apache.syncope.core.persistence.api.dao.SAML2SPClientAppDAO;
70 import org.apache.syncope.core.persistence.api.dao.SAML2SPEntityDAO;
71 import org.apache.syncope.core.persistence.api.dao.SRARouteDAO;
72 import org.apache.syncope.core.persistence.api.dao.SecurityQuestionDAO;
73 import org.apache.syncope.core.persistence.api.dao.TaskDAO;
74 import org.apache.syncope.core.persistence.api.dao.TaskExecDAO;
75 import org.apache.syncope.core.persistence.api.dao.UserDAO;
76 import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
77 import org.apache.syncope.core.persistence.api.dao.WAConfigDAO;
78 import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
79 import org.apache.syncope.core.persistence.api.entity.EntityFactory;
80 import org.apache.syncope.core.persistence.api.entity.am.ClientAppUtilsFactory;
81 import org.apache.syncope.core.persistence.api.entity.policy.PolicyUtilsFactory;
82 import org.apache.syncope.core.persistence.api.entity.task.TaskUtilsFactory;
83 import org.apache.syncope.core.persistence.api.search.SearchCondVisitor;
84 import org.apache.syncope.core.persistence.jpa.attrvalue.validation.DefaultPlainAttrValidationManager;
85 import org.apache.syncope.core.persistence.jpa.content.KeymasterConfParamLoader;
86 import org.apache.syncope.core.persistence.jpa.content.XMLContentExporter;
87 import org.apache.syncope.core.persistence.jpa.content.XMLContentLoader;
88 import org.apache.syncope.core.persistence.jpa.dao.JPAAccessTokenDAO;
89 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyMatchDAO;
90 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyObjectDAO;
91 import org.apache.syncope.core.persistence.jpa.dao.JPAAnySearchDAO;
92 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyTypeClassDAO;
93 import org.apache.syncope.core.persistence.jpa.dao.JPAAnyTypeDAO;
94 import org.apache.syncope.core.persistence.jpa.dao.JPAApplicationDAO;
95 import org.apache.syncope.core.persistence.jpa.dao.JPAAttrRepoDAO;
96 import org.apache.syncope.core.persistence.jpa.dao.JPAAuditConfDAO;
97 import org.apache.syncope.core.persistence.jpa.dao.JPAAuthModuleDAO;
98 import org.apache.syncope.core.persistence.jpa.dao.JPAAuthProfileDAO;
99 import org.apache.syncope.core.persistence.jpa.dao.JPABatchDAO;
100 import org.apache.syncope.core.persistence.jpa.dao.JPACASSPClientAppDAO;
101 import org.apache.syncope.core.persistence.jpa.dao.JPAConnInstanceDAO;
102 import org.apache.syncope.core.persistence.jpa.dao.JPADelegationDAO;
103 import org.apache.syncope.core.persistence.jpa.dao.JPADerSchemaDAO;
104 import org.apache.syncope.core.persistence.jpa.dao.JPADynRealmDAO;
105 import org.apache.syncope.core.persistence.jpa.dao.JPAEntityCacheDAO;
106 import org.apache.syncope.core.persistence.jpa.dao.JPAExternalResourceDAO;
107 import org.apache.syncope.core.persistence.jpa.dao.JPAFIQLQueryDAO;
108 import org.apache.syncope.core.persistence.jpa.dao.JPAGroupDAO;
109 import org.apache.syncope.core.persistence.jpa.dao.JPAImplementationDAO;
110 import org.apache.syncope.core.persistence.jpa.dao.JPAJobStatusDAO;
111 import org.apache.syncope.core.persistence.jpa.dao.JPAMailTemplateDAO;
112 import org.apache.syncope.core.persistence.jpa.dao.JPANotificationDAO;
113 import org.apache.syncope.core.persistence.jpa.dao.JPAOIDCJWKSDAO;
114 import org.apache.syncope.core.persistence.jpa.dao.JPAOIDCRPClientAppDAO;
115 import org.apache.syncope.core.persistence.jpa.dao.JPAPersistenceInfoDAO;
116 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainAttrDAO;
117 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainAttrValueDAO;
118 import org.apache.syncope.core.persistence.jpa.dao.JPAPlainSchemaDAO;
119 import org.apache.syncope.core.persistence.jpa.dao.JPAPolicyDAO;
120 import org.apache.syncope.core.persistence.jpa.dao.JPARealmDAO;
121 import org.apache.syncope.core.persistence.jpa.dao.JPARelationshipTypeDAO;
122 import org.apache.syncope.core.persistence.jpa.dao.JPARemediationDAO;
123 import org.apache.syncope.core.persistence.jpa.dao.JPAReportDAO;
124 import org.apache.syncope.core.persistence.jpa.dao.JPAReportExecDAO;
125 import org.apache.syncope.core.persistence.jpa.dao.JPARoleDAO;
126 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2IdPEntityDAO;
127 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2SPClientAppDAO;
128 import org.apache.syncope.core.persistence.jpa.dao.JPASAML2SPEntityDAO;
129 import org.apache.syncope.core.persistence.jpa.dao.JPASRARouteDAO;
130 import org.apache.syncope.core.persistence.jpa.dao.JPASecurityQuestionDAO;
131 import org.apache.syncope.core.persistence.jpa.dao.JPATaskDAO;
132 import org.apache.syncope.core.persistence.jpa.dao.JPATaskExecDAO;
133 import org.apache.syncope.core.persistence.jpa.dao.JPAUserDAO;
134 import org.apache.syncope.core.persistence.jpa.dao.JPAVirSchemaDAO;
135 import org.apache.syncope.core.persistence.jpa.dao.JPAWAConfigDAO;
136 import org.apache.syncope.core.persistence.jpa.entity.JPAAnyUtilsFactory;
137 import org.apache.syncope.core.persistence.jpa.entity.JPAEntityFactory;
138 import org.apache.syncope.core.persistence.jpa.entity.am.JPAClientAppUtilsFactory;
139 import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPolicyUtilsFactory;
140 import org.apache.syncope.core.persistence.jpa.entity.task.JPATaskUtilsFactory;
141 import org.apache.syncope.core.persistence.jpa.spring.CommonEntityManagerFactoryConf;
142 import org.apache.syncope.core.persistence.jpa.spring.DomainTransactionInterceptorInjector;
143 import org.apache.syncope.core.persistence.jpa.spring.MultiJarAwarePersistenceUnitPostProcessor;
144 import org.apache.syncope.core.spring.security.SecurityProperties;
145 import org.slf4j.Logger;
146 import org.slf4j.LoggerFactory;
147 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
148 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
149 import org.springframework.boot.context.properties.EnableConfigurationProperties;
150 import org.springframework.context.ApplicationEventPublisher;
151 import org.springframework.context.ConfigurableApplicationContext;
152 import org.springframework.context.annotation.Bean;
153 import org.springframework.context.annotation.Configuration;
154 import org.springframework.context.annotation.Lazy;
155 import org.springframework.core.env.Environment;
156 import org.springframework.core.io.ResourceLoader;
157 import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
158
159 @EnableConfigurationProperties(PersistenceProperties.class)
160 @Configuration(proxyBeanMethods = false)
161 public class PersistenceContext {
162
163 private static final Logger OPENJPA_LOG = LoggerFactory.getLogger("org.apache.openjpa");
164
165 @Bean
166 public static BeanFactoryPostProcessor domainTransactionInterceptorInjector() {
167 return new DomainTransactionInterceptorInjector();
168 }
169
170 @ConditionalOnMissingBean
171 @Bean
172 public SearchCondVisitor searchCondVisitor() {
173 return new SearchCondVisitor();
174 }
175
176 @Bean
177 public Validator localValidatorFactoryBean() {
178 return new LocalValidatorFactoryBean();
179 }
180
181 @ConditionalOnMissingBean
182 @Bean
183 public PlainAttrValidationManager plainAttrValidationManager() {
184 return new DefaultPlainAttrValidationManager();
185 }
186
187 @ConditionalOnMissingBean
188 @Bean
189 public CommonEntityManagerFactoryConf commonEMFConf(final PersistenceProperties persistenceProperties) {
190 CommonEntityManagerFactoryConf commonEMFConf = new CommonEntityManagerFactoryConf();
191 commonEMFConf.setPackagesToScan("org.apache.syncope.core.persistence.jpa.entity");
192 commonEMFConf.setValidationMode(ValidationMode.NONE);
193 commonEMFConf.setPersistenceUnitPostProcessors(new MultiJarAwarePersistenceUnitPostProcessor());
194 Map<String, Object> jpaPropertyMap = new HashMap<>();
195
196 jpaPropertyMap.put("openjpa.Log", "slf4j");
197 if (OPENJPA_LOG.isDebugEnabled()) {
198 jpaPropertyMap.put("openjpa.Log", "SQL=TRACE");
199 jpaPropertyMap.put("openjpa.ConnectionFactoryProperties",
200 "PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=120");
201 }
202
203 jpaPropertyMap.put("openjpa.NontransactionalWrite", false);
204
205 jpaPropertyMap.put("openjpa.jdbc.MappingDefaults",
206 "ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict,"
207 + "FieldStrategies='"
208 + "java.util.Locale=org.apache.syncope.core.persistence.jpa.openjpa.LocaleValueHandler,"
209 + "java.lang.Boolean=org.apache.syncope.core.persistence.jpa.openjpa.BooleanValueHandler'");
210
211 jpaPropertyMap.put("openjpa.DataCache", "true");
212 jpaPropertyMap.put("openjpa.QueryCache", "true");
213
214 jpaPropertyMap.put("openjpa.RemoteCommitProvider", persistenceProperties.getRemoteCommitProvider());
215
216 commonEMFConf.setJpaPropertyMap(jpaPropertyMap);
217 return commonEMFConf;
218 }
219
220 @ConditionalOnMissingBean
221 @Bean
222 public XMLContentLoader xmlContentLoader(
223 final PersistenceProperties persistenceProperties,
224 final ResourceLoader resourceLoader,
225 final Environment env) {
226
227 return new XMLContentLoader(
228 resourceLoader.getResource(persistenceProperties.getViewsXML()),
229 resourceLoader.getResource(persistenceProperties.getIndexesXML()),
230 env);
231 }
232
233 @ConditionalOnMissingBean
234 @Bean
235 public XMLContentExporter xmlContentExporter(final DomainHolder domainHolder, final RealmDAO realmDAO) {
236 return new XMLContentExporter(domainHolder, realmDAO);
237 }
238
239 @ConditionalOnMissingBean
240 @Bean
241 public KeymasterConfParamLoader keymasterConfParamLoader(final ConfParamOps confParamOps) {
242 return new KeymasterConfParamLoader(confParamOps);
243 }
244
245 @ConditionalOnMissingBean
246 @Bean
247 public DomainRegistry domainRegistry(final ConfigurableApplicationContext ctx) {
248 return new DomainConfFactory(ctx);
249 }
250
251 @ConditionalOnMissingBean
252 @Bean
253 public RuntimeDomainLoader runtimeDomainLoader(
254 final DomainHolder domainHolder,
255 final DomainRegistry domainRegistry,
256 final ConfigurableApplicationContext ctx) {
257
258 return new RuntimeDomainLoader(domainHolder, domainRegistry, ctx);
259 }
260
261 @ConditionalOnMissingBean
262 @Bean
263 public StartupDomainLoader startupDomainLoader(
264 final PersistenceProperties persistenceProperties,
265 final ResourceLoader resourceLoader,
266 final DomainOps domainOps,
267 final DomainHolder domainHolder,
268 final DomainRegistry domainRegistry) {
269
270 return new StartupDomainLoader(domainOps, domainHolder, persistenceProperties, resourceLoader, domainRegistry);
271 }
272
273 @ConditionalOnMissingBean
274 @Bean
275 public EntityFactory entityFactory() {
276 return new JPAEntityFactory();
277 }
278
279 @ConditionalOnMissingBean
280 @Bean
281 public AnyUtilsFactory anyUtilsFactory(
282 final @Lazy UserDAO userDAO,
283 final @Lazy GroupDAO groupDAO,
284 final @Lazy AnyObjectDAO anyObjectDAO,
285 final @Lazy EntityFactory entityFactory) {
286
287 return new JPAAnyUtilsFactory(userDAO, groupDAO, anyObjectDAO, entityFactory);
288 }
289
290 @ConditionalOnMissingBean
291 @Bean
292 public ClientAppUtilsFactory clientAppUtilsFactory() {
293 return new JPAClientAppUtilsFactory();
294 }
295
296 @ConditionalOnMissingBean
297 @Bean
298 public PolicyUtilsFactory policyUtilsFactory() {
299 return new JPAPolicyUtilsFactory();
300 }
301
302 @ConditionalOnMissingBean
303 @Bean
304 public TaskUtilsFactory taskUtilsFactory() {
305 return new JPATaskUtilsFactory();
306 }
307
308 @ConditionalOnMissingBean
309 @Bean
310 public EntityCacheDAO entityCacheDAO() {
311 return new JPAEntityCacheDAO();
312 }
313
314 @ConditionalOnMissingBean
315 @Bean
316 public PersistenceInfoDAO persistenceInfoDAO() {
317 return new JPAPersistenceInfoDAO();
318 }
319
320 @ConditionalOnMissingBean
321 @Bean
322 public AccessTokenDAO accessTokenDAO() {
323 return new JPAAccessTokenDAO();
324 }
325
326 @ConditionalOnMissingBean
327 @Bean
328 public ApplicationDAO applicationDAO(final RoleDAO roleDAO, final @Lazy UserDAO userDAO) {
329 return new JPAApplicationDAO(roleDAO, userDAO);
330 }
331
332 @ConditionalOnMissingBean
333 @Bean
334 public AnyMatchDAO anyMatchDAO(
335 final @Lazy UserDAO userDAO,
336 final @Lazy GroupDAO groupDAO,
337 final @Lazy AnyObjectDAO anyObjectDAO,
338 final RealmDAO realmDAO,
339 final PlainSchemaDAO plainSchemaDAO,
340 final AnyUtilsFactory anyUtilsFactory,
341 final PlainAttrValidationManager validator) {
342
343 return new JPAAnyMatchDAO(
344 userDAO,
345 groupDAO,
346 anyObjectDAO,
347 realmDAO,
348 plainSchemaDAO,
349 anyUtilsFactory,
350 validator);
351 }
352
353 @ConditionalOnMissingBean
354 @Bean
355 public AnyObjectDAO anyObjectDAO(
356 final AnyUtilsFactory anyUtilsFactory,
357 final @Lazy PlainSchemaDAO plainSchemaDAO,
358 final @Lazy DerSchemaDAO derSchemaDAO,
359 final @Lazy DynRealmDAO dynRealmDAO,
360 final @Lazy UserDAO userDAO,
361 final @Lazy GroupDAO groupDAO) {
362
363 return new JPAAnyObjectDAO(
364 anyUtilsFactory,
365 plainSchemaDAO,
366 derSchemaDAO,
367 dynRealmDAO,
368 userDAO,
369 groupDAO);
370 }
371
372 @ConditionalOnMissingBean
373 @Bean
374 public AnySearchDAO anySearchDAO(
375 final RealmDAO realmDAO,
376 final @Lazy DynRealmDAO dynRealmDAO,
377 final @Lazy UserDAO userDAO,
378 final @Lazy GroupDAO groupDAO,
379 final @Lazy AnyObjectDAO anyObjectDAO,
380 final PlainSchemaDAO schemaDAO,
381 final EntityFactory entityFactory,
382 final AnyUtilsFactory anyUtilsFactory,
383 final PlainAttrValidationManager validator) {
384
385 return new JPAAnySearchDAO(
386 realmDAO,
387 dynRealmDAO,
388 userDAO,
389 groupDAO,
390 anyObjectDAO,
391 schemaDAO,
392 entityFactory,
393 anyUtilsFactory,
394 validator);
395 }
396
397 @ConditionalOnMissingBean
398 @Bean
399 public AnyTypeDAO anyTypeDAO(final RemediationDAO remediationDAO) {
400 return new JPAAnyTypeDAO(remediationDAO);
401 }
402
403 @ConditionalOnMissingBean
404 @Bean
405 public AnyTypeClassDAO anyTypeClassDAO(
406 final AnyTypeDAO anyTypeDAO,
407 final PlainSchemaDAO plainSchemaDAO,
408 final DerSchemaDAO derSchemaDAO,
409 final VirSchemaDAO virSchemaDAO,
410 final @Lazy GroupDAO groupDAO,
411 final ExternalResourceDAO resourceDAO) {
412
413 return new JPAAnyTypeClassDAO(anyTypeDAO, plainSchemaDAO, derSchemaDAO, virSchemaDAO, groupDAO, resourceDAO);
414 }
415
416 @ConditionalOnMissingBean
417 @Bean
418 public AuditConfDAO auditConfDAO() {
419 return new JPAAuditConfDAO();
420 }
421
422 @ConditionalOnMissingBean
423 @Bean
424 public AuthModuleDAO authModuleDAO(final PolicyDAO policyDAO) {
425 return new JPAAuthModuleDAO(policyDAO);
426 }
427
428 @ConditionalOnMissingBean
429 @Bean
430 public AttrRepoDAO attrRepoDAO() {
431 return new JPAAttrRepoDAO();
432 }
433
434 @ConditionalOnMissingBean
435 @Bean
436 public AuthProfileDAO authProfileDAO() {
437 return new JPAAuthProfileDAO();
438 }
439
440 @ConditionalOnMissingBean
441 @Bean
442 public BatchDAO batchDAO() {
443 return new JPABatchDAO();
444 }
445
446 @ConditionalOnMissingBean
447 @Bean
448 public CASSPClientAppDAO casSPClientAppDAO() {
449 return new JPACASSPClientAppDAO();
450 }
451
452 @ConditionalOnMissingBean
453 @Bean
454 public ConnInstanceDAO connInstanceDAO(final @Lazy ExternalResourceDAO resourceDAO) {
455 return new JPAConnInstanceDAO(resourceDAO);
456 }
457
458 @ConditionalOnMissingBean
459 @Bean
460 public DelegationDAO delegationDAO() {
461 return new JPADelegationDAO();
462 }
463
464 @ConditionalOnMissingBean
465 @Bean
466 public FIQLQueryDAO fiqlQueryDAO() {
467 return new JPAFIQLQueryDAO();
468 }
469
470 @ConditionalOnMissingBean
471 @Bean
472 public DerSchemaDAO derSchemaDAO(final @Lazy ExternalResourceDAO resourceDAO) {
473 return new JPADerSchemaDAO(resourceDAO);
474 }
475
476 @ConditionalOnMissingBean
477 @Bean
478 public DynRealmDAO dynRealmDAO(
479 final ApplicationEventPublisher publisher,
480 final @Lazy UserDAO userDAO,
481 final @Lazy GroupDAO groupDAO,
482 final @Lazy AnyObjectDAO anyObjectDAO,
483 final AnySearchDAO searchDAO,
484 final AnyMatchDAO anyMatchDAO,
485 final SearchCondVisitor searchCondVisitor) {
486
487 return new JPADynRealmDAO(
488 publisher,
489 userDAO,
490 groupDAO,
491 anyObjectDAO,
492 searchDAO,
493 anyMatchDAO,
494 searchCondVisitor);
495 }
496
497 @ConditionalOnMissingBean
498 @Bean
499 public GroupDAO groupDAO(
500 final ApplicationEventPublisher publisher,
501 final AnyUtilsFactory anyUtilsFactory,
502 final @Lazy PlainSchemaDAO plainSchemaDAO,
503 final @Lazy DerSchemaDAO derSchemaDAO,
504 final @Lazy DynRealmDAO dynRealmDAO,
505 final AnyMatchDAO anyMatchDAO,
506 final PlainAttrDAO plainAttrDAO,
507 final @Lazy UserDAO userDAO,
508 final @Lazy AnyObjectDAO anyObjectDAO,
509 final AnySearchDAO anySearchDAO,
510 final SearchCondVisitor searchCondVisitor) {
511
512 return new JPAGroupDAO(
513 anyUtilsFactory,
514 publisher,
515 plainSchemaDAO,
516 derSchemaDAO,
517 dynRealmDAO,
518 anyMatchDAO,
519 plainAttrDAO,
520 userDAO,
521 anyObjectDAO,
522 anySearchDAO,
523 searchCondVisitor);
524 }
525
526 @ConditionalOnMissingBean
527 @Bean
528 public ImplementationDAO implementationDAO(
529 final @Lazy ExternalResourceDAO resourceDAO,
530 final @Lazy EntityCacheDAO entityCacheDAO) {
531
532 return new JPAImplementationDAO(resourceDAO, entityCacheDAO);
533 }
534
535 @ConditionalOnMissingBean
536 @Bean
537 public JobStatusDAO jobStatusDAO() {
538 return new JPAJobStatusDAO();
539 }
540
541 @ConditionalOnMissingBean
542 @Bean
543 public MailTemplateDAO mailTemplateDAO() {
544 return new JPAMailTemplateDAO();
545 }
546
547 @ConditionalOnMissingBean
548 @Bean
549 public NotificationDAO notificationDAO(final TaskDAO taskDAO) {
550 return new JPANotificationDAO(taskDAO);
551 }
552
553 @ConditionalOnMissingBean
554 @Bean
555 public OIDCJWKSDAO oidcJWKSDAO() {
556 return new JPAOIDCJWKSDAO();
557 }
558
559 @ConditionalOnMissingBean
560 @Bean
561 public OIDCRPClientAppDAO oidcRPClientAppDAO() {
562 return new JPAOIDCRPClientAppDAO();
563 }
564
565 @ConditionalOnMissingBean
566 @Bean
567 public PlainAttrDAO plainAttrDAO() {
568 return new JPAPlainAttrDAO();
569 }
570
571 @ConditionalOnMissingBean
572 @Bean
573 public PlainAttrValueDAO plainAttrValueDAO() {
574 return new JPAPlainAttrValueDAO();
575 }
576
577 @ConditionalOnMissingBean
578 @Bean
579 public PlainSchemaDAO plainSchemaDAO(
580 final AnyUtilsFactory anyUtilsFactory,
581 final PlainAttrDAO plainAttrDAO,
582 final @Lazy ExternalResourceDAO resourceDAO) {
583
584 return new JPAPlainSchemaDAO(anyUtilsFactory, plainAttrDAO, resourceDAO);
585 }
586
587 @ConditionalOnMissingBean
588 @Bean
589 public PolicyDAO policyDAO(
590 final @Lazy RealmDAO realmDAO,
591 final @Lazy ExternalResourceDAO resourceDAO,
592 final @Lazy CASSPClientAppDAO casSPClientAppDAO,
593 final @Lazy OIDCRPClientAppDAO oidcRPClientAppDAO,
594 final @Lazy SAML2SPClientAppDAO saml2SPClientAppDAO,
595 final @Lazy EntityCacheDAO entityCacheDAO) {
596
597 return new JPAPolicyDAO(
598 realmDAO,
599 resourceDAO,
600 casSPClientAppDAO,
601 oidcRPClientAppDAO,
602 saml2SPClientAppDAO,
603 entityCacheDAO);
604 }
605
606 @ConditionalOnMissingBean
607 @Bean
608 public RealmDAO realmDAO(final @Lazy RoleDAO roleDAO, final ApplicationEventPublisher publisher) {
609 return new JPARealmDAO(roleDAO, publisher);
610 }
611
612 @ConditionalOnMissingBean
613 @Bean
614 public RelationshipTypeDAO relationshipTypeDAO() {
615 return new JPARelationshipTypeDAO();
616 }
617
618 @ConditionalOnMissingBean
619 @Bean
620 public RemediationDAO remediationDAO() {
621 return new JPARemediationDAO();
622 }
623
624 @ConditionalOnMissingBean
625 @Bean
626 public ReportDAO reportDAO() {
627 return new JPAReportDAO();
628 }
629
630 @ConditionalOnMissingBean
631 @Bean
632 public ReportExecDAO reportExecDAO() {
633 return new JPAReportExecDAO();
634 }
635
636 @ConditionalOnMissingBean
637 @Bean
638 public ExternalResourceDAO resourceDAO(
639 final TaskDAO taskDAO,
640 final AnyObjectDAO anyObjectDAO,
641 final UserDAO userDAO,
642 final GroupDAO groupDAO,
643 final PolicyDAO policyDAO,
644 final VirSchemaDAO virSchemaDAO,
645 final RealmDAO realmDAO) {
646
647 return new JPAExternalResourceDAO(taskDAO, anyObjectDAO, userDAO, groupDAO, policyDAO, virSchemaDAO, realmDAO);
648 }
649
650 @ConditionalOnMissingBean
651 @Bean
652 public RoleDAO roleDAO(
653 final ApplicationEventPublisher publisher,
654 final @Lazy AnyMatchDAO anyMatchDAO,
655 final @Lazy AnySearchDAO anySearchDAO,
656 final DelegationDAO delegationDAO,
657 final SearchCondVisitor searchCondVisitor) {
658
659 return new JPARoleDAO(anyMatchDAO, publisher, anySearchDAO, delegationDAO, searchCondVisitor);
660 }
661
662 @ConditionalOnMissingBean
663 @Bean
664 public SAML2SPClientAppDAO saml2SPClientAppDAO() {
665 return new JPASAML2SPClientAppDAO();
666 }
667
668 @ConditionalOnMissingBean
669 @Bean
670 public SAML2IdPEntityDAO saml2IdPEntityDAO() {
671 return new JPASAML2IdPEntityDAO();
672 }
673
674 @ConditionalOnMissingBean
675 @Bean
676 public SAML2SPEntityDAO saml2SPEntityDAO() {
677 return new JPASAML2SPEntityDAO();
678 }
679
680 @ConditionalOnMissingBean
681 @Bean
682 public SecurityQuestionDAO securityQuestionDAO(final UserDAO userDAO) {
683 return new JPASecurityQuestionDAO(userDAO);
684 }
685
686 @ConditionalOnMissingBean
687 @Bean
688 public SRARouteDAO sraRouteDAO() {
689 return new JPASRARouteDAO();
690 }
691
692 @ConditionalOnMissingBean
693 @Bean
694 public TaskDAO taskDAO(
695 final RealmDAO realmDAO,
696 final RemediationDAO remediationDAO,
697 final TaskUtilsFactory taskUtilsFactory,
698 final SecurityProperties securityProperties) {
699
700 return new JPATaskDAO(realmDAO, remediationDAO, taskUtilsFactory, securityProperties);
701 }
702
703 @ConditionalOnMissingBean
704 @Bean
705 public TaskExecDAO taskExecDAO(final TaskDAO taskDAO, final TaskUtilsFactory taskUtilsFactory) {
706 return new JPATaskExecDAO(taskDAO, taskUtilsFactory);
707 }
708
709 @ConditionalOnMissingBean
710 @Bean
711 public UserDAO userDAO(
712 final SecurityProperties securityProperties,
713 final AnyUtilsFactory anyUtilsFactory,
714 final @Lazy PlainSchemaDAO plainSchemaDAO,
715 final @Lazy DerSchemaDAO derSchemaDAO,
716 final @Lazy DynRealmDAO dynRealmDAO,
717 final RoleDAO roleDAO,
718 final AccessTokenDAO accessTokenDAO,
719 final @Lazy GroupDAO groupDAO,
720 final DelegationDAO delegationDAO,
721 final FIQLQueryDAO fiqlQueryDAO) {
722
723 return new JPAUserDAO(
724 anyUtilsFactory,
725 plainSchemaDAO,
726 derSchemaDAO,
727 dynRealmDAO,
728 roleDAO,
729 accessTokenDAO,
730 groupDAO,
731 delegationDAO,
732 fiqlQueryDAO,
733 securityProperties);
734 }
735
736 @ConditionalOnMissingBean
737 @Bean
738 public VirSchemaDAO virSchemaDAO(final @Lazy ExternalResourceDAO resourceDAO) {
739 return new JPAVirSchemaDAO(resourceDAO);
740 }
741
742 @ConditionalOnMissingBean
743 @Bean
744 public WAConfigDAO waConfigDAO() {
745 return new JPAWAConfigDAO();
746 }
747 }