title: mongodb 3.x driver Android compatibility
body: <p>I'm developing an Android app that use the java mongodb driver 3.0.3 to connect to every instance of mongodb.</p>
  
  <p>The connector code to a generic istance is:</p>
  
  <pre><code>try{
      MongoCredential credential = MongoCredential.createCredential(user, dbname, pass.toCharArray());
      MongoClient mongoClient = new MongoClient( new ServerAddress(server , port ), Arrays.asList(credential));
      MongoDatabase db = mongoClient.getDatabase(dbname);
      System.out.println("Connect to database successfully ");
      Iterator i= mongoClient.listDatabaseNames().iterator();
      while (i.hasNext()){
          Log.d("DATABASE", (String) i.next());
      }
      Iterator ic= db.listCollectionNames().iterator();
      while (ic.hasNext()){
          Log.d("COLLECTION", (String) ic.next());
      }
  }catch(Exception e){
      System.err.println( e.getClass().getName() + ": " + e.getMessage() );
  }
  </code></pre>
  
  <p>At runtime I have some error:</p>
  
  <blockquote>
    <p>09-11 19:13:50.898    7418-7418/it.mysite.mongodbviewer W/org.bson.ObjectId﹕ Failed to get process identifier from JMX, using random number instead java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory;</p>
  </blockquote>
  
  <p>and </p>
  
  <blockquote>
    <p>com.mongodb.MongoException: java.lang.NoClassDefFoundError: com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient</p>
  </blockquote>
  
  <p>that generate a loop with this:</p>
  
  <blockquote>
    <p>I/art﹕ Rejecting re-init on previously-failed class java.lang.Class
  </blockquote>
  
  <p>Anyone has a solution?
  java/lang/management/ManagementFactory seems not to exist for Android, how can you solve? If this is the center of the problem.</p>
  
  <p>Thanks in advance, Matteo</p>
  
  <p>PS: The complete log is:</p>
  
  <pre><code>09-11 19:13:50.898    7418-7418/it.mysite.mongodbviewer W/org.bson.ObjectId﹕ Failed to get process identifier from JMX, using random number instead
  java.lang.NoClassDefFoundError: Failed resolution of: Ljava/lang/management/ManagementFactory;
  at org.bson.types.ObjectId.createProcessIdentifier(ObjectId.java:502)
  at org.bson.types.ObjectId.&lt;clinit&gt;(ObjectId.java:460)
  at com.mongodb.connection.ClusterId.&lt;init&gt;(ClusterId.java:47)
  at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:40)
  at com.mongodb.Mongo.createCluster(Mongo.java:660)
  at com.mongodb.Mongo.createCluster(Mongo.java:646)
  at com.mongodb.Mongo.&lt;init&gt;(Mongo.java:275)
  at com.mongodb.MongoClient.&lt;init&gt;(MongoClient.java:184)
  at com.mongodb.MongoClient.&lt;init&gt;(MongoClient.java:160)
  at it.mysite.mongodbmanager.data.MongoDBDriver.connect(MongoDBDriver.java:102)
  at it.mysite.mongodbmanager.fragments.MongoDBAccountDetailFragment.onClick(MongoDBAccountDetailFragment.java:101)
  at android.view.View.performClick(View.java:4780)
  at android.view.View$PerformClick.run(View.java:19865)
  at android.os.Handler.handleCallback(Handler.java:739)
  at android.os.Handler.dispatchMessage(Handler.java:95)
  at android.os.Looper.loop(Looper.java:135)
  at android.app.ActivityThread.main(ActivityThread.java:5254)
  at java.lang.reflect.Method.invoke(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
   Caused by: java.lang.ClassNotFoundException: Didn't find class "java.lang.management.ManagementFactory" on path: DexPathList[[zip file "/data/app/it.mysite.mongodbviewer-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
      at org.bson.types.ObjectId.createProcessIdentifier(ObjectId.java:502)
      at org.bson.types.ObjectId.&lt;clinit&gt;(ObjectId.java:460)
      at com.mongodb.connection.ClusterId.&lt;init&gt;(ClusterId.java:47)
      at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:40)
      at com.mongodb.Mongo.createCluster(Mongo.java:660)
      at com.mongodb.Mongo.createCluster(Mongo.java:646)
      at com.mongodb.Mongo.&lt;init&gt;(Mongo.java:275)
      at com.mongodb.MongoClient.&lt;init&gt;(MongoClient.java:184)
      at com.mongodb.MongoClient.&lt;init&gt;(MongoClient.java:160)
      at it.mysite.mongodbmanager.data.MongoDBDriver.connect(MongoDBDriver.java:102)
      at it.mysite.mongodbmanager.fragments.MongoDBAccountDetailFragment.onClick(MongoDBAccountDetailFragment.java:101)
      at android.view.View.performClick(View.java:4780)
      at android.view.View$PerformClick.run(View.java:19865)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:135)
      at android.app.ActivityThread.main(ActivityThread.java:5254)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
  Suppressed: java.lang.ClassNotFoundException: java.lang.management.ManagementFactory
  at java.lang.Class.classForName(Native Method)
  at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
  at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
  ... 22 more
   Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
  09-11 19:13:50.901    7418-7418/it.mysite.mongodbviewer I/cluster﹕ Cluster created with settings {hosts=[192.168.1.74:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
  09-11 19:13:50.918    7418-7418/it.mysite.mongodbviewer I/System.out﹕ Connect to database successfully
  09-11 19:13:50.924    7418-7418/it.mysite.mongodbviewer I/cluster﹕ No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=192.168.1.74:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
  09-11 19:13:50.954    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  09-11 19:13:50.954    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  09-11 19:13:50.955    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  09-11 19:13:50.956    7418-7487/it.mysite.mongodbviewer I/cluster﹕ Exception in monitor thread while connecting to server 192.168.1.74:27017
  com.mongodb.MongoException: java.lang.NoClassDefFoundError: com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient
  at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:125)
  at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
  at java.lang.Thread.run(Thread.java:818)
   Caused by: java.lang.NoClassDefFoundError: com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient
  at com.mongodb.connection.ScramSha1Authenticator.createSaslClient(ScramSha1Authenticator.java:61)
  at com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:42)
  at com.mongodb.connection.DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32)
  at com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:99)
  at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:44)
  at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
  at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
  at java.lang.Thread.run(Thread.java:818)
  09-11 19:13:51.479    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  09-11 19:13:52.106    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  09-11 19:13:52.637    7418-7487/it.mysite.mongodbviewer I/art﹕ Rejecting re-init on previously-failed class java.lang.Class&lt;com.mongodb.connection.ScramSha1Authenticator$ScramSha1SaslClient&gt;
  </code></pre>