Skip to content

Instantly share code, notes, and snippets.

@adelinor
Last active June 17, 2019 21:25
Show Gist options
  • Save adelinor/14e5add2ba6ba339332bcc3439a0ec67 to your computer and use it in GitHub Desktop.
Save adelinor/14e5add2ba6ba339332bcc3439a0ec67 to your computer and use it in GitHub Desktop.
This is an example of Spring Java Config class for a transactional Camel application which uses JMS. This config allows test running with @SpringBootTest to load the spring context without failure tanks to the exclusion of the PlatformTransactionManager bean.
@Configuration
@EnableJms
public class JmsTransactionConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(JmsTransactionConfig.class);
@Value("${app.jms.jndi-provider-url}")
private String jndiProviderUrl;
@Value("${app.jms.jndi-name}")
private String jndiName;
/** Template to use to lookup JMS resources */
private JndiTemplate jndiTemplate;
@PostConstruct
public void logConfig() {
LOGGER.info("jndi-provider-url --> {}", this.jndiProviderUrl);
LOGGER.info("jndi-name --> {}", this.jndiName);
this.jndiTemplate = jndiTemplate();
}
public JndiTemplate jndiTemplate() {
Properties env = new Properties();
env.setProperty("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");
env.setProperty("java.naming.provider.url", this.jndiProviderUrl);
return new JndiTemplate(env);
}
@Bean
public JndiDestinationResolver jndiDestinationResolver() {
JndiDestinationResolver result = new JndiDestinationResolver();
result.setJndiTemplate(this.jndiTemplate);
return result;
}
@Bean
public ConnectionFactory connectionFactory() throws NamingException {
return this.jndiTemplate.lookup(this.jndiName, ConnectionFactory.class);
}
@Bean
@ConditionalOnBean(PlatformTransactionManager.class)
JmsConfiguration jmsConfiguration(ConnectionFactory connectionFactory,
PlatformTransactionManager transactionManager,
JndiDestinationResolver destinationResolver) {
return createJmsConfiguration(connectionFactory, destinationResolver,
transactionManager);
}
private JmsConfiguration createJmsConfiguration(
ConnectionFactory connectionFactory,
JndiDestinationResolver destinationResolver,
PlatformTransactionManager transactionManager) {
JmsConfiguration result = new JmsConfiguration();
result.setConnectionFactory(connectionFactory);
result.setDestinationResolver(destinationResolver);
if (transactionManager != null) {
result.setTransacted(true);
result.setTransactionManager(transactionManager);
result.setCacheLevelName("CACHE_NONE");
}
return result;
}
@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
JmsConfiguration jmsConfigurationForTests(ConnectionFactory connectionFactory,
JndiDestinationResolver destinationResolver) {
return createJmsConfiguration(connectionFactory,
destinationResolver, null);
}
@Bean
JmsComponent jmsComponent(JmsConfiguration jmsConfiguration) {
return new JmsComponent(jmsConfiguration);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment