В нашем проекте мы используем Glassfish v3.1.2.2 с фабрикой соединений, связанной как «jms/ConnectionFactory», и очередью, связанной как «jms/Queue». Оба создаются в административной консоли Glassfish:
Конфигурация Spring реализована следующим образом:
@Bean
public JndiTemplate jndiTemplate() {
JndiTemplate jndiTemplate = new JndiTemplate();
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
jndiTemplate.setEnvironment(props);
return jndiTemplate;
}
@Bean
public JndiObjectFactoryBean connectionFactory() {
JndiObjectFactoryBean connectionFactory = new JndiObjectFactoryBean();
connectionFactory.setJndiTemplate(jndiTemplate());
connectionFactory.setJndiName("jms/ConnectionFactory");
return connectionFactory;
}
@Bean
public TransactionAwareConnectionFactoryProxy connectionFactoryProxy() {
return new TransactionAwareConnectionFactoryProxy((ConnectionFactory) connectionFactory().getObject());
}
@Bean
public JndiObjectFactoryBean destination() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
jndiObjectFactoryBean.setJndiName("jms/Queue");
return jndiObjectFactoryBean;
}
@Bean
public JmsTemplate jmsTemplate() {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory((ConnectionFactory) connectionFactory().getObject());
jmsTemplate.setDefaultDestination((Destination) destination().getObject());
return jmsTemplate;
}
@Bean
public DefaultMessageListenerContainer simpleMessageListenerContainer() {
DefaultMessageListenerContainer listenerContainer = new DefaultMessageListenerContainer();
listenerContainer.setConnectionFactory(connectionFactoryProxy());
listenerContainer.setDestination((Destination) destination().getObject());
listenerContainer.setMessageListener(messageDispatcher);
listenerContainer.setSessionTransacted(true);
listenerContainer.setTransactionManager(jtaTransactionManager());
return listenerContainer;
}
Пока все работает нормально, сообщение будет отправлено и получено из очереди без каких-либо проблем. Откат сообщений с RuntimeException тоже работает.
Проблема в том, как изменить некоторые фундаментальные настройки, такие как RedeliveryAttempts или RedeliveryInterval из спецификации активации. Я не могу найти решение, чтобы изменить это с помощью Spring только с помощью MDB. Есть ли способ сделать это в консоли администратора Glassfishs или в конфигурации Spring? Пришлось ли мне использовать какую-то другую реализацию или это вообще невозможно?
Надеюсь, кто-нибудь может помочь. Заранее спасибо, Дэнни