[JAVA-357] Endless NullPointerException at com.mongodb.OutMessage.reset Created: 22/May/11 Updated: 25/Jun/13 Resolved: 24/Oct/11 |
|
| Status: | Closed |
| Project: | Java Driver |
| Component/s: | Cluster Management |
| Affects Version/s: | 2.5.3 |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Gregory DH Lee | Assignee: | Scott Hernandez (Inactive) |
| Resolution: | Cannot Reproduce | Votes: | 1 |
| Labels: | redeploy | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Window 7 SP1 32bit |
||
| Description |
|
I had redeployed spring web application onto glassfish 3.1, I got endless NullPointerException at at com.mongodb.OutMessage.reset(OutMessage.java:73). Here is server log:
How to reproduce this issue: I inject MongoDB Connecter as spring bean. Here is full code of MongoConnector (as Spring bean): catch (UnknownHostException e) { logger.error(e.toString()); } catch (MongoException e) { logger.error(e.toString()); } Before using spring bean style, I was using static factory style without spring. 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 // Return an instance of Mongo catch (UnknownHostException e) { logger.error(e.toString()); } catch (MongoException e) { logger.error(e.toString()); }} return mongoDB; // Retrieve a db // Retrieve a collection } Thank you for your helps, |
| Comments |
| Comment by Michael D. Norman [ 21/Jun/11 ] |
|
I was wrong. I have not been able to reproduce this with 2.6.3. The version on the server wasn't updated properly so we were seeing the problem only with an older driver. |
| Comment by Remon van Vliet [ 17/Jun/11 ] |
|
We have the same problem. Occurs when redeploying a war without restarting the app server in (at least) GlassFish 3, Tomcat 6 and Jetty 7 which makes me think it's not related to specific app servers. I'm relatively sure it's a problem unique to dependency injection frameworks (we use Guice, but Spring should be implementing these things in a similar way). When you redeploy a WAR file in most app servers it will recreate the war scoped classloader which may somehow interfere with using a singleton Mongo instance in your DI framework. If it indeed is a DI specific problem then technically you can't call this is a java driver bug in the mongo driver since the code is correct. I have been unable to find a decent workaround in Guice that still allows the Mongo instance to be a singleton though. Will update once I do. UPDATE 1 : Cannot reproduce the issue with simple redeploying, nor with redeploying using a DI framework to provide the Mongo instance. Not sure if it's relevant but on the systems where I can reproduce it it's always thrown on com.mongodb.DBCursor.hasNext() |
| Comment by Scott Hernandez (Inactive) [ 15/Jun/11 ] |
|
Can you provide a simple war/web-app to reproduce this on tomcat 6? It does seem like a strange class-loader issue. |
| Comment by Michael D. Norman [ 15/Jun/11 ] |
|
I am running into the same exception, but I'm using Tomcat 6. It looks like |
| Comment by Gregory DH Lee [ 22/May/11 ] |
|
Oops, I omitted mongodb info, I'm using single mongodb without any replicaset |