You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@qpid.apache.org by Miguel Madinaveitia <j....@gmail.com> on 2014/04/09 10:28:30 UTC

The AMQConnection class fail to connect when use in log4j appender

Hello everyone. 
I have a problem when trying to connect to Qpid server, the class 
AMQConnection fails giving a timeout error, this only happens if I include
this code in a log4j appender, if I put the same code outside the appender
the connection works well.

the goal is to write all the log4j messages to a qpid server using a log4j
appender.

any ideas??


the appender
code....---------------------------------------------------------------------


package com.wfg.testqpid.appender;

import java.util.Date;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;

import javax.jms.Connection;
import javax.jms.Session;
import org.apache.qpid.client.AMQConnection;
import org.apache.qpid.jms.ConnectionURL;

public class JMSAppenderQPIDQ2 extends AppenderSkeleton{
	
	private Session session = null;
	private AMQConnection connection = null;

	private static String url =
"amqp://test:nolose@clientid/test?brokerlist='tcp://localhost:5672'";
	private boolean TRANSACTED = false;

	
	public void activateOptions() {
		try {
			
			System.out.println("version 2");
			System.out.println(url);
	
			connection = new AMQConnection(url);
			connection.start();
			
			System.out.println("we start the connection");
	
			session = connection.createSession(TRANSACTED, Session.AUTO_ACKNOWLEDGE);
	
			System.out.println("OK TEST "+ new Date());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public void append(LoggingEvent event) {
	}

	public boolean requiresLayout() {
		return false;
	}

	public synchronized void close() {
	}
	
}



the log4j properties.. 
--------------------------------------------------------------------

log4j.rootCategory=ALL, CONSOLE, JMSQpidQ

log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d{HH:mm:ss} [%p] %m%n

log4j.appender.FILE = org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.file = /home/miguel/prueba.log
log4j.appender.FILE.append = true
log4j.appender.FILE.DatePattern = '.'yyyyMMdd
log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern = %d{HH:mm:ss} [%p] %m%n

log4j.appender.JMSQpidQ = com.wfg.testqpid.appender.JMSAppenderQPIDQ2

the test class
..................-------------------------------------------------------

package com.wfg.testqpid;

import java.net.URL;
import java.util.Date;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.helpers.Loader;



public class TheTest {
	static Logger logger = Logger.getLogger(TheTest.class);

	public TheTest() {
		super();
		URL url = Loader.getResource("log4j.properties"); 
		PropertyConfigurator.configure(url);
	}

	public void generaTest(){
		logger.info("Start"+ new Date());
		logger.info("End "+ new Date());
	}
	
	public static void main(String[] args) {
		new TheTest().generaTest();
		System.exit(0);
	}

}


the error log...
-------------------------------------------------------------

version 2
amqp://test:nolose@clientid/test?brokerlist='tcp://localhost:5672'
17:50:57 [DEBUG]
Connection(1):amqp://test:********@clientid/test?brokerlist='tcp://localhost:5672'
17:50:57 [DEBUG] AMQP version 0-10
17:50:57 [DEBUG] Using ProtocolVersion for Session:0-10
17:50:57 [DEBUG] New Method Dispatcher:AMQProtocolSession[null]
17:50:57 [DEBUG] Creating content header body factory
17:50:57 [DEBUG] Creating content body factory
17:50:57 [DEBUG] Connecting with ProtocolHandler Version:0-10
17:50:57 [DEBUG] connecting to host: localhost port: 5672 vhost: test
username: test password: ********
17:50:57 [DEBUG] SO_RCVBUF : 65535
17:50:57 [DEBUG] SO_SNDBUF : 65535
17:50:57 [DEBUG] TCP_NODELAY : true
17:50:57 [DEBUG] SEND: [conn:6de1dadb] AMQP.1 0-10
17:52:57 [INFO] Unable to connect to broker at tcp://localhost:5672
org.apache.qpid.AMQException: Cannot connect to broker: close() timed out
[error code 200: reply success]
	at
org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:241)
	at
org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:604)
	at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:383)
	at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:219)
	at
com.wfg.testqpid.appender.JMSAppenderQPIDQ2.activateOptions(JMSAppenderQPIDQ2.java:56)
	at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
	at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
	at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
	at
org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
	at
org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
	at
org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
	at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
	at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
	at
org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
	at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
	at org.apache.log4j.Logger.getLogger(Logger.java:117)
	at com.wfg.testqpid.TheTest.<clinit>(TheTest.java:16)
Caused by: org.apache.qpid.transport.ConnectionException: close() timed out
	at org.apache.qpid.transport.Connection.close(Connection.java:640)
	at org.apache.qpid.transport.Connection.close(Connection.java:581)
	at org.apache.qpid.transport.Connection.connect(Connection.java:273)
	at
org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:221)
	... 16 more
org.apache.qpid.AMQConnectionFailureException: close() timed out [error code
200: reply success]
	at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:460)
	at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:219)
	at
com.wfg.testqpid.appender.JMSAppenderQPIDQ2.activateOptions(JMSAppenderQPIDQ2.java:56)
	at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
	at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
	at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
	at
org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)17:52:57
[DEBUG] All failover methods exhausted
17:52:57 [DEBUG] Are we connected:false
17:52:57 [DEBUG] Last attempted ProtocolHandler Version:0-10
17:50:57 [DEBUG] RECV: [conn:6de1dadb] AMQP.1 0-10

	at
org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
	at
org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
	at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
	at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
	at
org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
	at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
	at org.apache.log4j.Logger.getLogger(Logger.java:117)
	at com.wfg.testqpid.TheTest.<clinit>(TheTest.java:16)
Caused by: org.apache.qpid.AMQException: Cannot connect to broker: close()
timed out [error code 200: reply success]
	at
org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:241)
	at
org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:604)
	at org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:383)
	... 14 more
Caused by: org.apache.qpid.transport.ConnectionException: close() timed out
	at org.apache.qpid.transport.Connection.close(Connection.java:640)
	at org.apache.qpid.transport.Connection.close(Connection.java:581)
	at org.apache.qpid.transport.Connection.connect(Connection.java:273)
	at
org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:221)
	... 16 more





--
View this message in context: http://qpid.2158936.n2.nabble.com/The-AMQConnection-class-fail-to-connect-when-use-in-log4j-appender-tp7606582.html
Sent from the Apache Qpid users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


Re: The AMQConnection class fail to connect when use in log4j appender

Posted by Miguel Madinaveitia <j....@gmail.com>.
Thanks for the info Robbie. 
In fact that way I solved the problem, once I remove the log4j
implementation of the SLF4J and put the jdk one, the application worked well



--
View this message in context: http://qpid.2158936.n2.nabble.com/The-AMQConnection-class-fail-to-connect-when-use-in-log4j-appender-tp7606582p7606701.html
Sent from the Apache Qpid users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


Re: The AMQConnection class fail to connect when use in log4j appender

Posted by Robbie Gemmell <ro...@gmail.com>.
One thing to try would be using an alternative SLF4J binding and logging
implementation for the client itself (and anything else using SLF4J), such
as the JDK logging binding, while retaining use of Log4J for your JMS
appender and actual application.

Robbie

On 9 April 2014 14:02, Miguel Madinaveitia <j....@gmail.com>wrote:

> For the client we also use log4j.
> how do you solved the problem? to prevent the same client generates
> problems
> when writing to the log?
>
>
>
> --
> View this message in context:
> http://qpid.2158936.n2.nabble.com/The-AMQConnection-class-fail-to-connect-when-use-in-log4j-appender-tp7606582p7606586.html
> Sent from the Apache Qpid users mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> For additional commands, e-mail: users-help@qpid.apache.org
>
>

Re: The AMQConnection class fail to connect when use in log4j appender

Posted by Miguel Madinaveitia <j....@gmail.com>.
For the client we also use log4j. 
how do you solved the problem? to prevent the same client generates problems
when writing to the log?



--
View this message in context: http://qpid.2158936.n2.nabble.com/The-AMQConnection-class-fail-to-connect-when-use-in-log4j-appender-tp7606582p7606586.html
Sent from the Apache Qpid users mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


Re: The AMQConnection class fail to connect when use in log4j appender

Posted by Robbie Gemmell <ro...@gmail.com>.
What SLF4J logging implementation are you using for the client itself?

We typically use log4j also, which could cause initialisation problems in
this situation due to the client attempting to log during the connection
creation, which will need log4j to have initialised your appender that
requires a connection to work (which will attempt to log during its
creation)...

Robbie
On 9 Apr 2014 09:29, "Miguel Madinaveitia" <j....@gmail.com>
wrote:

> Hello everyone.
> I have a problem when trying to connect to Qpid server, the class
> AMQConnection fails giving a timeout error, this only happens if I include
> this code in a log4j appender, if I put the same code outside the appender
> the connection works well.
>
> the goal is to write all the log4j messages to a qpid server using a log4j
> appender.
>
> any ideas??
>
>
> the appender
>
> code....---------------------------------------------------------------------
>
>
> package com.wfg.testqpid.appender;
>
> import java.util.Date;
> import org.apache.log4j.AppenderSkeleton;
> import org.apache.log4j.helpers.LogLog;
> import org.apache.log4j.spi.ErrorCode;
> import org.apache.log4j.spi.LoggingEvent;
>
> import javax.jms.Connection;
> import javax.jms.Session;
> import org.apache.qpid.client.AMQConnection;
> import org.apache.qpid.jms.ConnectionURL;
>
> public class JMSAppenderQPIDQ2 extends AppenderSkeleton{
>
>         private Session session = null;
>         private AMQConnection connection = null;
>
>         private static String url =
> "amqp://test:nolose@clientid/test?brokerlist='tcp://localhost:5672'";
>         private boolean TRANSACTED = false;
>
>
>         public void activateOptions() {
>                 try {
>
>                         System.out.println("version 2");
>                         System.out.println(url);
>
>                         connection = new AMQConnection(url);
>                         connection.start();
>
>                         System.out.println("we start the connection");
>
>                         session = connection.createSession(TRANSACTED,
> Session.AUTO_ACKNOWLEDGE);
>
>                         System.out.println("OK TEST "+ new Date());
>                 } catch (Exception e) {
>                         e.printStackTrace();
>                 }
>         }
>
>
>         public void append(LoggingEvent event) {
>         }
>
>         public boolean requiresLayout() {
>                 return false;
>         }
>
>         public synchronized void close() {
>         }
>
> }
>
>
>
> the log4j properties..
> --------------------------------------------------------------------
>
> log4j.rootCategory=ALL, CONSOLE, JMSQpidQ
>
> log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
> log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
> log4j.appender.CONSOLE.layout.ConversionPattern = %d{HH:mm:ss} [%p] %m%n
>
> log4j.appender.FILE = org.apache.log4j.DailyRollingFileAppender
> log4j.appender.FILE.file = /home/miguel/prueba.log
> log4j.appender.FILE.append = true
> log4j.appender.FILE.DatePattern = '.'yyyyMMdd
> log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
> log4j.appender.FILE.layout.ConversionPattern = %d{HH:mm:ss} [%p] %m%n
>
> log4j.appender.JMSQpidQ = com.wfg.testqpid.appender.JMSAppenderQPIDQ2
>
> the test class
> ..................-------------------------------------------------------
>
> package com.wfg.testqpid;
>
> import java.net.URL;
> import java.util.Date;
>
> import org.apache.log4j.Logger;
> import org.apache.log4j.PropertyConfigurator;
> import org.apache.log4j.helpers.Loader;
>
>
>
> public class TheTest {
>         static Logger logger = Logger.getLogger(TheTest.class);
>
>         public TheTest() {
>                 super();
>                 URL url = Loader.getResource("log4j.properties");
>                 PropertyConfigurator.configure(url);
>         }
>
>         public void generaTest(){
>                 logger.info("Start"+ new Date());
>                 logger.info("End "+ new Date());
>         }
>
>         public static void main(String[] args) {
>                 new TheTest().generaTest();
>                 System.exit(0);
>         }
>
> }
>
>
> the error log...
> -------------------------------------------------------------
>
> version 2
> amqp://test:nolose@clientid/test?brokerlist='tcp://localhost:5672'
> 17:50:57 [DEBUG]
>
> Connection(1):amqp://test:********@clientid/test?brokerlist='tcp://localhost:5672'
> 17:50:57 [DEBUG] AMQP version 0-10
> 17:50:57 [DEBUG] Using ProtocolVersion for Session:0-10
> 17:50:57 [DEBUG] New Method Dispatcher:AMQProtocolSession[null]
> 17:50:57 [DEBUG] Creating content header body factory
> 17:50:57 [DEBUG] Creating content body factory
> 17:50:57 [DEBUG] Connecting with ProtocolHandler Version:0-10
> 17:50:57 [DEBUG] connecting to host: localhost port: 5672 vhost: test
> username: test password: ********
> 17:50:57 [DEBUG] SO_RCVBUF : 65535
> 17:50:57 [DEBUG] SO_SNDBUF : 65535
> 17:50:57 [DEBUG] TCP_NODELAY : true
> 17:50:57 [DEBUG] SEND: [conn:6de1dadb] AMQP.1 0-10
> 17:52:57 [INFO] Unable to connect to broker at tcp://localhost:5672
> org.apache.qpid.AMQException: Cannot connect to broker: close() timed out
> [error code 200: reply success]
>         at
>
> org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:241)
>         at
>
> org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:604)
>         at
> org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:383)
>         at
> org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:219)
>         at
>
> com.wfg.testqpid.appender.JMSAppenderQPIDQ2.activateOptions(JMSAppenderQPIDQ2.java:56)
>         at
> org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
>         at
>
> org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
>         at
>
> org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
>         at
>
> org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
>         at
>
> org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
>         at
>
> org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
>         at
>
> org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
>         at
>
> org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
>         at
>
> org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
>         at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
>         at org.apache.log4j.Logger.getLogger(Logger.java:117)
>         at com.wfg.testqpid.TheTest.<clinit>(TheTest.java:16)
> Caused by: org.apache.qpid.transport.ConnectionException: close() timed out
>         at org.apache.qpid.transport.Connection.close(Connection.java:640)
>         at org.apache.qpid.transport.Connection.close(Connection.java:581)
>         at
> org.apache.qpid.transport.Connection.connect(Connection.java:273)
>         at
>
> org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:221)
>         ... 16 more
> org.apache.qpid.AMQConnectionFailureException: close() timed out [error
> code
> 200: reply success]
>         at
> org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:460)
>         at
> org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:219)
>         at
>
> com.wfg.testqpid.appender.JMSAppenderQPIDQ2.activateOptions(JMSAppenderQPIDQ2.java:56)
>         at
> org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
>         at
>
> org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
>         at
>
> org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
>         at
>
> org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)17:52:57
> [DEBUG] All failover methods exhausted
> 17:52:57 [DEBUG] Are we connected:false
> 17:52:57 [DEBUG] Last attempted ProtocolHandler Version:0-10
> 17:50:57 [DEBUG] RECV: [conn:6de1dadb] AMQP.1 0-10
>
>         at
>
> org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
>         at
>
> org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
>         at
>
> org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
>         at
>
> org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
>         at
>
> org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
>         at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
>         at org.apache.log4j.Logger.getLogger(Logger.java:117)
>         at com.wfg.testqpid.TheTest.<clinit>(TheTest.java:16)
> Caused by: org.apache.qpid.AMQException: Cannot connect to broker: close()
> timed out [error code 200: reply success]
>         at
>
> org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:241)
>         at
>
> org.apache.qpid.client.AMQConnection.makeBrokerConnection(AMQConnection.java:604)
>         at
> org.apache.qpid.client.AMQConnection.<init>(AMQConnection.java:383)
>         ... 14 more
> Caused by: org.apache.qpid.transport.ConnectionException: close() timed out
>         at org.apache.qpid.transport.Connection.close(Connection.java:640)
>         at org.apache.qpid.transport.Connection.close(Connection.java:581)
>         at
> org.apache.qpid.transport.Connection.connect(Connection.java:273)
>         at
>
> org.apache.qpid.client.AMQConnectionDelegate_0_10.makeBrokerConnection(AMQConnectionDelegate_0_10.java:221)
>         ... 16 more
>
>
>
>
>
> --
> View this message in context:
> http://qpid.2158936.n2.nabble.com/The-AMQConnection-class-fail-to-connect-when-use-in-log4j-appender-tp7606582.html
> Sent from the Apache Qpid users mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
> For additional commands, e-mail: users-help@qpid.apache.org
>
>