Uploaded image for project: 'Java Driver'
  1. Java Driver
  2. JAVA-357

Endless NullPointerException at com.mongodb.OutMessage.reset

    • Type: Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 2.5.3
    • Component/s: Cluster Management
    • Labels:
    • Environment:
      Window 7 SP1 32bit
      Glassfish 3.1 + Spring 3.0.5 (Can be ignore it)

      I had redeployed spring web application onto glassfish 3.1, I got endless NullPointerException at at com.mongodb.OutMessage.reset(OutMessage.java:73).
      (you can also refer this page - http://groups.google.com/group/mongodb-user/browse_thread/thread/a51a1f5f3850ba46/74272391a3ee37ab?hl=en&lnk=gst&q=endless#74272391a3ee37ab )

      Here is server log:
      [#|2011-05-12T01:05:37.251+0900|SEVERE|glassfish3.1|com.mongodb.ReplicaSetS tatus|_ThreadID=27;_ThreadName=Thread-1;|unexpected
      error getting config from node: localhost:10001
      java.lang.NullPointerException
      at com.mongodb.OutMessage.reset(OutMessage.java:73)
      at com.mongodb.OutMessage.<init>(OutMessage.java:51)
      at com.mongodb.OutMessage.query(OutMessage.java:38)
      at com.mongodb.DBPort.findOne(DBPort.java:142)
      at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:156)
      at com.mongodb.ReplicaSetStatus.updateAll(ReplicaSetStatus.java:277)
      at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:238)

      #]

      How to reproduce this issue:
      1. deploy application to glassfish
      2. redeploy same application to glassfish (or, drop the application from the glassfish)
      3. you can get that exception endless

      I inject MongoDB Connecter as spring bean.
      <bean id="MongoConnector" class="jwdm.core.bean.MongoConnector"
      p:host="localhost" p:port="10001">

      Here is full code of MongoConnector (as Spring bean):
      public class MongoConnector {
      private Mongo mongoDB;
      private String host;
      private String port;
      // Return an instance of Mongo
      public Mongo getMongo() {
      logger.debug("Retrieving MongoDB");
      if (mongoDB == null) {
      try

      { List<ServerAddress> addrs = new ArrayList<ServerAddress>(); addrs.add(new ServerAddress(host, Integer.parseInt(port))); mongoDB = new Mongo(addrs); }

      catch (UnknownHostException e)

      { logger.error(e.toString()); } catch (MongoException e) { logger.error(e.toString()); }


      }
      return mongoDB;
      }
      // Retrieve a db
      public DB getDB(String dbname)

      { logger.debug("Retrieving db: " + dbname); return getMongo().getDB(dbname); }


      // Retrieve a collection
      public DBCollection getCollection(String dbname, String collection)

      { logger.debug("Retrieving collection: " + collection); return getDB(dbname).getCollection(collection); }


      ... getter , setter ...
      }
      </bean>

      Before using spring bean style, I was using static factory style without spring.
      But it produces same exception.

      Here is static factory style code:

      public class MongoDBFactory {

      protected static Logger logger = LoggerFactory.getLogger(MongoDBFactory.class);

      private static Mongo mongoDB;

      // Make sure no one can instantiate our factory
      private MongoDBFactory() {
      }

      // Return an instance of Mongo
      public static Mongo getMongo() {
      logger.debug("Retrieving MongoDB");
      if (mongoDB == null) {
      try

      { List<ServerAddress> addrs = new ArrayList<ServerAddress>(); addrs.add(new ServerAddress("localhost", 10001)); //addrs.add(new ServerAddress("leewin12.cafe24.com", 10001)); mongoDB = new Mongo(addrs); }

      catch (UnknownHostException e)

      { logger.error(e.toString()); } catch (MongoException e) { logger.error(e.toString()); }

      }

      return mongoDB;
      }

      // Retrieve a db
      public static DB getDB(String dbname)

      { logger.debug("Retrieving db: " + dbname); return getMongo().getDB(dbname); }

      // Retrieve a collection
      public static DBCollection getCollection(String dbname, String collection)

      { logger.debug("Retrieving collection: " + collection); return getDB(dbname).getCollection(collection); }

      }

      Thank you for your helps,
      Greg

            Assignee:
            scotthernandez Scott Hernandez (Inactive)
            Reporter:
            leewin12 Gregory DH Lee
            Votes:
            1 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: