Hi,
                I’ injecting beans at runtime using Camel with and without 
Spring (and it works) but, I did it before starting the route.
From my understanding you are trying to replace a bean in the context once the 
route is running, am I right?
If so, did you try to restart the route once you replace the bean in the 
context?

Riccardo

From: Dipak Rai <fullstackdipak...@gmail.com>
Date: Tuesday, 4 March 2025 at 11:47
To: users@camel.apache.org <users@camel.apache.org>
Subject: Re: Refreshing Bean To Build An IMAP Route Should Have Worked
I'll rephrase my question here.
Is it possible to just kick out the old bean from the Camel Context (and in
turn from the Spring context) and inject a new bean while using the same to
build a route dynamically as shown below? I don't see any explicit '
*unbind()*' method with the *ApplicationContextBeanRepository*.

*Code snippet:*
public void updateAuthenticator() {
String tenantId = emailConfigBean.getTenantId();
String clientId = emailConfigBean.getClientId();
String clientSecret = emailConfigBean.getClientSecret();
String wsAdapterMailBox = emailConfigBean.getWSAdapterMailBox();

try {
MicrosoftExchangeOnlineOAuth2MailAuthenticator newExchangeAuthenticator =
new MicrosoftExchangeOnlineOAuth2MailAuthenticator(
tenantId, clientId, clientSecret, wsAdapterMailBox);
Registry registry = camelContext.getRegistry(Registry.class);
MicrosoftExchangeOnlineOAuth2MailAuthenticator existingAuthenticatorBean =
registry.lookupByNameAndType("exchangeAuthenticator",
MicrosoftExchangeOnlineOAuth2MailAuthenticator.class);
// Unbind the existing 'exchangeAuthenticator' bean
if (null != existingAuthenticatorBean) {
registry.unbind("exchangeAuthenticator");
}
// Bind the new 'exchangeAuthenticator' bean
registry.bind("exchangeAuthenticator", newExchangeAuthenticator);
} catch (Exception e) {
}
}


On Tue, Mar 4, 2025 at 10:40 AM Dipak Rai <fullstackdipak...@gmail.com>
wrote:

> Hi,
>
> In the below snippet I am trying to dynamically build the IMAP route by
> refreshing my 'exchangeAuthenticator' bean. Camel seemingly supports only
> bean by name injection into the route. Although I am able to instantiate
> the bean with new values yet the route refers to the old bean values and
> fails with error.
>
> public void updateAuthenticator() {
>    String tenantId = emailConfigBean.getTenantId();
>    String clientId = emailConfigBean.getClientId();
>    String clientSecret = emailConfigBean.getClientSecret();
>    String wsAdapterMailBox = emailConfigBean.getWSAdapterMailBox();
>    try {
>        MicrosoftExchangeOnlineOAuth2MailAuthenticator 
> newExchangeAuthenticator = new MicrosoftExchangeOnlineOAuth2MailAuthenticator(
>                tenantId, clientId, clientSecret, wsAdapterMailBox);
>        // Get the registry
>        DefaultRegistry defaultRegistry  = (DefaultRegistry) 
> camelContext.getRegistry();
>        // Unbind the existing 'exchangeAuthenticator' bean
> MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator = 
> (MicrosoftExchangeOnlineOAuth2MailAuthenticator) defaultRegistry
> .lookupByName("exchangeAuthenticator");
>        if (null != exchangeAuthenticator) {
>            defaultRegistry.unbind("exchangeAuthenticator");
>        }
>        defaultRegistry.bind("exchangeAuthenticator", 
> newExchangeAuthenticator);
>        defaultRegistry.setCamelContext(camelContext);
>    } catch (Exception e) {
>        log.error("Exception in updating authenticator bean: {}", 
> e.getMessage());
>    }
> }
>
> //building the route dynamically through refreshed values of bean
> public String getImapConfig(String imapUrl, String imapPort, String 
> pollingInterval, String debugMode) {
>         authenticatorService.updateAuthenticator();
>         return "imaps://" + imapUrl + ":" + imapPort
>                 + "?authenticator=#exchangeAuthenticator"
>                 + "&debugMode="+ debugMode
>                 + "&delete=false"
>                 + "&unseen=true"
>                 + "&delay=" + pollingInterval
>                 + "&mail.imaps.auth.mechanisms=XOAUTH2"
>                 + "&disconnect=true"
>                 + "&closeFolder=true";
>     }
>
> Regards,
>
> Dipak.
>
>
>

Reply via email to