Hi cas-users, 

Using CAS 6.4.4.2 with MongoDB for Service-, Ticket-Registry and 
Session-Storage at the same time fails to auto-configure in my setup. 

My observations so far:

1. Adding 
------------------------------------------------------------------------------------------------
implementation 
"org.apereo.cas:cas-server-support-session-mongo:${project.'cas.version'}"
------------------------------------------------------------------------------------------------

to build.gradle only,  also requires to re-enable MongoAutoConfiguration 
and MongoDataAutoConfigration by overriding config key 
spring.autoconfigure.exclude since 
/webapp/cas-server-webapp-resources/src/main/resources/application.properties 
disables it:

------------------------------------------------------------------------------------------------
 spring.autoconfigure.exclude= \
   org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
   org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
  
 org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
------------------------------------------------------------------------------------------------

otherwise no MongoTemplate is found at all:

------------------------------------------------------------------------------------------------
**************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method mongoSessionRepository in 
org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration
 
required a bean of type 
'org.springframework.data.mongodb.core.MongoOperations' that could not be 
found.


Action:

Consider defining a bean of type 
'org.springframework.data.mongodb.core.MongoOperations' in your 
configuration.
------------------------------------------------------------------------------------------------


2. Additionally enabling 

------------------------------------------------------------------------------------------------
implementation 
"org.apereo.cas:cas-server-support-mongo-service-registry:${project.'cas.version'}"
implementation 
"org.apereo.cas:cas-server-support-mongo-ticket-registry:${project.'cas.version'}"
------------------------------------------------------------------------------------------------

Modules cas-server-support-mongo-service-registry and 
cas-server-support-mongo-ticket-registry both configure named MongoTemplate 
beans, which they actually do even use themselves, but lead to ambiguity 
when resolving a single candidate for the cas-server-support-session-mongo 
module.

Removing these @Bean definitions solves this problem:

------------------------------------------------------------------------------------------------
diff --git 
a/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
 
b/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
index 0227845922..9ed3aea44d 100644
--- 
a/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
+++ 
b/support/cas-server-support-mongo-service-registry/src/main/java/org/apereo/cas/config/MongoDbServiceRegistryConfiguration.java
@@ -47,9 +47,7 @@ public class MongoDbServiceRegistryConfiguration {
     @Qualifier("sslContext")
     private ObjectProvider<SSLContext> sslContext;
 
-    @ConditionalOnMissingBean(name = "mongoDbServiceRegistryTemplate")
-    @Bean
-    public MongoTemplate mongoDbServiceRegistryTemplate() {
+    private MongoTemplate mongoDbServiceRegistryTemplate() {
         val mongo = casProperties.getServiceRegistry().getMongo();
         val factory = new MongoDbConnectionFactory(sslContext.getObject());
 
diff --git 
a/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
 
b/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
index 0a5b538a33..9195ff88a7 100644
--- 
a/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
+++ 
b/support/cas-server-support-mongo-ticket-registry/src/main/java/org/apereo/cas/config/MongoDbTicketRegistryConfiguration.java
@@ -55,10 +55,7 @@ public class MongoDbTicketRegistryConfiguration {
         return registry;
     }
 
-    @ConditionalOnMissingBean(name = "mongoDbTicketRegistryTemplate")
-    @Bean
-    @RefreshScope
-    public MongoTemplate mongoDbTicketRegistryTemplate() {
+    private MongoTemplate mongoDbTicketRegistryTemplate() {
         val factory = new MongoDbConnectionFactory(sslContext.getObject());
         val mongo = casProperties.getTicket().getRegistry().getMongo();
         return factory.buildMongoTemplate(mongo);
------------------------------------------------------------------------------------------------

otherwise it fails with 

------------------------------------------------------------------------------------------------
***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method mongoSessionRepository in 
org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration
 
required a single bean, but 2 were found:
        - mongoDbServiceRegistryTemplate: defined by method 
'mongoDbServiceRegistryTemplate' in class path resource 
[org/apereo/cas/config/MongoDbServiceRegistryConfiguration.class]
        - mongoDbTicketRegistryTemplate: defined in BeanDefinition defined 
in class path resource 
[org/apereo/cas/config/MongoDbTicketRegistryConfiguration.class]


Action:

Consider marking one of the beans as @Primary, updating the consumer to 
accept multiple beans, or using @Qualifier to identify the bean that should 
be consumed
------------------------------------------------------------------------------------------------

My question now is, how can I fix this nonfunctional behavior without 
patching the original CAS 6.4.4.2 modules 
cas-server-support-mongo-service-registry and 
cas-server-support-mongo-ticket-registry? Is there better, easier or more 
elegant way to use MongoDB for Session, Service and Ticket Storage at the 
same time?

Regards

Martin





-- 
- Website: https://apereo.github.io/cas
- Gitter Chatroom: https://gitter.im/apereo/cas
- List Guidelines: https://goo.gl/1VRrw7
- Contributions: https://goo.gl/mh7qDG
--- 
You received this message because you are subscribed to the Google Groups "CAS 
Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cas-user+unsubscr...@apereo.org.
To view this discussion on the web visit 
https://groups.google.com/a/apereo.org/d/msgid/cas-user/db00850f-7c02-4912-aff3-e11a11317fa9n%40apereo.org.
  • [cas-user] CAS 6.4.4.2 with Mo... 'martin....@springer.com' via CAS Community

Reply via email to