Actually the database error was caused by the producer code. Can anybody
point me out what is wrong with this one?
I don't use failover transport and i am closing both the session and
producer.
If i dont use createSession(true, Session.TRANSACTED) I run oout of db
connections in 40 messages which is also the default for PostgresSQL. The
maximum set in the datasource is appearantly not used.
Can anybody point out a mistake in the next code (a thread with a loop ? Is
it me or ActiveMQ?
// ========== Static variables ================
protected static long SLEEP_INTERVAL = 1000; // 1 seconds
protected static boolean stopProcessing = false;
// ============= Private variables ====================
protected static Log log =
LogFactory.getLog(WitsTestMessageGeneratorThread.class);
protected static Log sysadminLog =
LogFactory.getLog(Constants.SYSADMIN_LOGGER);
/**
* this boolean controls whether an alert has already been sent. It
prevents this class bombarding
* administrators with email alerts
*/
protected boolean errorAlerted = false;
protected int errorCount = 0;
protected javax.jms.Connection connection;
protected javax.jms.Destination destination;
protected Session session;
protected MessageProducer producer;
protected boolean queueInitialized;
private String user = PrimeConnection.DEFAULT_USER;
private String password = PrimeConnection.DEFAULT_PASSWORD;
private String url = PrimeConnection.DEFAULT_BROKER_URL;
private String destinationName = PrimeConnection.DESTINATION_NAME;
private boolean transacted = true;
private boolean persistent = true;
private long timeToLive;
WitsTestMessageGeneratorThread() {
super();
}
public synchronized void stopProcessing() {
stopProcessing = true;
}
// ============= Public methods
public void run() {
stopProcessing = false;
errorAlerted = false;
long counter = 0L;
try {
while (!stopProcessing) {
if (log.isDebugEnabled()) {
log.debug("WitsTestMessageGeneratorThread");
}
try {
if (!checkEntryConditions()) {
if (log.isDebugEnabled()) {
log.debug("WitsTestMessageGeneratorThread entry
conditions not met, trying to create a connection");
}
try {
initQueue();
} catch (JMSException e) {
log.error("Error
initializing queue: " + e.getMessage(),e);
throw e;
}
if (log.isDebugEnabled()) {
log.debug("Connection created");
}
}
if (checkEntryConditions()) {
try {
// Create the session
session =
connection.createSession(transacted,
Session.SESSION_TRANSACTED);
destination =
session.createQueue(destinationName);
// Create the producer.
producer =
session.createProducer(destination);
if (log.isDebugEnabled()) {
log.debug("Session and Producer
created");
}
if (persistent) {
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
} else {
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
}
if (timeToLive != 0) {
producer.setTimeToLive(timeToLive);
}
counter = counter + 1;
String msgContent = "Test Message " +
counter + ". Date:
" + new Date();
TextMessage msg =
session.createTextMessage();
msg.setText(msgContent);
producer.send(msg);
log.debug("Message " + msgContent + "
sent to " +
destinationName);
if (transacted) {
session.commit();
}
}
catch (JMSException e) {
log.error("Error
sending message to " + destinationName + ". Error: "
+ e.getMessage());
throw e;
}
finally {
if (session != null)
session.close();
session = null;
if (producer != null)
producer.close();
producer = null;
}
if (errorAlerted) {
sysadminLog.error("WitsTestMessageGenerator resumed sending
messages to the queue");
}
errorAlerted = false;
}
}
catch (Exception e) {
log.error("WitsTestMessageGenerator cannot send
a jms message to
the queue. Message: " + e.getMessage(),e);
if (connection != null) {
try {
connection.close();
}
catch (JMSException e1) {}
connection = null;
destination = null;
}
if (!errorAlerted && errorCount >= 2) {
sysadminLog.error("WitsTestMessageGenerator
cannot send a jms
message to the queue. Message: " + e.getMessage());
errorAlerted = true;
}
}
long sleepInterval = getSleepInterval();
try {
sleep(sleepInterval);
}
catch (InterruptedException e) {
}
}
}
finally {
if (connection != null) {
try {
connection.close();
}
catch (JMSException e1) {}
connection = null;
}
}
log.info("Processing of WitsTestMessageGenerator thread stopped");
try {
if (session != null) session.close();
if (connection != null) {
connection.close();
}
if (producer != null) producer.close();
} catch (JMSException e) {
log.error("Error closing JMS connection: " +
e.getMessage());
}
}
protected synchronized static long getSleepInterval() {
return SLEEP_INTERVAL;
}
public void initQueue() throws JMSException {
connection = null;
System.out.println("Connecting to URL: " + url);
System.out.println("Publishing to queue: " + destinationName);
System.out.println("Using " + (persistent ? "persistent" :
"non-persistent") + " messages");
System.out.println("Sleeping between publish " + SLEEP_INTERVAL + "
ms");
if (timeToLive != 0) {
System.out.println("Messages time to live " + timeToLive + "
ms");
}
// Create the connection.
ActiveMQConnectionFactory connectionFactory = new
ActiveMQConnectionFactory(user, password, url);
connection = connectionFactory.createConnection();
connectionFactory = null;
errorCount = 0;
}
protected boolean checkEntryConditions() {
if(this.connection == null) {
errorCount++;
return false;
}
else {
errorCount = 0;
return true;
}
}
--
View this message in context:
http://www.nabble.com/Persistence-Adapter-Postgres-JDBC-issue-tp15459381s2354p15462064.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.