Does solace has issue while loading truststore.jks file after having a idle connection period?

I have built an api that connects successfully via keystore/truststore first time. Of Late I observed a weird issue as stated below:

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is com.solacesystems.jms.ConfigurationException: Unable to load trust store: /bpms/sail/stride/sail-stride/live/config/sit/SailEbbsTrustStore.jks

The path mentioned /bpms/sail/stride/sail-stride/live/config/sit/ is outside my package and not unders classpath of my spring boot application.

The issue makes the connection failure and message transfer is stuck. I am using spring boot application and Jms libraries to create connection factory.

Kindly help here as I am helpless across google for this issue.

Thanks,

ABhishek

Answers

  • marc
    marc Member, Administrator, Moderator, Employee Posts: 956 admin

    Hi @abhis_khiladi,

    Interesting issue. I haven't seen this before. Is it reproducible? Is it upon restart of the application or just when the app is trying to reconnect?

  • abhis_khiladi
    abhis_khiladi Member Posts: 2

    Thanks Marc for responding.

    The issue is reproducible after idle time of more than 12 hours is my observation and after I restart the app all the messages stuck are released and sent through, resolving the issue. My connection factory code is below:

    protected Hashtable<String, Object> environMentProperties(JmsPropertiesFileItConfiguration jmsProperties) {
        Hashtable<String, Object> env = new Hashtable();
        env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.solacesystems.jndi.SolJNDIInitialContextFactory");
        env.put("java.naming.provider.url", jmsProperties.getProviderUrl());
        env.put("Solace_JMS_SSL_TrustStoreFormat", jmsProperties.getTruststoreType());
        env.put("Solace_JMS_VPN", jmsProperties.getVpnProfile());
        env.put("Solace_JMS_SSL_ValidateCertificate", Boolean.valueOf(jmsProperties.isSslEnabled()));
        env.put("Solace_JMS_SSL_TrustStore", jmsProperties.getTruststore());
        env.put("SOLACE_JMS_SSL_TRUST_STORE_PASSWORD", jmsProperties.getTruststorePassword());
        env.put(SupportedProperty.SOLACE_JMS_SSL_KEY_STORE, jmsProperties.getKeystore());
        env.put(SupportedProperty.SOLACE_JMS_SSL_KEY_STORE_FORMAT, jmsProperties.getKeystoreType());
        env.put(SupportedProperty.SOLACE_JMS_SSL_KEY_STORE_PASSWORD, jmsProperties.getKeystorePassword());
        env.put(SupportedProperty.SOLACE_JMS_AUTHENTICATION_SCHEME,
                SupportedProperty.AUTHENTICATION_SCHEME_CLIENT_CERTIFICATE);
        env.put(SupportedProperty.SOLACE_JMS_SSL_CIPHER_SUITES, "ECDHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-GCM-SHA256");
        env.put("Solace_JMS_JNDI_ConnectRetries", jmsProperties.getConnectRetries());
        env.put("Solace_JMS_JNDI_ConnectRetriesPerHost", jmsProperties.getConnectionRetriesPerHost());
        env.put("Solace_JMS_JNDI_ConnectTimeout", jmsProperties.getConnectTimeout());
        env.put("Solace_JMS_JNDI_ReadTimeout", jmsProperties.getReadTimeout());
        env.put("Solace_JMS_JNDI_ReconnectRetries", jmsProperties.getReconnectRetries());
        env.put("Solace_JMS_JNDI_ReconnectRetryWait", jmsProperties.getReconnectRetryWait());
        return env;
    }
    
    protected JmsComponent jmsComponent(JmsPropertiesFileItConfiguration jmsProperties, Hashtable<String, Object> env) throws NamingException, JMSException {
        JmsComponent jmsComponent = new JmsComponent(this.jmsConfiguration(jmsProperties, env));
        jmsComponent.setAcknowledgementMode(2);
        jmsComponent.setAutoStartup(true);
        return jmsComponent;
    }
    
    protected JmsConfiguration jmsConfiguration(JmsPropertiesFileItConfiguration jmsProperties, Hashtable<String, Object> env) throws NamingException, JMSException {
        JmsConfiguration jmsConfiguration = new JmsConfiguration();
        jmsConfiguration.setConnectionFactory(this.connectionFactory(jmsProperties, env));
        return jmsConfiguration;
    }
    
    public SolConnectionFactory connectionFactory(JmsPropertiesFileItConfiguration jmsProperties, Hashtable<String, Object> env) throws NamingException, JMSException {
        InitialContext initialContext = new InitialContext(env);
        SolConnectionFactory connectionFactory = (SolConnectionFactory) initialContext.lookup(jmsProperties.getConnectionFactory());
        return connectionFactory;
    


  • marc
    marc Member, Administrator, Moderator, Employee Posts: 956 admin

    Hi @abhis_khiladi,

    Interesting. When you say "idle time of more than 12 hours" what do you mean by that? To be honest nothing is jumping out at me as an issue.

    Note: if you have paid support please open a support ticket so you can share the application logs, etc. and they can help troubleshoot the issue.