package org.jboss.seam.jms; import javax.jms.JMSException; import javax.jms.Topic; import javax.jms.TopicPublisher; import javax.naming.NamingException; 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.Scope; import org.jboss.seam.annotations.Unwrap; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.core.Expressions.ValueExpression; import org.jboss.seam.util.Naming; /** * Manager for a JMS TopicPublisher for a named JMS topic * * @author Gavin King * */ @Scope(ScopeType.EVENT) @BypassInterceptors @Install(false) public class ManagedTopicPublisher { private String topicJndiName; private TopicPublisher topicPublisher; private ValueExpression<Topic> springTopic; public ValueExpression<Topic> getSpringTopic() { return springTopic; } public void setSpringTopic(ValueExpression<Topic> springTopic) { this.springTopic = springTopic; } /** * The JNDI name of the topic */ public String getTopicJndiName() { return topicJndiName; } public void setTopicJndiName(String jndiName) { this.topicJndiName = jndiName; } public Topic getTopic() throws NamingException { if(springTopic!=null) return springTopic.getValue(); else return (Topic) Naming.getInitialContext().lookup(topicJndiName); } @Create public void create() throws JMSException, NamingException { topicPublisher = org.jboss.seam.jms.TopicSession.instance().createPublisher( getTopic() ); } @Destroy public void destroy() throws JMSException { topicPublisher.close(); } @Unwrap public TopicPublisher getTopicPublisher() { return topicPublisher; } @Override public String toString() { return "TopicConnection(" + springTopic!=null?springTopic.getExpressionString():topicJndiName + ")"; } }