Hi, 

I've built a GIS FLEX application that uses blazeDS' messaging
capability to push location (latitude/longitude/geocode) info to flex
clients.  

The message producer is a custom Java bootstrapper and adapter that
configures the messaging destination endpoints upon server startup.  

The destination runtime config java bootstrap method for our
"fleet_demo" destination looks like this:

public void initializeDestinations()
{       
        String destinationId = "fleet_demo";
        String serviceId = "message-service";
        MessageBroker broker = MessageBroker.getMessageBroker(null);
        MessageService service = (MessageService)
broker.getService(serviceId);
        MessageDestination destination = (MessageDestination)
service.createDestination(destinationId);
                
        destination.addChannel("my-streaming-amf"); 
        destination.addChannel("my-polling-amf");
        
        ServerSettings serverSettings = new ServerSettings();
        serverSettings.setMaxCacheSize(1000);
        serverSettings.setMessageTTL(0);
        serverSettings.setDurable(false);
        
        destination.setServerSettings(serverSettings);

        if (service.isStarted())
        {
                //initialize and run the destination
                destination.start();
        }
}


The bootstrapper also spawns a separate thread that continuously
receives location data from our server and packages it into an
AsyncMessage and routes it to the appropriate destination using a
method similar to this:

private void sendMessage(latitudeFromServer:double,
longitudeFromServer:double)
{
      MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
      String clientID = UUIDUtils.createUUID(false);
      AsyncMessage msg = new AsyncMessage();

      msg.setDestination("fleet_demo");
      msg.setHeader("latitude", latitudeFromServer);
      msg.setHeader("longitude", longitudeFromServer);
 
      msg.setClientId(clientID);
      msg.setMessageId(UUIDUtils.createUUID(false));
      msg.setTimestamp(System.currentTimeMillis());
      msgBroker.routeMessageToService(msg, null);
}


Now I start up the server and the bootstrapper initializes the
"fleet_demo" endpoint and the sendMessage thread routes location data
perfectly to my flex client(averaging about 500-1600 messages per
hour)  It works!  This keeps up for about 5-6 days.  After that I stop
receiving any messages when I should be.  Its as though the
MessageBrokerServlet just goes silent.  The only way to fix this is to
restart jboss and when I try to shutdown the server I get this NPE
message from the MessageBrokerServlet:

11:22:36,295 INFO [Server] Runtime shutdown hook called, forceHalt: true
11:22:36,295 INFO [Server] JBoss SHUTDOWN: Undeploying all packages
11:22:36,296 INFO [TomcatDeployer] undeploy, ctxPath=/jmx-console,
warUrl=.../deploy/jmx-console.war/
11:22:36,330 INFO [TomcatDeployer] undeploy, ctxPath=/enterprise,
warUrl=.../deploy/enterprise.war/
11:22:36,331 INFO [StandardWrapper] Waiting for 5 instance(s) to be
deallocated
11:22:37,350 INFO [StandardWrapper] Waiting for 5 instance(s) to be
deallocated
11:22:38,373 INFO [StandardWrapper] Waiting for 3 instance(s) to be
deallocated
11:22:38,512 ERROR [[MessageBrokerServlet]] Servlet.service() for
servlet MessageBrokerServlet threw exception
java.lang.NullPointerException
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.handleFlexClientStreamingOpenRequest(BaseStreamingHTTPEndpoint.java:959)
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.serviceStreamingRequest(BaseStreamingHTTPEndpoint.java:1131)
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.service(BaseStreamingHTTPEndpoint.java:468)
        at
flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:595)
11:22:38,514 ERROR [[MessageBrokerServlet]] Servlet.service() for
servlet MessageBrokerServlet threw exception
java.lang.NullPointerException
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.handleFlexClientStreamingOpenRequest(BaseStreamingHTTPEndpoint.java:959)
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.serviceStreamingRequest(BaseStreamingHTTPEndpoint.java:1131)
        at
flex.messaging.endpoints.BaseStreamingHTTPEndpoint.service(BaseStreamingHTTPEndpoint.java:468)
        at
flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:377)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
        at java.lang.Thread.run(Thread.java:595) 



I've created a bug report at the Adobe BlazeDS bug and issue
management page but I need a robust messaging solution for this
project and I was wondering if anybody here had any experience
regarding this problem.  


Thanks for reading,

-Justin

Reply via email to