У меня есть приложение, построенное на WebLogic 11b (10.3.4) с использованием MDB. Я пытаюсь преобразовать их в Spring MDP. Вот MDB в вопрос:Преобразование WebBlog MDB в Spring Message-Driven POJO
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "ejbName", propertyValue = "RecipientEventRouterBean"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable") })
public class RecipientEventRouterBean extends TraxMessageRouter {
@Resource
private int appInstance;
@Resource
private String appName;
@Resource(mappedName = "jms/TraxErrorQ")
private Queue errorQueue;
@Resource(name = "TraxCF")
private ConnectionFactory errorQueueConnectionFactory;
@EJB
private Logger loggingService;
@Resource
private int maxJMSXDeliveryCount;
@Resource
private boolean validate;
@EJB
protected RecipientRegistrationService recService;
@Override
@PostConstruct
public void init() {
if (appName == null) {
throw new EJBException("appName is null");
}
try {
super.traxFactory = TraxFactory.getInstance(Application.fromValue(appName));
super.processor = new ObjectFactory().createApplicationInstance();
super.processor.setName(appName);
super.processor.setInstance(this.appInstance);
super.errorQueueConnectionFactory = this.errorQueueConnectionFactory;
super.errorQueue = this.errorQueue;
super.maxJMSXDeliveryCount = this.maxJMSXDeliveryCount;
super.validate = this.validate;
super.loggingService = this.loggingService;
} catch (Exception e) {
throw new EJBException(e);
}
super.init();
}
@Override
protected TraxMessageService getTraxMessageService() {
return recService;
}
}
Родитель MDB, TraxMessageRouter, реализует интерфейс MessageListener.
Я создал бобы MDP в JMS-applicationContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Spring JMS Destination Resolver -->
<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.JndiDestinationResolver">
<property name="cache" value="true" />
</bean>
<!-- Spring JMS Queue Connection Factory leveraging a single connection -->
<!-- SingleConnectionFactory will return the same Connection on all createConnection calls and ignore calls to close -->
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jms/TraxCF" />
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destinationResolver" ref="jmsDestinationResolver" />
</bean>
<bean id="jmsSender" class="com.mycompany.web.service.jms.JMSSender">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="jmsReceiver" class="com.mycompany.web.service.jms.JMSReceiver">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="jmsQueue" class="javax.jms.Topic" />
<!-- this is the Message Driven POJO (MDP) -->
<bean id="messageListener" class="com.mycompany.messaging.RecipientEventRouterBean" />
<!-- and this is the message listener container -->
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="jmsQueue"/>
<property name="messageListener" ref="messageListener" />
</bean>
</beans>
Как преобразовать аннотацию @MessageDriven в правильный синтаксис Spring? Могу я просто прокомментировать это сейчас?
У меня есть еще несколько EventRouterBeans. Все ли они получают объявления bean в jms-ApplicationContext.xml или я могу добавить родительский TraxMessageRouter в xml?
Какие еще изменения в конфигурационных файлах необходимо выполнить? Есть ли хорошее руководство по переходу от МБР к МДП? Есть ли хорошее руководство по переходу от EJB 3 к Spring?
Поскольку в аннотированной версии MDB используется функция subscriptionDurability = "Durable", должен ли атрибут атрибут destination-type = "durableTopic"? –
Это правильно. Вам необходимо передать то, что вы сконфигурировали с помощью аннотации EE, в конфигурацию Spring. –