Last active
June 17, 2019 21:25
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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