/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.runtime.pipeline.impl;
import java.io.Serializable;
import java.util.Properties;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.activemq.command.ActiveMQObjectMessage;
import org.apache.activemq.command.ActiveMQTextMessage;
public class SimpleProducer {
private ConnectionFactory connectionFactory;
private Destination destination;
private MessageProducer producer;
private Connection connection;
private Session session;
public SimpleProducer(Properties properties,
String destinationName) {
try {
InitialContext jndiContext = new InitialContext( properties );
this.connectionFactory = (ConnectionFactory) jndiContext.lookup( "ConnectionFactory" );
this.destination = (Destination) jndiContext.lookup( destinationName );
} catch ( Exception e ) {
throw new RuntimeException( "Unable to instantiate JmsFeeder",
e );
}
}
public void start() {
try {
this.connection = this.connectionFactory.createConnection();
this.session = this.connection.createSession( false,
Session.AUTO_ACKNOWLEDGE );
this.producer = this.session.createProducer( destination );
this.connection.start();
} catch ( Exception e ) {
throw new RuntimeException( e );
}
}
public void setText(String text) {
ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
try {
textMessage.setText( text );
this.producer.send( textMessage );
} catch ( JMSException e ) {
throw new RuntimeException( e );
}
}
public void sendObject(Serializable object) {
ActiveMQObjectMessage objectMessage = new ActiveMQObjectMessage();
try {
objectMessage.setObject( object );
this.producer.send( objectMessage );
} catch ( JMSException e ) {
throw new RuntimeException( e );
}
}
public void stop() {
try {
// this.run = false;
// this will interrupt the receive()
this.producer.close();
this.connection.stop();
} catch ( JMSException e ) {
throw new RuntimeException( e );
}
}
public void simpleProducer2() {
Context jndiContext = null;
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageProducer producer = null;
String destinationName = "dynamicQueues/FOO.BAR";
final int numMsgs = 50;
System.out.println( "Destination name is " + destinationName );
/*
* Create a JNDI API InitialContext object
*/
try {
Properties props = new Properties();
props.setProperty( Context.INITIAL_CONTEXT_FACTORY,
"org.apache.activemq.jndi.ActiveMQInitialContextFactory" );
props.setProperty( Context.PROVIDER_URL,
"vm://localhost:61616" );
jndiContext = new InitialContext( props );
} catch ( NamingException e ) {
e.printStackTrace();
System.out.println( "Could not create JNDI API context: " + e.toString() );
System.exit( 1 );
}
/*
* Look up connection factory and destination.
*/
try {
connectionFactory = (ConnectionFactory) jndiContext.lookup( "ConnectionFactory" );
destination = (Destination) jndiContext.lookup( destinationName );
} catch ( NamingException e ) {
e.printStackTrace();
//LOG.info("JNDI API lookup failed: " + e);
System.exit( 1 );
}
/*
* Create connection. Create session from connection; false means
* session is not transacted. Create sender and text message. Send
* messages, varying text slightly. Send end-of-messages message.
* Finally, close connection.
*/
try {
connection = connectionFactory.createConnection();
session = connection.createSession( false,
Session.AUTO_ACKNOWLEDGE );
//session.createTopic( "" )
producer = session.createProducer( destination );
TextMessage message = session.createTextMessage();
for ( int i = 0; i < numMsgs; i++ ) {
message.setText( "This is message " + (i + 1) );
System.out.println( "Sending message: " + message.getText() );
producer.send( message );
}
/*
* Send a non-text control message indicating end of messages.
*/
producer.send( session.createMessage() );
} catch ( JMSException e ) {
e.printStackTrace();
System.out.println( "Exception occurred: " + e );
} finally {
if ( connection != null ) {
try {
connection.close();
} catch ( JMSException e ) {
}
}
}
}
}