play-jongo
play-jongo copied to clipboard
Path to MyMongoClientFactory for the ClassLoader
I have created a MyMongoCientFactory.java
under app->db->MyMongoClientFactory.java (db is a subfolder under app folder)
As suggested i have declared in my application.conf playjongo.mongoClientFactory="db.MyMongoClientFactory"
But i got an error [error] application - ClassNotFoundException java.lang.ClassNotFoundException: db.AppMongoClientFactory
It seems like the ClassLoader can't find MyMongoClientFactory.class. How should i declare the path to my MyMongoClientFactory in my case. Thanks a lot for you help.
Something in your description is wrong. You're speaking of "MyMongoCientFactory", which does not match "ClassNotFoundException: db.AppMongoClientFactory".
Thank for the quick reply, i thought at first it may be the case, but unfortunately it is just a typo of error output in my issue. I have renamed the class to get issue description consistent.
I have created a AppMongoClientFactory.java under app->db->AppMongoClientFactory.java (db is a subfolder under app folder)
As suggested i have declared in my application.conf playjongo.mongoClientFactory="db.AppMongoClientFactory"
But i still got the error
[info] play.api.Play - Application started (Dev)
[error] application - InstantiationException
java.lang.InstantiationException: db.AppMongoClientFactory
at java.lang.Class.newInstance(Class.java:427)
at uk.co.panaxiom.playjongo.PlayJongo.getMongoClientFactory(PlayJongo.java:78)
at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:44)
at uk.co.panaxiom.playjongo.PlayJongo.getInstance(PlayJongo.java:103)
at uk.co.panaxiom.playjongo.PlayJongo.forceNewInstance(PlayJongo.java:115)
at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:31)
at uk.co.panaxiom.playjongo.PlayJongo$$FastClassByGuice$$eca2f8fb.newInstance(<generated>)
at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:105)
Caused by: java.lang.NoSuchMethodException: db.AppMongoClientFactory.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
at uk.co.panaxiom.playjongo.PlayJongo.getMongoClientFactory(PlayJongo.java:78)
at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:44)
at uk.co.panaxiom.playjongo.PlayJongo.getInstance(PlayJongo.java:103)
at uk.co.panaxiom.playjongo.PlayJongo.forceNewInstance(PlayJongo.java:115)
at uk.co.panaxiom.playjongo.PlayJongo.<init>(PlayJongo.java:31)
at uk.co.panaxiom.playjongo.PlayJongo$$FastClassByGuice$$eca2f8fb.newInstance(<generated>)
at com.google.inject.internal.cglib.reflect.$FastConstructor.newInstance(FastConstructor.java:40)
at com.google.inject.internal.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:61)
After some research i have found this post about Dev-Mode ClassLoader does not contain app classes https://github.com/playframework/playframework/issues/822
I am currently using play 2.5.3. The issue about ClassLoader not cotain app classes is closed for play 2.1.0, i am not sure if it is still relevant for play 2.5.x.
I am using play 2.6.6 and I am having the same issue. In my case, my custom cassandra connection factory class that implement CassandraConnectionFactory interface/trait from spark-cassandra-connector library is throwing ClassNotFoundException.