Solace Community is getting a facelift!

On March 3rd we will be starting the process of migrating Solace Community to a new platform. As a result, Solace Community will go in to a temporary read-only state. You will still be able to come onto Solace Community and search through posts to find answers, but you won't be able to ask questions, post comments, or react in any way.

We hope to have the migration complete by Wednesday March 5th (or sooner), so please keep an eye out!

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: 973 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: 973 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.

This Month's Leaders

This Week's Leaders