Java EE 7 and JMS 2.0 introduced the @JMSDestinationDefinitions annotation which allows automatic creation of JMS resources at deployment time:

import javax.ejb.Singleton; import javax.ejb.Startup; import javax.jms.JMSDestinationDefinition; import javax.jms.JMSDestinationDefinitions; @JMSDestinationDefinitions( value = { @JMSDestinationDefinition( name = "java:/queue/duke-queue", interfaceName = "javax.jms.Queue", destinationName = "duke" ), @JMSDestinationDefinition( name = "java:/topic/duke-topic", interfaceName = "javax.jms.Topic", destinationName = "duke-topic" ) } ) @Startup @Singleton public class Initializer { @Resource(lookup = "java:/queue/duke-queue") private Queue queue; @Produces public Queue expose() { return this.queue; } }

The conveniently created JMS destination (Queue or Topic) can be immediately exposed to dependency injection with the CDI @Produces annotation.