You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Stirling Chow (JIRA)" <ji...@apache.org> on 2009/11/01 21:40:52 UTC

[jira] Created: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
----------------------------------------------------------------------------------------------------------------------

                 Key: AMQ-2472
                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
             Project: ActiveMQ
          Issue Type: Bug
          Components: Connector
    Affects Versions: 5.3.0
         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
            Reporter: Stirling Chow


Symptom
========
When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:

2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
java.lang.NullPointerException
	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
	at java.lang.Thread.run(Thread.java:595)

Reproduction
===========
Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:

<broker brokerName="broker1" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50001)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50000"/>    
   </transportConnectors>
</broker>

and the other broker as:

<broker brokerName="broker2" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50000)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50001"/>    
   </transportConnectors>
</broker>

Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.

Cause
======
During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):

            NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
            try {
                bridge.start();
                bridges.put(uri, bridge);
            } catch (Exception e) {
                ServiceSupport.dispose(localTransport);
                ServiceSupport.dispose(remoteTransport);
                LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);

A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):

    protected void doStop(ServiceStopper stopper) throws Exception {
            httpMethod.abort();
    }

The NPE is caused becuase httpMethod is null.

When bridge.start() is called, it will pass through to HttpClientTransport#doStart():

        LOG.trace("HTTP GET consumer thread starting: " + this);
        HttpClient httpClient = getReceiveHttpClient();
        URI remoteUrl = getRemoteUrl();

        HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
        configureMethod(httpMethod);

        int answer = httpClient.executeMethod(httpMethod);

The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.

Solution
=======
Check that httpMethod is not null before disposing:

    protected void doStop(ServiceStopper stopper) throws Exception {
        if(httpMethod != null)
        {
            httpMethod.abort();
        }
    }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Stirling Chow (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stirling Chow updated AMQ-2472:
-------------------------------

    Description: 
Symptom
========
When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:

2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
java.lang.NullPointerException
	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
	at java.lang.Thread.run(Thread.java:595)

Reproduction
===========
Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:

<broker brokerName="broker1" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50001)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50000"/>    
   </transportConnectors>
</broker>

and the other broker as:

<broker brokerName="broker2" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50000)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50001"/>    
   </transportConnectors>
</broker>

Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.

Cause
======
During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):

            NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
            try {
                bridge.start();
                bridges.put(uri, bridge);
            } catch (Exception e) {
                ServiceSupport.dispose(localTransport);
                ServiceSupport.dispose(remoteTransport);
                LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);

A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):

    protected void doStop(ServiceStopper stopper) throws Exception {
            httpMethod.abort();
    }

The NPE is caused becuase httpMethod is null.

When bridge.start() is called, it will pass through to HttpClientTransport#doStart():

        LOG.trace("HTTP GET consumer thread starting: " + this);
        HttpClient httpClient = getReceiveHttpClient();
        URI remoteUrl = getRemoteUrl();

        HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
        configureMethod(httpMethod);

        int answer = httpClient.executeMethod(httpMethod);

The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.

Solution
=======
Check that httpMethod is not null before disposing in HttpClientTransport:

protected void doStop(ServiceStopper stopper) throws Exception {
   if(httpMethod != null)
   {
     httpMethod.abort();
   }
}

  was:
Symptom
========
When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:

2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
java.lang.NullPointerException
	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
	at java.lang.Thread.run(Thread.java:595)

Reproduction
===========
Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:

<broker brokerName="broker1" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50001)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50000"/>    
   </transportConnectors>
</broker>

and the other broker as:

<broker brokerName="broker2" persistent="false" useJmx="false">  
    <networkConnectors>
      <networkConnector uri="static:(http://localhost:50000)"/>
    </networkConnectors>

    <persistenceAdapter>
      <memoryPersistenceAdapter/>
    </persistenceAdapter>

   <transportConnectors>
      <transportConnector uri="http://localhost:50001"/>    
   </transportConnectors>
</broker>

Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.

Cause
======
During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):

            NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
            try {
                bridge.start();
                bridges.put(uri, bridge);
            } catch (Exception e) {
                ServiceSupport.dispose(localTransport);
                ServiceSupport.dispose(remoteTransport);
                LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);

A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):

    protected void doStop(ServiceStopper stopper) throws Exception {
            httpMethod.abort();
    }

The NPE is caused becuase httpMethod is null.

When bridge.start() is called, it will pass through to HttpClientTransport#doStart():

        LOG.trace("HTTP GET consumer thread starting: " + this);
        HttpClient httpClient = getReceiveHttpClient();
        URI remoteUrl = getRemoteUrl();

        HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
        configureMethod(httpMethod);

        int answer = httpClient.executeMethod(httpMethod);

The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.

Solution
=======
Check that httpMethod is not null before disposing:

    protected void doStop(ServiceStopper stopper) throws Exception {
        if(httpMethod != null)
        {
            httpMethod.abort();
        }
    }


> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Stirling Chow (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stirling Chow updated AMQ-2472:
-------------------------------

    Attachment:     (was: patch.txt)

> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Gary Tully (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully reassigned AMQ-2472:
-------------------------------

    Assignee: Gary Tully

> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>            Assignee: Gary Tully
>         Attachments: patch.txt
>
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Stirling Chow (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stirling Chow updated AMQ-2472:
-------------------------------

    Attachment: patch.txt

Patch with changes required to address this issue.  Unused imports have also been removed.

> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Stirling Chow (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Stirling Chow updated AMQ-2472:
-------------------------------

    Attachment: patch.txt

Patch with fix as well as cleanup of unused imports.

> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>         Attachments: patch.txt
>
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (AMQ-2472) NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.

Posted by "Gary Tully (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2472?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully resolved AMQ-2472.
-----------------------------

       Resolution: Fixed
    Fix Version/s: 5.4.0

patch applied with thanks :-)

> NullPointerException during startup of DiscoveryNetworkConnector when using an HTTP URL for an inactive remote broker.
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2472
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2472
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Connector
>    Affects Versions: 5.3.0
>         Environment: ActiveMQ 5.3.0 release (08/10/2009), Windows XP
>            Reporter: Stirling Chow
>            Assignee: Gary Tully
>             Fix For: 5.4.0
>
>         Attachments: patch.txt
>
>
> Symptom
> ========
> When starting a statically-configured network of two AMQ brokers, each of which uses HTTP as their transport, if one of the brokers is not running when the other starts up, the following NPE appears in the logs:
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - Using Persistence Adapter: MemoryPersistenceAdapter
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - ActiveMQ 5.3.0 JMS Message Broker (localhost) is starting
> 2009-11-01 11:05:53,626 [AlarmPoint Node-main] INFO    -  - For help or more information please see: http://activemq.apache.org/
> 2009-11-01 11:05:53,829 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.445::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
> 2009-11-01 11:05:53,876 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.492::INFO:  jetty-6.1.9
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] WARN    -  - 2009-11-01 11:05:53.538::INFO:  Started SocketConnector@localhost:50000
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Connector http://localhost:50000 Started
> 2009-11-01 11:05:53,922 [AlarmPoint Node-main] INFO    -  - Establishing network connection from vm://localhost to http://192.168.168.44:50001
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] DEBUG   -  - binding to broker: localhost
> 2009-11-01 11:05:53,938 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Started
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] DEBUG   -  - Shutting down VM connectors for broker: localhost
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopping connection: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Stopped transport: vm://localhost#0
> 2009-11-01 11:05:57,954 [ActiveMQ Transport Stopper: vm://localhost#0] DEBUG   -  - Connection Stopped: vm://localhost#0
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] INFO    -  - Connector vm://localhost Stopped
> 2009-11-01 11:05:57,954 [AlarmPoint Node-main] ERROR   -  - Could not stop service: HTTP Reader http://192.168.168.44:50001. Reason: java.lang.NullPointerException
> java.lang.NullPointerException
> 	at org.apache.activemq.transport.http.HttpClientTransport.doStop(HttpClientTransport.java:202)
> 	at org.apache.activemq.util.ServiceSupport.stop(ServiceSupport.java:69)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.TransportFilter.stop(TransportFilter.java:64)
> 	at org.apache.activemq.transport.ResponseCorrelator.stop(ResponseCorrelator.java:125)
> 	at org.apache.activemq.util.ServiceSupport.dispose(ServiceSupport.java:43)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.onServiceAdd(DiscoveryNetworkConnector.java:134)
> 	at org.apache.activemq.transport.discovery.simple.SimpleDiscoveryAgent.start(SimpleDiscoveryAgent.java:77)
> 	at org.apache.activemq.network.DiscoveryNetworkConnector.handleStart(DiscoveryNetworkConnector.java:182)
> 	at org.apache.activemq.network.NetworkConnector$1.doStart(NetworkConnector.java:56)
> 	at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:53)
> 	at org.apache.activemq.network.NetworkConnector.start(NetworkConnector.java:199)
> 	at org.apache.activemq.broker.BrokerService.startAllConnectors(BrokerService.java:1933)
> 	at org.apache.activemq.broker.BrokerService.start(BrokerService.java:471)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.startJmsBroker(MessageBusImpl.java:602)
> 	at com.invoqsystems.foundation.component.communication.MessageBusImpl.start(MessageBusImpl.java:364)
> 	at com.invoqsystems.apex.component.communication.NodeMessageBusImpl.start(NodeMessageBusImpl.java:207)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.startMessagingServer(NodeManager.java:975)
> 	at com.invoqsystems.apex.component.node.manager.NodeManager.start(NodeManager.java:199)
> 	at com.invoqsystems.apex.AlarmPointNode.startNodeManager(AlarmPointNode.vaja:162)
> 	at com.invoqsystems.apex.AlarmPointNode.run(AlarmPointNode.java:62)
> 	at java.lang.Thread.run(Thread.java:595)
> Reproduction
> ===========
> Configure one broker to listen to http://localhost:50000 and the other broker to list to http://localhost:50001.  Network the brokers together using the SimpleDiscoveryAgent (static) configuration:
> <broker brokerName="broker1" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50001)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50000"/>    
>    </transportConnectors>
> </broker>
> and the other broker as:
> <broker brokerName="broker2" persistent="false" useJmx="false">  
>     <networkConnectors>
>       <networkConnector uri="static:(http://localhost:50000)"/>
>     </networkConnectors>
>     <persistenceAdapter>
>       <memoryPersistenceAdapter/>
>     </persistenceAdapter>
>    <transportConnectors>
>       <transportConnector uri="http://localhost:50001"/>    
>    </transportConnectors>
> </broker>
> Start broker1, but do not start broker2.  Observe the stacktrace in broker1's logs.
> Cause
> ======
> During startup, the following code executes in DiscoveryNetworkConnector#onServiceAdd(DiscoveryEvent event):
>             NetworkBridge bridge = createBridge(localTransport, remoteTransport, event);
>             try {
>                 bridge.start();
>                 bridges.put(uri, bridge);
>             } catch (Exception e) {
>                 ServiceSupport.dispose(localTransport);
>                 ServiceSupport.dispose(remoteTransport);
>                 LOG.warn("Could not start network bridge between: " + localURIName + " and: " + uri + " due to: " + e);
> A bridge is created to connect broker1 to broker2 (http://localhost:50000 to http://localhost:50001), but since broker2 is not started, bridge.start() will throw a "Connection refused" exception.  In handling this exception, ServiceSupport.dispose(remoteTransport) is called, which eventually calls through to HttpClientTransport#doStop(ServiceStopper stopper):
>     protected void doStop(ServiceStopper stopper) throws Exception {
>             httpMethod.abort();
>     }
> The NPE is caused becuase httpMethod is null.
> When bridge.start() is called, it will pass through to HttpClientTransport#doStart():
>         LOG.trace("HTTP GET consumer thread starting: " + this);
>         HttpClient httpClient = getReceiveHttpClient();
>         URI remoteUrl = getRemoteUrl();
>         HeadMethod httpMethod = new HeadMethod(remoteUrl.toString());
>         configureMethod(httpMethod);
>         int answer = httpClient.executeMethod(httpMethod);
> The httpClient.executeMethod(httpMethod) throws the "connection refused" exception because the HEAD command cannot connect.  The httpMethod in doStart() is a local var, while the object-scope httpMethod is only set once the transport starts running,  which never occurs due to the HEAD failure.
> Solution
> =======
> Check that httpMethod is not null before disposing in HttpClientTransport:
> protected void doStop(ServiceStopper stopper) throws Exception {
>    if(httpMethod != null)
>    {
>      httpMethod.abort();
>    }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.