[jboss-user] [Messaging, JMS & JBossMQ] - JMSQueueAppender
vinodpol
do-not-reply at jboss.com
Tue Dec 12 09:43:22 EST 2006
I Have Used... JMSQueueAppender
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.ErrorHandler;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.helpers.LogLog;
import java.util.Hashtable;
import java.util.Properties;
import javax.jms.*;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NameNotFoundException;
import javax.naming.NamingException;
/**
* A Simple JMS (P2P) Queue Appender.
*
* @author Ceki Gülcü
* @author Jamie Tsao
*/
public class JMSQueueAppender1 extends AppenderSkeleton {
protected QueueConnection queueConnection;
protected QueueSession queueSession;
protected QueueSender queueSender;
protected Queue queue;
String initialContextFactory;
String providerUrl;
String queueBindingName;
String queueConnectionFactoryBindingName;
public
JMSQueueAppender1() {
}
/**
* The InitialContextFactory option takes a string value.
* Its value, along with the ProviderUrl option will be used
* to get the InitialContext.
*/
public void setInitialContextFactory(String initialContextFactory) {
this.initialContextFactory = initialContextFactory;
}
/**
* Returns the value of the InitialContextFactory option.
*/
public String getInitialContextFactory() {
return initialContextFactory;
}
/**
* The ProviderUrl option takes a string value.
* Its value, along with the InitialContextFactory option will be used
* to get the InitialContext.
*/
public void setProviderUrl(String providerUrl) {
this.providerUrl = providerUrl;
}
/**
* Returns the value of the ProviderUrl option.
*/
public String getProviderUrl() {
return providerUrl;
}
/**
* The QueueConnectionFactoryBindingName option takes a
* string value. Its value will be used to lookup the appropriate
* QueueConnectionFactory from the JNDI context.
*/
public void setQueueConnectionFactoryBindingName(String queueConnectionFactoryBindingName) {
this.queueConnectionFactoryBindingName = queueConnectionFactoryBindingName;
}
/**
* Returns the value of the QueueConnectionFactoryBindingName option.
*/
public String getQueueConnectionFactoryBindingName() {
return queueConnectionFactoryBindingName;
}
/**
* The QueueBindingName option takes a
* string value. Its value will be used to lookup the appropriate
* destination Queue from the JNDI context.
*/
public void setQueueBindingName(String queueBindingName) {
this.queueBindingName = queueBindingName;
}
/**
Returns the value of the QueueBindingName option.
*/
public String getQueueBindingName() {
return queueBindingName;
}
/**
* Overriding this method to activate the options for this class
* i.e. Looking up the Connection factory ...
*/
public void activateOptions() {
QueueConnectionFactory queueConnectionFactory;
try {
Context ctx = getInitialContext();
queueConnectionFactory = (QueueConnectionFactory) ctx.lookup(queueConnectionFactoryBindingName);
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup(queueBindingName);
queueSender = queueSession.createSender(queue);
queueConnection.start();
ctx.close();
} catch(Exception e) {
errorHandler.error("Error while activating options for appender named ["+name+
"].", e, ErrorCode.GENERIC_FAILURE);
}
}
protected InitialContext getInitialContext() throws NamingException {
try {
Hashtable ht = new Hashtable();
//Populate property hashtable with data to retrieve the context.
ht.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
ht.put(Context.PROVIDER_URL, providerUrl);
return (new InitialContext(ht));
} catch (NamingException ne) {
LogLog.error("Could not get initial context with ["+initialContextFactory + "] and [" + providerUrl + "].");
throw ne;
}
}
protected boolean checkEntryConditions() {
String fail = null;
if(this.queueConnection == null) {
fail = "No QueueConnection";
} else if(this.queueSession == null) {
fail = "No QueueSession";
} else if(this.queueSender == null) {
fail = "No QueueSender";
}
if(fail != null) {
errorHandler.error(fail +" for JMSQueueAppender named ["+name+"].");
return false;
} else {
return true;
}
}
/**
* Close this JMSQueueAppender. Closing releases all resources used by the
* appender. A closed appender cannot be re-opened.
*/
public synchronized // avoid concurrent append and close operations
void close() {
if(this.closed)
return;
LogLog.debug("Closing appender ["+name+"].");
this.closed = true;
try {
if(queueSession != null)
queueSession.close();
if(queueConnection != null)
queueConnection.close();
} catch(Exception e) {
LogLog.error("Error while closing JMSQueueAppender ["+name+"].", e);
}
// Help garbage collection
queueSender = null;
queueSession = null;
queueConnection = null;
}
/**
* This method called by {@link AppenderSkeleton#doAppend} method to
* do most of the real appending work. The LoggingEvent will be
* be wrapped in an ObjectMessage to be put on the JMS queue.
*/
public void append(LoggingEvent event) {
if(!checkEntryConditions()) {
return;
}
try {
ObjectMessage msg = queueSession.createObjectMessage();
msg.setObject(event);
queueSender.send(msg);
} catch(Exception e) {
errorHandler.error("Could not send message in JMSQueueAppender ["+name+"].", e,
ErrorCode.GENERIC_FAILURE);
}
}
public boolean requiresLayout() {
return false;
}
}
in log4j.xml i have used...
appender name="JMS" class="JMSQueueAppender1"
param name="InitialContextFactory" value="org.jnp.interfaces.NamingContextFactory"
param name="ProviderUrl" value="jnp://localhost:1099"/
param name="QueueConnectionFactoryBindingName" value="QueueConnectionFactory"/
param name="QueueBindingName" value="queue/testQueue"
appender
it is giving error.....
log4j:ERROR Error while activating options for appender named [JMS].
javax.naming.CommunicationException: Could not obtain connection to any of these
urls: 10.10.10.252:1099 and discovery failed with error: javax.naming.Communica
tionException: Receive timed out [Root exception is java.net.SocketTimeoutExcept
ion: Receive timed out] [Root exception is javax.naming.CommunicationException:
Failed to connect to server 10.10.10.252:1099 [Root exception is javax.naming.Se
rviceUnavailableException: Failed to connect to server 10.10.10.252:1099 [Root e
xception is java.net.ConnectException: Connection refused: connect]]]
Can AnyBody Help me out.... Any help will be appreciated.....
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3993084#3993084
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3993084
More information about the jboss-user
mailing list