Currently creating a producer is an asynchronous operation on the JMS
Java client, so you'll only receive exceptions on the
ExceptionListener.
On 9/25/06, Eugene Prokopiev <[EMAIL PROTECTED]> wrote:
Hi,
Is it possible to restrict producer creating with ActiveMQ? I tried to
use this context:
<beans>
<!-- ActiveMQ Broker configuration -->
<bean id="broker" class="org.apache.activemq.broker.BrokerService"
init-method="start" destroy-method="stop">
<property name="persistent" value="false"/>
<property name="transportConnectorURIs">
<list>
<value>tcp://localhost:5000</value>
</list>
</property>
<property name="plugins">
<list>
<bean class="activemq.RestrictPlugin"/>
</list>
</property>
</bean>
<!-- ActiveMQ connection configuration -->
<bean id="jmsConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
<property name="brokerURL" value="tcp://localhost:5000"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="defaultDestinationName" value="error"/>
</bean>
<!-- Business logic beans -->
<bean id="messageSender" class="activemq.MessageSender"
init-method="send">
<property name="jmsTemplate" ref="jmsTemplate"/>
</bean>
</beans>
RestrictPlugin.java:
public class RestrictPlugin extends BrokerPluginSupport {
private Log log = LogFactory.getLog(getClass());
public void addProducer(ConnectionContext context, ProducerInfo info)
throws Exception {
log.debug("addProducer interceptor");
if (info.getDestination().getPhysicalName().contains("error"))
throw new Exception("Error destination");
else
super.addProducer(context, info);
}
}
MessageSender.java:
public class MessageSender {
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send() {
jmsTemplate.convertAndSend("Hello!");
}
}
On running this context I got:
INFO CollectionFactory - JDK 1.4+ collections available
INFO XmlBeanDefinitionReader - Loading XML bean definitions from class
path resource [activemq/context.xml]
INFO DefaultNamespaceHandlerResolver - Ignoring handler
[org.apache.xbean.spring.context.v2.XBeanNamespaceHandler]: class not found
INFO ClassPathXmlApplicationContext - Bean factory for application
context
[org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=17538308]:
org.springframework.beans.factory.support.DefaultListableBeanFactory
defining beans [broker,jmsConnectionFactory,jmsTemplate,messageSender];
root of BeanFactory hierarchy
INFO ClassPathXmlApplicationContext - 4 beans defined in application
context
[org.springframework.context.support.ClassPathXmlApplicationContext;hashCode=17538308]
INFO ClassPathXmlApplicationContext - Unable to locate MessageSource
with name 'messageSource': using default
[EMAIL PROTECTED]
INFO ClassPathXmlApplicationContext - Unable to locate
ApplicationEventMulticaster with name 'applicationEventMulticaster':
using default
[EMAIL PROTECTED]
INFO DefaultListableBeanFactory - Pre-instantiating singletons in
factory
[org.springframework.beans.factory.support.DefaultListableBeanFactory
defining beans [broker,jmsConnectionFactory,jmsTemplate,messageSender];
root of BeanFactory hierarchy]
INFO BrokerService - ActiveMQ null JMS Message Broker (localhost) is
starting
INFO BrokerService - For help or more information please see:
http://incubator.apache.org/activemq/
INFO TransportServerThreadSupport - Listening for connections at:
tcp://prokopiev.stc.donpac.ru:5000
INFO TransportConnector - Connector tcp://prokopiev.stc.donpac.ru:5000
Started
INFO BrokerService - ActiveMQ JMS Message Broker (localhost,
ID:prokopiev.stc.donpac.ru-45238-1159183199414-0:0) started
INFO ManagementContext - JMX consoles can connect to
service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
But there are no exception raised? Why can it be?
--
Thanks,
Eugene Prokopiev
--
James
-------
http://radio.weblogs.com/0112098/