package org.jboss.seam.jms;
import javax.jms.JMSException;
import javax.jms.TopicConnectionFactory;
import javax.naming.NamingException;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Create;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Unwrap;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.util.Naming;
import org.jboss.seam.core.Expressions.ValueExpression;
/**
* Manager for a JMS TopicConnection. By default, the JBoss MQ UIL2.
*
* @author Gavin King
*
*/
@Scope(ScopeType.APPLICATION)
@BypassInterceptors
@Name("org.jboss.seam.jms.topicConnection")
@Install(false)
public class TopicConnection
{
private String topicConnectionFactoryJndiName = "UIL2ConnectionFactory";
private javax.jms.TopicConnection topicConnection;
private ValueExpression<TopicConnectionFactory> springTopicConnectionFactory;
public ValueExpression<TopicConnectionFactory> getSpringTopicConnectionFactory()
{
return springTopicConnectionFactory;
}
public void setSpringTopicConnectionFactory(ValueExpression<TopicConnectionFactory> springTopicConnectionFactory)
{
this.springTopicConnectionFactory = springTopicConnectionFactory;
}
/**
* The JNDI name of the TopicConnectionFactory
*/
public String getTopicConnectionFactoryJndiName()
{
return topicConnectionFactoryJndiName;
}
public void setTopicConnectionFactoryJndiName(String jndiName)
{
this.topicConnectionFactoryJndiName = jndiName;
}
@Create
public void init() throws NamingException, JMSException
{
topicConnection = getTopicConnectionFactory().createTopicConnection();
topicConnection.start();
}
@Destroy
public void destroy() throws JMSException
{
topicConnection.stop();
topicConnection.close();
}
private TopicConnectionFactory getTopicConnectionFactory() throws NamingException
{
if(springTopicConnectionFactory!=null)
return springTopicConnectionFactory.getValue();
else
return (TopicConnectionFactory) Naming.getInitialContext().lookup(getTopicConnectionFactoryJndiName());
}
@Unwrap
public javax.jms.TopicConnection getTopicConnection()
{
return topicConnection;
}
public static javax.jms.TopicConnection instance()
{
return (javax.jms.TopicConnection) Component.getInstance(TopicConnection.class);
}
@Override
public String toString()
{
return "TopicConnection(" + springTopicConnectionFactory!=null?springTopicConnectionFactory.getExpressionString():getTopicConnectionFactoryJndiName() + ")";
}
}